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
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

init.go 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package dc
  2. import (
  3. "context"
  4. "net"
  5. "time"
  6. "github.com/9seconds/mtg/v2/essentials"
  7. )
  8. type preferIP uint8
  9. const (
  10. preferIPOnlyIPv4 preferIP = iota
  11. preferIPOnlyIPv6
  12. preferIPPreferIPv4
  13. preferIPPreferIPv6
  14. )
  15. const (
  16. // Default DC to connect to if not sure.
  17. DefaultDC = 2
  18. // How often should we request updates from
  19. // https://core.telegram.org/getProxyConfig
  20. PublicConfigUpdateEach = time.Hour
  21. PublicConfigUpdateURLv4 = "https://core.telegram.org/getProxyConfig"
  22. PublicConfigUpdateURLv6 = "https://core.telegram.org/getProxyConfigV6"
  23. // How often should we extract hosts from Telegram using help.getConfig
  24. // method.
  25. OwnConfigUpdateEach = time.Hour
  26. )
  27. type Logger interface {
  28. Info(msg string)
  29. WarningError(msg string, err error)
  30. }
  31. type Updater interface {
  32. Run(ctx context.Context)
  33. }
  34. // https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp#L30
  35. var defaultDCAddrSet = (func() dcAddrSet {
  36. addrSet := dcAddrSet{
  37. v4: make(map[int][]Addr),
  38. v6: make(map[int][]Addr),
  39. }
  40. for dcid, ips := range essentials.TelegramCoreAddresses {
  41. for _, addr := range ips {
  42. host, _, err := net.SplitHostPort(addr)
  43. if err != nil {
  44. panic(err)
  45. }
  46. ip := net.ParseIP(host)
  47. if ip == nil {
  48. panic(addr)
  49. }
  50. if ip.To4() == nil {
  51. addrSet.v6[dcid] = append(addrSet.v6[dcid], Addr{
  52. Network: "tcp6",
  53. Address: addr,
  54. })
  55. } else {
  56. addrSet.v4[dcid] = append(addrSet.v4[dcid], Addr{
  57. Network: "tcp4",
  58. Address: addr,
  59. })
  60. }
  61. }
  62. }
  63. return addrSet
  64. })()