Parcourir la source

Fetch DC ips from Telegram

tags/v2.1.9^2
9seconds il y a 2 mois
Parent
révision
852ca713c8

+ 29
- 0
go.mod Voir le fichier

28
 )
28
 )
29
 
29
 
30
 require (
30
 require (
31
+	github.com/gotd/td v0.139.0
31
 	github.com/txthinking/socks5 v0.0.0-20251011041537-5c31f201a10e
32
 	github.com/txthinking/socks5 v0.0.0-20251011041537-5c31f201a10e
32
 	github.com/yl2chen/cidranger v1.0.2
33
 	github.com/yl2chen/cidranger v1.0.2
33
 )
34
 )
34
 
35
 
35
 require (
36
 require (
36
 	github.com/beorn7/perks v1.0.1 // indirect
37
 	github.com/beorn7/perks v1.0.1 // indirect
38
+	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
37
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
39
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
40
+	github.com/coder/websocket v1.8.14 // indirect
38
 	github.com/davecgh/go-spew v1.1.1 // indirect
41
 	github.com/davecgh/go-spew v1.1.1 // indirect
42
+	github.com/dlclark/regexp2 v1.11.5 // indirect
43
+	github.com/fatih/color v1.18.0 // indirect
44
+	github.com/ghodss/yaml v1.0.0 // indirect
45
+	github.com/go-faster/errors v0.7.1 // indirect
46
+	github.com/go-faster/jx v1.2.0 // indirect
47
+	github.com/go-faster/xor v1.0.0 // indirect
48
+	github.com/go-faster/yaml v0.4.6 // indirect
49
+	github.com/google/uuid v1.6.0 // indirect
50
+	github.com/gotd/ige v0.2.2 // indirect
51
+	github.com/gotd/neo v0.1.5 // indirect
52
+	github.com/klauspost/compress v1.18.3 // indirect
39
 	github.com/kr/text v0.2.0 // indirect
53
 	github.com/kr/text v0.2.0 // indirect
40
 	github.com/mattn/go-colorable v0.1.14 // indirect
54
 	github.com/mattn/go-colorable v0.1.14 // indirect
41
 	github.com/mattn/go-isatty v0.0.20 // indirect
55
 	github.com/mattn/go-isatty v0.0.20 // indirect
42
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
56
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
57
+	github.com/ogen-go/ogen v1.16.0 // indirect
43
 	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
58
 	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
44
 	github.com/pmezard/go-difflib v1.0.0 // indirect
59
 	github.com/pmezard/go-difflib v1.0.0 // indirect
45
 	github.com/prometheus/client_model v0.6.2 // indirect
60
 	github.com/prometheus/client_model v0.6.2 // indirect
61
+	github.com/segmentio/asm v1.2.1 // indirect
62
+	github.com/shopspring/decimal v1.4.0 // indirect
46
 	github.com/txthinking/runnergroup v0.0.0-20250224021307-5864ffeb65ae // indirect
63
 	github.com/txthinking/runnergroup v0.0.0-20250224021307-5864ffeb65ae // indirect
64
+	go.opentelemetry.io/otel v1.40.0 // indirect
65
+	go.opentelemetry.io/otel/metric v1.40.0 // indirect
66
+	go.opentelemetry.io/otel/trace v1.40.0 // indirect
67
+	go.uber.org/atomic v1.11.0 // indirect
68
+	go.uber.org/multierr v1.11.0 // indirect
69
+	go.uber.org/zap v1.27.1 // indirect
47
 	go.yaml.in/yaml/v2 v2.4.3 // indirect
70
 	go.yaml.in/yaml/v2 v2.4.3 // indirect
71
+	golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 // indirect
72
+	golang.org/x/mod v0.32.0 // indirect
48
 	golang.org/x/sync v0.19.0 // indirect
73
 	golang.org/x/sync v0.19.0 // indirect
74
+	golang.org/x/text v0.34.0 // indirect
75
+	golang.org/x/tools v0.41.0 // indirect
76
+	gopkg.in/yaml.v2 v2.4.0 // indirect
49
 	gopkg.in/yaml.v3 v3.0.1 // indirect
77
 	gopkg.in/yaml.v3 v3.0.1 // indirect
78
+	rsc.io/qr v0.2.0 // indirect
50
 )
79
 )

+ 61
- 0
go.sum Voir le fichier

14
 github.com/babolivier/go-doh-client v0.0.0-20201028162107-a76cff4cb8b6/go.mod h1:J29hk+f9lJrblVIfiJOtTFk+OblBawmib4uz/VdKzlg=
14
 github.com/babolivier/go-doh-client v0.0.0-20201028162107-a76cff4cb8b6/go.mod h1:J29hk+f9lJrblVIfiJOtTFk+OblBawmib4uz/VdKzlg=
15
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
15
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
16
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
16
 github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
17
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
18
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
17
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
19
 github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
18
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
20
 github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
21
+github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g=
22
+github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg=
19
 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
23
 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
20
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
24
 github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
21
 github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U=
25
 github.com/d4l3k/messagediff v1.2.1 h1:ZcAIMYsUg0EAp9X+tt8/enBE/Q8Yd5kzPynLyKptt9U=
23
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
27
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
24
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
28
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
25
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
29
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
30
+github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
31
+github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
32
+github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
33
+github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
34
+github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
35
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
36
+github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
37
+github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
38
+github.com/go-faster/jx v1.2.0 h1:T2YHJPrFaYu21fJtUxC9GzmluKu8rVIFDwwGBKTDseI=
39
+github.com/go-faster/jx v1.2.0/go.mod h1:UWLOVDmMG597a5tBFPLIWJdUxz5/2emOpfsj9Neg0PE=
40
+github.com/go-faster/xor v0.3.0/go.mod h1:x5CaDY9UKErKzqfRfFZdfu+OSTfoZny3w5Ak7UxcipQ=
41
+github.com/go-faster/xor v1.0.0 h1:2o8vTOgErSGHP3/7XwA5ib1FTtUsNtwCoLLBjl31X38=
42
+github.com/go-faster/xor v1.0.0/go.mod h1:x5CaDY9UKErKzqfRfFZdfu+OSTfoZny3w5Ak7UxcipQ=
43
+github.com/go-faster/yaml v0.4.6 h1:lOK/EhI04gCpPgPhgt0bChS6bvw7G3WwI8xxVe0sw9I=
44
+github.com/go-faster/yaml v0.4.6/go.mod h1:390dRIvV4zbnO7qC9FGo6YYutc+wyyUSHBgbXL52eXk=
26
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
45
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
27
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
46
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
28
 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
47
 github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
48
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
49
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
50
+github.com/gotd/ige v0.2.2 h1:XQ9dJZwBfDnOGSTxKXBGP4gMud3Qku2ekScRjDWWfEk=
51
+github.com/gotd/ige v0.2.2/go.mod h1:tuCRb+Y5Y3eNTo3ypIfNpQ4MFjrnONiL2jN2AKZXmb0=
52
+github.com/gotd/neo v0.1.5 h1:oj0iQfMbGClP8xI59x7fE/uHoTJD7NZH9oV1WNuPukQ=
53
+github.com/gotd/neo v0.1.5/go.mod h1:9A2a4bn9zL6FADufBdt7tZt+WMhvZoc5gWXihOPoiBQ=
54
+github.com/gotd/td v0.139.0 h1:3viuXqNdC0+mmd5GerDFp/rlII/QcZSzh/pjuG56NSU=
55
+github.com/gotd/td v0.139.0/go.mod h1:nBietiOYxaXEo6PmRp73LL64upWlk9rcFEZSJu6VieY=
29
 github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
56
 github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
30
 github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
57
 github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
31
 github.com/jarcoal/httpmock v1.0.8 h1:8kI16SoO6LQKgPE7PvQuV+YuD/inwHd7fOOe2zMbo4k=
58
 github.com/jarcoal/httpmock v1.0.8 h1:8kI16SoO6LQKgPE7PvQuV+YuD/inwHd7fOOe2zMbo4k=
32
 github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
59
 github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
33
 github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
60
 github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
34
 github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
61
 github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
62
+github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw=
63
+github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
35
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
64
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
36
 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
65
 github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
37
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
66
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
51
 github.com/miekg/dns v1.1.51/go.mod h1:2Z9d3CP1LQWihRZUf29mQ19yDThaI4DAYzte2CaQW5c=
80
 github.com/miekg/dns v1.1.51/go.mod h1:2Z9d3CP1LQWihRZUf29mQ19yDThaI4DAYzte2CaQW5c=
52
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
81
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
53
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
82
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
83
+github.com/ogen-go/ogen v1.16.0 h1:fKHEYokW/QrMzVNXId74/6RObRIUs9T2oroGKtR25Iw=
84
+github.com/ogen-go/ogen v1.16.0/go.mod h1:s3nWiMzybSf8fhxckyO+wtto92+QHpEL8FmkPnhL3jI=
54
 github.com/panjf2000/ants/v2 v2.11.5 h1:a7LMnMEeux/ebqTux140tRiaqcFTV0q2bEHF03nl6Rg=
85
 github.com/panjf2000/ants/v2 v2.11.5 h1:a7LMnMEeux/ebqTux140tRiaqcFTV0q2bEHF03nl6Rg=
55
 github.com/panjf2000/ants/v2 v2.11.5/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
86
 github.com/panjf2000/ants/v2 v2.11.5/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
56
 github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
87
 github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
70
 github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=
101
 github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=
71
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
102
 github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
72
 github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
103
 github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
104
+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
73
 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
105
 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
74
 github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
106
 github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
75
 github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
107
 github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
108
+github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
109
+github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
110
+github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
111
+github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
76
 github.com/smira/go-statsd v1.3.4 h1:kBYWcLSGT+qC6JVbvfz48kX7mQys32fjDOPrfmsSx2c=
112
 github.com/smira/go-statsd v1.3.4 h1:kBYWcLSGT+qC6JVbvfz48kX7mQys32fjDOPrfmsSx2c=
77
 github.com/smira/go-statsd v1.3.4/go.mod h1:RjdsESPgDODtg1VpVVf9MJrEW2Hw0wtRNbmB1CAhu6A=
113
 github.com/smira/go-statsd v1.3.4/go.mod h1:RjdsESPgDODtg1VpVVf9MJrEW2Hw0wtRNbmB1CAhu6A=
78
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
114
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
97
 github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU=
133
 github.com/yl2chen/cidranger v1.0.2 h1:lbOWZVCG1tCRX4u24kuM1Tb4nHqWkDxwLdoS+SevawU=
98
 github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
134
 github.com/yl2chen/cidranger v1.0.2/go.mod h1:9U1yz7WPYDwf0vpNWFaeRh0bjwz5RVgRy/9UEQfHl0g=
99
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
135
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
136
+go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms=
137
+go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g=
138
+go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
139
+go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc=
140
+go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw=
141
+go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA=
142
+go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
143
+go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
100
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
144
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
101
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
145
 go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
146
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
147
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
148
+go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
149
+go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
102
 go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
150
 go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
103
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
151
 go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
104
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
152
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
105
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
153
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
106
 golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
154
 golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts=
107
 golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos=
155
 golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos=
156
+golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY=
157
+golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
108
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
158
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
109
 golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
159
 golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA=
110
 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
160
 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
161
+golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=
162
+golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=
111
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
163
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
112
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
164
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
113
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
165
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
115
 golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
167
 golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
116
 golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
168
 golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
117
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
169
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
170
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
118
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
171
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
119
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
172
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
120
 golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
173
 golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
137
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
190
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
138
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
191
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
139
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
192
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
193
+golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk=
194
+golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA=
140
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
195
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
141
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
196
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
142
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
197
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
143
 golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM=
198
 golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM=
144
 golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
199
 golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
200
+golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=
201
+golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=
145
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
202
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
146
 google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
203
 google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
147
 google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
204
 google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
149
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
206
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
150
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
207
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
151
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
208
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
209
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
210
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
152
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
211
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
153
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
212
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
154
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
213
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
214
+rsc.io/qr v0.2.0 h1:6vBLea5/NRMVTz8V66gipeLycZMl/+UlFmk8DvqQ6WY=
215
+rsc.io/qr v0.2.0/go.mod h1:IF+uZjkb9fqyeF/4tlBoynqmQxUoPfWEKh921coOuXs=

+ 0
- 41
mtglib/internal/telegram/address_pool.go Voir le fichier

1
-package telegram
2
-
3
-import "math/rand"
4
-
5
-type addressPool struct {
6
-	v4 [][]tgAddr
7
-	v6 [][]tgAddr
8
-}
9
-
10
-func (a addressPool) isValidDC(dc int) bool {
11
-	return dc > 0 && dc <= len(a.v4) && dc <= len(a.v6)
12
-}
13
-
14
-func (a addressPool) getRandomDC() int {
15
-	return 1 + rand.Intn(len(a.v4))
16
-}
17
-
18
-func (a addressPool) getV4(dc int) []tgAddr {
19
-	return a.get(a.v4, dc-1)
20
-}
21
-
22
-func (a addressPool) getV6(dc int) []tgAddr {
23
-	return a.get(a.v6, dc-1)
24
-}
25
-
26
-func (a addressPool) get(addresses [][]tgAddr, dc int) []tgAddr {
27
-	if dc < 0 || dc >= len(addresses) {
28
-		return nil
29
-	}
30
-
31
-	rv := make([]tgAddr, len(addresses[dc]))
32
-	copy(rv, addresses[dc])
33
-
34
-	if len(rv) > 1 {
35
-		rand.Shuffle(len(rv), func(i, j int) {
36
-			rv[i], rv[j] = rv[j], rv[i]
37
-		})
38
-	}
39
-
40
-	return rv
41
-}

+ 19
- 0
mtglib/internal/telegram/dc_addresses.go Voir le fichier

1
+package telegram
2
+
3
+type dcAddresses struct {
4
+	v4 map[int][]tgAddr
5
+	v6 map[int][]tgAddr
6
+}
7
+
8
+func (a dcAddresses) getV4(dc int) []tgAddr {
9
+	return a.v4[dc]
10
+}
11
+
12
+func (a dcAddresses) getV6(dc int) []tgAddr {
13
+	return a.v6[dc]
14
+}
15
+
16
+func (a dcAddresses) isValidDC(dc int) bool {
17
+	_, ok := a.v4[dc]
18
+	return ok
19
+}

+ 25
- 35
mtglib/internal/telegram/init.go Voir le fichier

3
 import (
3
 import (
4
 	"context"
4
 	"context"
5
 	"errors"
5
 	"errors"
6
+	"time"
6
 
7
 
7
 	"github.com/9seconds/mtg/v2/essentials"
8
 	"github.com/9seconds/mtg/v2/essentials"
8
 )
9
 )
18
 	preferIPPreferIPv6
19
 	preferIPPreferIPv6
19
 )
20
 )
20
 
21
 
22
+const (
23
+	defaultDC                    = 2
24
+	defaultUpdateDCAddressesEach = time.Hour
25
+	defaultAppID                 = 123456
26
+	defaultAppHash               = ""
27
+)
28
+
29
+type loggerInterface interface {
30
+	Info(msg string)
31
+	WarningError(msg string, err error)
32
+}
33
+
21
 type tgAddr struct {
34
 type tgAddr struct {
22
 	network string
35
 	network string
23
 	address string
36
 	address string
25
 
38
 
26
 // https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp#L30
39
 // https://github.com/telegramdesktop/tdesktop/blob/master/Telegram/SourceFiles/mtproto/mtproto_dc_options.cpp#L30
27
 var (
40
 var (
28
-	productionV4Addresses = [][]tgAddr{
29
-		{ // dc1
41
+	defaultV4Addresses = map[int][]tgAddr{
42
+		1: {
30
 			{network: "tcp4", address: "149.154.175.50:443"},
43
 			{network: "tcp4", address: "149.154.175.50:443"},
31
 		},
44
 		},
32
-		{ // dc2
45
+		2: {
33
 			{network: "tcp4", address: "149.154.167.51:443"},
46
 			{network: "tcp4", address: "149.154.167.51:443"},
34
 			{network: "tcp4", address: "95.161.76.100:443"},
47
 			{network: "tcp4", address: "95.161.76.100:443"},
35
 		},
48
 		},
36
-		{ // dc3
49
+		3: {
37
 			{network: "tcp4", address: "149.154.175.100:443"},
50
 			{network: "tcp4", address: "149.154.175.100:443"},
38
 		},
51
 		},
39
-		{ // dc4
52
+		4: {
40
 			{network: "tcp4", address: "149.154.167.91:443"},
53
 			{network: "tcp4", address: "149.154.167.91:443"},
41
 		},
54
 		},
42
-		{ // dc5
55
+		5: {
43
 			{network: "tcp4", address: "149.154.171.5:443"},
56
 			{network: "tcp4", address: "149.154.171.5:443"},
44
 		},
57
 		},
45
 	}
58
 	}
46
-	productionV6Addresses = [][]tgAddr{
47
-		{ // dc1
59
+	defaultV6Addresses = map[int][]tgAddr{
60
+		1: {
48
 			{network: "tcp6", address: "[2001:b28:f23d:f001::a]:443"},
61
 			{network: "tcp6", address: "[2001:b28:f23d:f001::a]:443"},
49
 		},
62
 		},
50
-		{ // dc2
63
+		2: {
51
 			{network: "tcp6", address: "[2001:67c:04e8:f002::a]:443"},
64
 			{network: "tcp6", address: "[2001:67c:04e8:f002::a]:443"},
52
 		},
65
 		},
53
-		{ // dc3
66
+		3: {
54
 			{network: "tcp6", address: "[2001:b28:f23d:f003::a]:443"},
67
 			{network: "tcp6", address: "[2001:b28:f23d:f003::a]:443"},
55
 		},
68
 		},
56
-		{ // dc4
69
+		4: {
57
 			{network: "tcp6", address: "[2001:67c:04e8:f004::a]:443"},
70
 			{network: "tcp6", address: "[2001:67c:04e8:f004::a]:443"},
58
 		},
71
 		},
59
-		{ // dc5
72
+		5: {
60
 			{network: "tcp6", address: "[2001:b28:f23f:f005::a]:443"},
73
 			{network: "tcp6", address: "[2001:b28:f23f:f005::a]:443"},
61
 		},
74
 		},
62
 	}
75
 	}
63
-
64
-	testV4Addresses = [][]tgAddr{
65
-		{ // dc1
66
-			{network: "tcp4", address: "149.154.175.10:443"},
67
-		},
68
-		{ // dc2
69
-			{network: "tcp4", address: "149.154.167.40:443"},
70
-		},
71
-		{ // dc3
72
-			{network: "tcp4", address: "149.154.175.117:443"},
73
-		},
74
-	}
75
-	testV6Addresses = [][]tgAddr{
76
-		{ // dc1
77
-			{network: "tcp6", address: "[2001:b28:f23d:f001::e]:443"},
78
-		},
79
-		{ // dc2
80
-			{network: "tcp6", address: "[2001:67c:04e8:f002::e]:443"},
81
-		},
82
-		{ // dc3
83
-			{network: "tcp6", address: "[2001:b28:f23d:f003::e]:443"},
84
-		},
85
-	}
86
 )
76
 )
87
 
77
 
88
 type Dialer interface {
78
 type Dialer interface {

+ 42
- 0
mtglib/internal/telegram/rpc_client.go Voir le fichier

1
+package telegram
2
+
3
+import (
4
+	"context"
5
+	"net"
6
+	"strconv"
7
+
8
+	"github.com/gotd/td/telegram"
9
+)
10
+
11
+type rpcClient struct {
12
+	*telegram.Client
13
+}
14
+
15
+func (r rpcClient) getDCAddresses(logger loggerInterface, ctx context.Context) (dcAddresses, error) {
16
+	addrs := dcAddresses{
17
+		v4: map[int][]tgAddr{},
18
+		v6: map[int][]tgAddr{},
19
+	}
20
+
21
+	err := r.Client.Run(ctx, func(_ context.Context) error {
22
+		for _, opt := range r.Client.Config().DCOptions {
23
+			addr := net.JoinHostPort(opt.IPAddress, strconv.Itoa(opt.Port))
24
+
25
+			if opt.Ipv6 {
26
+				addrs.v6[opt.ID] = append(addrs.v6[opt.ID], tgAddr{
27
+					network: "tcp6",
28
+					address: addr,
29
+				})
30
+			} else {
31
+				addrs.v4[opt.ID] = append(addrs.v4[opt.ID], tgAddr{
32
+					network: "tcp4",
33
+					address: addr,
34
+				})
35
+			}
36
+		}
37
+
38
+		return nil
39
+	})
40
+
41
+	return addrs, err
42
+}

+ 80
- 24
mtglib/internal/telegram/telegram.go Voir le fichier

4
 	"context"
4
 	"context"
5
 	"fmt"
5
 	"fmt"
6
 	"strings"
6
 	"strings"
7
+	"sync"
8
+	"time"
7
 
9
 
8
 	"github.com/9seconds/mtg/v2/essentials"
10
 	"github.com/9seconds/mtg/v2/essentials"
11
+	"github.com/gotd/td/telegram"
9
 )
12
 )
10
 
13
 
11
 type Telegram struct {
14
 type Telegram struct {
12
-	dialer   Dialer
13
-	preferIP preferIP
14
-	pool     addressPool
15
+	ctx       context.Context
16
+	ctxCancel context.CancelFunc
17
+	lock      sync.RWMutex
18
+
19
+	dialer    Dialer
20
+	preferIP  preferIP
21
+	addresses dcAddresses
22
+	rpc       rpcClient
15
 }
23
 }
16
 
24
 
17
-func (t Telegram) Dial(ctx context.Context, dc int) (essentials.Conn, error) {
25
+func (t *Telegram) Dial(ctx context.Context, dc int) (essentials.Conn, error) {
18
 	var addresses []tgAddr
26
 	var addresses []tgAddr
19
 
27
 
28
+	t.lock.RLock()
20
 	switch t.preferIP {
29
 	switch t.preferIP {
21
 	case preferIPOnlyIPv4:
30
 	case preferIPOnlyIPv4:
22
-		addresses = t.pool.getV4(dc)
31
+		addresses = t.addresses.getV4(dc)
23
 	case preferIPOnlyIPv6:
32
 	case preferIPOnlyIPv6:
24
-		addresses = t.pool.getV6(dc)
33
+		addresses = t.addresses.getV6(dc)
25
 	case preferIPPreferIPv4:
34
 	case preferIPPreferIPv4:
26
-		addresses = append(t.pool.getV4(dc), t.pool.getV6(dc)...)
35
+		addresses = append(t.addresses.getV4(dc), t.addresses.getV6(dc)...)
27
 	case preferIPPreferIPv6:
36
 	case preferIPPreferIPv6:
28
-		addresses = append(t.pool.getV6(dc), t.pool.getV4(dc)...)
37
+		addresses = append(t.addresses.getV6(dc), t.addresses.getV4(dc)...)
29
 	}
38
 	}
39
+	t.lock.RUnlock()
30
 
40
 
31
 	var conn essentials.Conn
41
 	var conn essentials.Conn
32
 
42
 
42
 	return nil, fmt.Errorf("cannot dial to %d dc: %w", dc, err)
52
 	return nil, fmt.Errorf("cannot dial to %d dc: %w", dc, err)
43
 }
53
 }
44
 
54
 
45
-func (t Telegram) IsKnownDC(dc int) bool {
46
-	return t.pool.isValidDC(dc)
55
+func (t *Telegram) IsKnownDC(dc int) bool {
56
+	return t.addresses.isValidDC(dc)
57
+}
58
+
59
+func (t *Telegram) GetFallbackDC() int {
60
+	return defaultDC
61
+}
62
+
63
+func (t *Telegram) Shutdown() {
64
+	t.ctxCancel()
65
+}
66
+
67
+func (t *Telegram) Run(logger loggerInterface, updateEach time.Duration) {
68
+	if updateEach == 0 {
69
+		updateEach = defaultUpdateDCAddressesEach
70
+	}
71
+
72
+	t.update(logger)
73
+
74
+	ticker := time.NewTicker(updateEach)
75
+	defer func() {
76
+		ticker.Stop()
77
+
78
+		select {
79
+		case <-ticker.C:
80
+		default:
81
+		}
82
+	}()
83
+
84
+	for {
85
+		select {
86
+		case <-t.ctx.Done():
87
+			return
88
+		case <-ticker.C:
89
+			t.update(logger)
90
+		}
91
+	}
47
 }
92
 }
48
 
93
 
49
-func (t Telegram) GetFallbackDC() int {
50
-	return t.pool.getRandomDC()
94
+func (t *Telegram) update(logger loggerInterface) {
95
+	otherAddresses, err := t.rpc.getDCAddresses(logger, t.ctx)
96
+	if err != nil {
97
+		logger.WarningError("Cannot update DC list", err)
98
+		return
99
+	}
100
+
101
+	t.lock.Lock()
102
+	t.addresses = otherAddresses
103
+	t.lock.Unlock()
104
+
105
+	logger.Info(fmt.Sprintf("DC are updated: %v", t.addresses))
51
 }
106
 }
52
 
107
 
53
-func New(dialer Dialer, ipPreference string, useTestDCs bool) (*Telegram, error) {
108
+func New(dialer Dialer, ipPreference string) (*Telegram, error) {
54
 	var pref preferIP
109
 	var pref preferIP
55
 
110
 
56
 	switch strings.ToLower(ipPreference) {
111
 	switch strings.ToLower(ipPreference) {
66
 		return nil, fmt.Errorf("unknown ip preference %s", ipPreference)
121
 		return nil, fmt.Errorf("unknown ip preference %s", ipPreference)
67
 	}
122
 	}
68
 
123
 
69
-	pool := addressPool{
70
-		v4: productionV4Addresses,
71
-		v6: productionV6Addresses,
72
-	}
73
-	if useTestDCs {
74
-		pool.v4 = testV4Addresses
75
-		pool.v6 = testV6Addresses
76
-	}
124
+	ctx, cancel := context.WithCancel(context.Background())
77
 
125
 
78
 	return &Telegram{
126
 	return &Telegram{
79
-		dialer:   dialer,
80
-		preferIP: pref,
81
-		pool:     pool,
127
+		ctx:       ctx,
128
+		ctxCancel: cancel,
129
+		dialer:    dialer,
130
+		preferIP:  pref,
131
+		addresses: dcAddresses{
132
+			v4: defaultV4Addresses,
133
+			v6: defaultV6Addresses,
134
+		},
135
+		rpc: rpcClient{
136
+			Client: telegram.NewClient(defaultAppID, defaultAppHash, telegram.Options{}),
137
+		},
82
 	}, nil
138
 	}, nil
83
 }
139
 }

+ 4
- 1
mtglib/proxy.go Voir le fichier

144
 	p.ctxCancel()
144
 	p.ctxCancel()
145
 	p.streamWaitGroup.Wait()
145
 	p.streamWaitGroup.Wait()
146
 	p.workerPool.Release()
146
 	p.workerPool.Release()
147
+	p.telegram.Shutdown()
147
 
148
 
148
 	p.allowlist.Shutdown()
149
 	p.allowlist.Shutdown()
149
 	p.blocklist.Shutdown()
150
 	p.blocklist.Shutdown()
292
 		return nil, fmt.Errorf("invalid settings: %w", err)
293
 		return nil, fmt.Errorf("invalid settings: %w", err)
293
 	}
294
 	}
294
 
295
 
295
-	tg, err := telegram.New(opts.Network, opts.getPreferIP(), opts.UseTestDCs)
296
+	tg, err := telegram.New(opts.Network, opts.getPreferIP())
296
 	if err != nil {
297
 	if err != nil {
297
 		return nil, fmt.Errorf("cannot build telegram dialer: %w", err)
298
 		return nil, fmt.Errorf("cannot build telegram dialer: %w", err)
298
 	}
299
 	}
314
 		telegram:                 tg,
315
 		telegram:                 tg,
315
 	}
316
 	}
316
 
317
 
318
+	go tg.Run(proxy.logger.Named("telegram"), 0)
319
+
317
 	pool, err := ants.NewPoolWithFunc(opts.getConcurrency(),
320
 	pool, err := ants.NewPoolWithFunc(opts.getConcurrency(),
318
 		func(arg interface{}) {
321
 		func(arg interface{}) {
319
 			proxy.ServeConn(arg.(essentials.Conn)) //nolint: forcetypeassert
322
 			proxy.ServeConn(arg.(essentials.Conn)) //nolint: forcetypeassert

+ 2
- 0
mtglib/proxy_opts.go Voir le fichier

110
 	// Telegram-related projects.
110
 	// Telegram-related projects.
111
 	//
111
 	//
112
 	// This is an optional setting.
112
 	// This is an optional setting.
113
+	//
114
+	// OBSOLETE and DEPRECATED. Ignored.
113
 	UseTestDCs bool
115
 	UseTestDCs bool
114
 }
116
 }
115
 
117
 

Chargement…
Annuler
Enregistrer