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
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

telegram.go 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package dc
  2. import (
  3. "fmt"
  4. "net"
  5. "strings"
  6. )
  7. type Telegram struct {
  8. view dcView
  9. preferIP preferIP
  10. }
  11. func (t *Telegram) GetAddresses(dc int) []Addr {
  12. switch t.preferIP {
  13. case preferIPOnlyIPv4:
  14. return t.view.getV4(dc)
  15. case preferIPOnlyIPv6:
  16. return t.view.getV4(dc)
  17. case preferIPPreferIPv4:
  18. return append(t.view.getV4(dc), t.view.getV6(dc)...)
  19. }
  20. return append(t.view.getV6(dc), t.view.getV4(dc)...)
  21. }
  22. func New(ipPreference string, userOverrides map[int][]string) (*Telegram, error) {
  23. var pref preferIP
  24. switch strings.ToLower(ipPreference) {
  25. case "prefer-ipv4":
  26. pref = preferIPPreferIPv4
  27. case "prefer-ipv6":
  28. pref = preferIPPreferIPv6
  29. case "only-ipv4":
  30. pref = preferIPOnlyIPv4
  31. case "only-ipv6":
  32. pref = preferIPOnlyIPv6
  33. default:
  34. return nil, fmt.Errorf("unknown ip preference %s", ipPreference)
  35. }
  36. overrides := dcAddrSet{
  37. v4: map[int][]Addr{},
  38. v6: map[int][]Addr{},
  39. }
  40. for dc, addrs := range userOverrides {
  41. for _, addr := range addrs {
  42. host, _, err := net.SplitHostPort(addr)
  43. if err != nil {
  44. return nil, fmt.Errorf("incorrect host %s: %w", addr, err)
  45. }
  46. parsed := net.ParseIP(host)
  47. if parsed == nil {
  48. return nil, fmt.Errorf("incorrect host %s", addr)
  49. }
  50. if parsed.To4() != nil {
  51. overrides.v4[dc] = append(overrides.v4[dc], Addr{
  52. Network: "tcp4",
  53. Address: addr,
  54. })
  55. } else {
  56. overrides.v6[dc] = append(overrides.v6[dc], Addr{
  57. Network: "tcp6",
  58. Address: addr,
  59. })
  60. }
  61. }
  62. }
  63. return &Telegram{
  64. view: dcView{
  65. overrides: overrides,
  66. },
  67. preferIP: pref,
  68. }, nil
  69. }