From 308e372a5d0fa23c74f0e12fa5840d8f41883595 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Mon, 16 Feb 2026 15:05:59 +0100 Subject: [PATCH] Propagate DcUpdateEach setting --- internal/cli/run_proxy.go | 1 + internal/cli/simple_run.go | 1 + internal/config/config.go | 5 +++-- internal/config/parse.go | 3 ++- mtglib/init.go | 4 ++++ mtglib/internal/dc/init.go | 5 +---- mtglib/internal/dc/telegram.go | 4 ---- mtglib/proxy.go | 7 ++++++- mtglib/proxy_opts.go | 4 ++++ 9 files changed, 22 insertions(+), 12 deletions(-) diff --git a/internal/cli/run_proxy.go b/internal/cli/run_proxy.go index 5357309..7126022 100644 --- a/internal/cli/run_proxy.go +++ b/internal/cli/run_proxy.go @@ -263,6 +263,7 @@ func runProxy(conf *config.Config, version string) error { //nolint: funlen AllowFallbackOnUnknownDC: conf.AllowFallbackOnUnknownDC.Get(false), TolerateTimeSkewness: conf.TolerateTimeSkewness.Value, DCOverrides: dcOverrides, + DCUpdateEach: conf.DCUpdateEach.Get(0), } proxy, err := mtglib.NewProxy(opts) diff --git a/internal/cli/simple_run.go b/internal/cli/simple_run.go index 02d6dc3..b8112f0 100644 --- a/internal/cli/simple_run.go +++ b/internal/cli/simple_run.go @@ -80,6 +80,7 @@ func (s *SimpleRun) Run(cli *CLI, version string) error { //nolint: cyclop,funle conf.Debug.Value = s.Debug conf.AllowFallbackOnUnknownDC.Value = true conf.Defense.AntiReplay.Enabled.Value = true + conf.DCUpdateEach.Value = 0 if err := conf.Validate(); err != nil { return fmt.Errorf("invalid result configuration: %w", err) diff --git a/internal/config/config.go b/internal/config/config.go index c330a25..e82adde 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -65,9 +65,10 @@ type Config struct { } `json:"prometheus"` } `json:"stats"` DCOverrides []struct { - DC TypeDC + DC TypeDC `json:"dc"` IPs []TypeHostPort `json:"ips"` - } `json:"dc_overrides"` + } `json:"dcOverrides"` + DCUpdateEach TypeDuration `json:"dcUpdateEach"` } func (c *Config) Validate() error { diff --git a/internal/config/parse.go b/internal/config/parse.go index 8d056f3..f317f65 100644 --- a/internal/config/parse.go +++ b/internal/config/parse.go @@ -62,7 +62,8 @@ type tomlConfig struct { DCOverrides []struct { DC int `toml:"dc" json:"dc"` IPs []string `toml:"ips" json:"ips"` - } + } `toml:"dc-overrides" json:"dcOverrides,omitempty"` + DCUpdateEach string `toml:"dc-update-each" json:"dcUpdateEach,omitempty"` } func Parse(rawData []byte) (*Config, error) { diff --git a/mtglib/init.go b/mtglib/init.go index 40e3f41..d354c69 100644 --- a/mtglib/init.go +++ b/mtglib/init.go @@ -99,6 +99,10 @@ const ( // reads from Telegram after which connection will be terminated. This is // required to abort stale connections. TCPRelayReadTimeout = 20 * time.Second + + // DefaultDCUpdateEach defines a time period that is used to fetch + // a relevant list of DCs to use from Telegram using its own MTPROTO API. + DefaultDCUpdateEach = time.Hour ) // Network defines a knowledge how to work with a network. It may sound fun but diff --git a/mtglib/internal/dc/init.go b/mtglib/internal/dc/init.go index 3ae0eba..894faa7 100644 --- a/mtglib/internal/dc/init.go +++ b/mtglib/internal/dc/init.go @@ -1,7 +1,5 @@ package dc -import "time" - type preferIP uint8 const ( @@ -12,8 +10,7 @@ const ( ) const ( - DefaultDC = 2 - DefaultUpdateDCAddressesEach = time.Hour + DefaultDC = 2 defaultAppID = 123456 defaultAppHash = "" diff --git a/mtglib/internal/dc/telegram.go b/mtglib/internal/dc/telegram.go index dc50420..0032f54 100644 --- a/mtglib/internal/dc/telegram.go +++ b/mtglib/internal/dc/telegram.go @@ -37,10 +37,6 @@ func (t *Telegram) GetAddresses(dc int) []Addr { } func (t *Telegram) Run(ctx context.Context, updateEach time.Duration) { - if updateEach == 0 { - updateEach = DefaultUpdateDCAddressesEach - } - t.update(ctx) ticker := time.NewTicker(updateEach) diff --git a/mtglib/proxy.go b/mtglib/proxy.go index c037a39..b30d50d 100644 --- a/mtglib/proxy.go +++ b/mtglib/proxy.go @@ -324,7 +324,12 @@ func NewProxy(opts ProxyOpts) (*Proxy, error) { telegram: tg, } - go tg.Run(ctx, 0) // TODO: propagate value + dcUpdateEach := opts.DCUpdateEach + if dcUpdateEach == 0 { + dcUpdateEach = DefaultDCUpdateEach + } + + go tg.Run(ctx, dcUpdateEach) pool, err := ants.NewPoolWithFunc(opts.getConcurrency(), func(arg interface{}) { diff --git a/mtglib/proxy_opts.go b/mtglib/proxy_opts.go index 53f3434..f78a2f5 100644 --- a/mtglib/proxy_opts.go +++ b/mtglib/proxy_opts.go @@ -119,6 +119,10 @@ type ProxyOpts struct { // // This is an optional setting DCOverrides map[int][]string + + // DCUpdateEach defines a time duration that is used to fetch a list of + // DCs to use from the Telegram. + DCUpdateEach time.Duration } func (p ProxyOpts) valid() error {