Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

init.go 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package mtglib
  2. import (
  3. "context"
  4. "errors"
  5. "net"
  6. "net/http"
  7. "time"
  8. )
  9. var (
  10. ErrSecretEmpty = errors.New("secret is empty")
  11. ErrSecretInvalid = errors.New("secret is invalid")
  12. ErrNetworkIsNotDefined = errors.New("network is not defined")
  13. ErrAntiReplayCacheIsNotDefined = errors.New("anti-replay cache is not defined")
  14. ErrTimeAttackDetectorIsNotDefined = errors.New("time attack detector is not defined")
  15. ErrIPBlocklistIsNotDefined = errors.New("ip blocklist is not defined")
  16. ErrEventStreamIsNotDefined = errors.New("event stream is not defined")
  17. ErrLoggerIsNotDefined = errors.New("logger is not defined")
  18. )
  19. const (
  20. DefaultConcurrency = 4096
  21. DefaultBufferSize = 16 * 1024 // 16 kib
  22. DefaultDomainFrontingPort = 443
  23. DefaultIdleTimeout = time.Minute
  24. DefaultPreferIP = "prefer-ipv6"
  25. )
  26. type Network interface {
  27. Dial(network, address string) (net.Conn, error)
  28. DialContext(ctx context.Context, network, address string) (net.Conn, error)
  29. MakeHTTPClient(func(ctx context.Context, network, address string) (net.Conn, error)) *http.Client
  30. }
  31. type AntiReplayCache interface {
  32. SeenBefore(data []byte) bool
  33. Shutdown()
  34. }
  35. type IPBlocklist interface {
  36. Contains(net.IP) bool
  37. Shutdown()
  38. }
  39. type Event interface {
  40. StreamID() string
  41. Timestamp() time.Time
  42. }
  43. type EventStream interface {
  44. Send(context.Context, Event)
  45. Shutdown()
  46. }
  47. type TimeAttackDetector interface {
  48. Valid(time.Time) error
  49. }
  50. type Logger interface {
  51. Named(name string) Logger
  52. BindInt(name string, value int) Logger
  53. BindStr(name, value string) Logger
  54. Printf(format string, args ...interface{})
  55. Info(msg string)
  56. InfoError(msg string, err error)
  57. Warning(msg string)
  58. WarningError(msg string, err error)
  59. Debug(msg string)
  60. DebugError(msg string, err error)
  61. }