From 094d948f773958e3948f87cd69dad749644820c7 Mon Sep 17 00:00:00 2001 From: sabraman Date: Mon, 23 Mar 2026 00:56:32 +0300 Subject: [PATCH] skip getProxyConfigV6 when ipv6 is disabled --- src/maestro/me_startup.rs | 87 ++++++++++++++------ src/transport/middle_proxy/config_updater.rs | 42 +++++----- 2 files changed, 82 insertions(+), 47 deletions(-) diff --git a/src/maestro/me_startup.rs b/src/maestro/me_startup.rs index 022f8ae..c3d55e3 100644 --- a/src/maestro/me_startup.rs +++ b/src/maestro/me_startup.rs @@ -146,39 +146,70 @@ pub(crate) async fn initialize_me_pool( ) .await; } - startup_tracker - .start_component( - COMPONENT_ME_PROXY_CONFIG_V6, - Some("load startup proxy-config v6".to_string()), + let ipv6_enabled = config.network.ipv6 != Some(false); + let cfg_v6 = if ipv6_enabled { + startup_tracker + .start_component( + COMPONENT_ME_PROXY_CONFIG_V6, + Some("load startup proxy-config v6".to_string()), + ) + .await; + startup_tracker + .set_me_status(StartupMeStatus::Initializing, COMPONENT_ME_PROXY_CONFIG_V6) + .await; + let cfg_v6 = load_startup_proxy_config_snapshot( + "https://core.telegram.org/getProxyConfigV6", + config.general.proxy_config_v6_cache_path.as_deref(), + me2dc_fallback, + "getProxyConfigV6", ) .await; - startup_tracker - .set_me_status(StartupMeStatus::Initializing, COMPONENT_ME_PROXY_CONFIG_V6) - .await; - let cfg_v6 = load_startup_proxy_config_snapshot( - "https://core.telegram.org/getProxyConfigV6", - config.general.proxy_config_v6_cache_path.as_deref(), - me2dc_fallback, - "getProxyConfigV6", - ) - .await; - if cfg_v6.is_some() { - startup_tracker - .complete_component( - COMPONENT_ME_PROXY_CONFIG_V6, - Some("proxy-config v6 loaded".to_string()), - ) - .await; + if cfg_v6.is_some() { + startup_tracker + .complete_component( + COMPONENT_ME_PROXY_CONFIG_V6, + Some("proxy-config v6 loaded".to_string()), + ) + .await; + } else { + startup_tracker + .fail_component( + COMPONENT_ME_PROXY_CONFIG_V6, + Some("proxy-config v6 unavailable".to_string()), + ) + .await; + } + cfg_v6 } else { startup_tracker - .fail_component( + .skip_component( COMPONENT_ME_PROXY_CONFIG_V6, - Some("proxy-config v6 unavailable".to_string()), + Some("IPv6 is disabled in config".to_string()), ) .await; - } + None + }; + + if let Some(cfg_v4) = cfg_v4 { + if ipv6_enabled && cfg_v6.is_none() { + startup_tracker + .skip_component( + COMPONENT_ME_POOL_CONSTRUCT, + Some("ME configs are incomplete".to_string()), + ) + .await; + startup_tracker + .fail_component( + COMPONENT_ME_POOL_INIT_STAGE1, + Some("ME configs are incomplete".to_string()), + ) + .await; + startup_tracker + .set_me_status(StartupMeStatus::Failed, "failed") + .await; + return None; + } - if let (Some(cfg_v4), Some(cfg_v6)) = (cfg_v4, cfg_v6) { startup_tracker .start_component( COMPONENT_ME_POOL_CONSTRUCT, @@ -200,8 +231,10 @@ pub(crate) async fn initialize_me_pool( config.timeouts.me_one_retry, config.timeouts.me_one_timeout_ms, cfg_v4.map.clone(), - cfg_v6.map.clone(), - cfg_v4.default_dc.or(cfg_v6.default_dc), + cfg_v6.as_ref().map(|cfg| cfg.map.clone()).unwrap_or_default(), + cfg_v4 + .default_dc + .or(cfg_v6.as_ref().and_then(|cfg| cfg.default_dc)), decision.clone(), Some(upstream_manager.clone()), rng.clone(), diff --git a/src/transport/middle_proxy/config_updater.rs b/src/transport/middle_proxy/config_updater.rs index 8e5a701..ed9927b 100644 --- a/src/transport/middle_proxy/config_updater.rs +++ b/src/transport/middle_proxy/config_updater.rs @@ -378,26 +378,28 @@ async fn run_update_cycle( } let mut ready_v6: Option<(ProxyConfigData, u64)> = None; - let cfg_v6 = retry_fetch("https://core.telegram.org/getProxyConfigV6").await; - if let Some(cfg_v6) = cfg_v6 - && snapshot_passes_guards(cfg, &cfg_v6, "getProxyConfigV6") - { - let cfg_v6_hash = hash_proxy_config(&cfg_v6); - let stable_hits = state.config_v6.observe(cfg_v6_hash); - if stable_hits < required_cfg_snapshots { - debug!( - stable_hits, - required_cfg_snapshots, - snapshot = format_args!("0x{cfg_v6_hash:016x}"), - "ME config v6 candidate observed" - ); - } else if state.config_v6.is_applied(cfg_v6_hash) { - debug!( - snapshot = format_args!("0x{cfg_v6_hash:016x}"), - "ME config v6 stable snapshot already applied" - ); - } else { - ready_v6 = Some((cfg_v6, cfg_v6_hash)); + if cfg.network.ipv6 != Some(false) { + let cfg_v6 = retry_fetch("https://core.telegram.org/getProxyConfigV6").await; + if let Some(cfg_v6) = cfg_v6 + && snapshot_passes_guards(cfg, &cfg_v6, "getProxyConfigV6") + { + let cfg_v6_hash = hash_proxy_config(&cfg_v6); + let stable_hits = state.config_v6.observe(cfg_v6_hash); + if stable_hits < required_cfg_snapshots { + debug!( + stable_hits, + required_cfg_snapshots, + snapshot = format_args!("0x{cfg_v6_hash:016x}"), + "ME config v6 candidate observed" + ); + } else if state.config_v6.is_applied(cfg_v6_hash) { + debug!( + snapshot = format_args!("0x{cfg_v6_hash:016x}"), + "ME config v6 stable snapshot already applied" + ); + } else { + ready_v6 = Some((cfg_v6, cfg_v6_hash)); + } } }