From 1f7609cc2219bf44d76dec1315a3b962bbba418c Mon Sep 17 00:00:00 2001 From: DHR60 Date: Sat, 31 Jan 2026 11:44:11 +0800 Subject: [PATCH] Fix --- v2rayN/ServiceLib/Common/Utils.cs | 12 ++++++++++++ v2rayN/ServiceLib/Global.cs | 7 ------- .../Services/CoreConfig/Singbox/SingboxDnsService.cs | 8 ++++---- .../CoreConfig/Singbox/SingboxRoutingService.cs | 2 +- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/v2rayN/ServiceLib/Common/Utils.cs b/v2rayN/ServiceLib/Common/Utils.cs index 0f4feda5..22d10304 100644 --- a/v2rayN/ServiceLib/Common/Utils.cs +++ b/v2rayN/ServiceLib/Common/Utils.cs @@ -462,6 +462,18 @@ public class Utils return (domain, port); } + public static string? DomainStrategy4Sbox(string? strategy) + { + return strategy switch + { + not null when strategy.StartsWith("UseIPv4") => "prefer_ipv4", + not null when strategy.StartsWith("UseIPv6") => "prefer_ipv6", + not null when strategy.StartsWith("ForceIPv4") => "ipv4_only", + not null when strategy.StartsWith("ForceIPv6") => "ipv6_only", + _ => null + }; + } + #endregion Conversion Functions #region Data Checks diff --git a/v2rayN/ServiceLib/Global.cs b/v2rayN/ServiceLib/Global.cs index 96fa0a9e..a902bbdd 100644 --- a/v2rayN/ServiceLib/Global.cs +++ b/v2rayN/ServiceLib/Global.cs @@ -388,13 +388,6 @@ public class Global "" ]; - public static readonly Dictionary DomainStrategy4SboxMap = - DomainStrategy - .Where(s => s.StartsWith("UseIPv4", StringComparison.Ordinal) || s.StartsWith("UseIPv6", StringComparison.Ordinal)) - .ToDictionary( - key => key, - key => key.StartsWith("UseIPv4", StringComparison.Ordinal) ? "prefer_ipv4" : "prefer_ipv6"); - public static readonly List DomainDirectDNSAddress = [ "https://dns.alidns.com/dns-query", diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs index f9c00caa..6079b2fb 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxDnsService.cs @@ -180,13 +180,13 @@ public partial class CoreConfigSingboxService new Rule4Sbox { server = Global.SingboxRemoteDNSTag, - strategy = Global.DomainStrategy4SboxMap.GetValueOrDefault(simpleDNSItem.Strategy4Proxy), + strategy = Utils.DomainStrategy4Sbox(simpleDNSItem.Strategy4Proxy), clash_mode = ERuleMode.Global.ToString() }, new Rule4Sbox { server = Global.SingboxDirectDNSTag, - strategy = Global.DomainStrategy4SboxMap.GetValueOrDefault(simpleDNSItem.Strategy4Freedom), + strategy = Utils.DomainStrategy4Sbox(simpleDNSItem.Strategy4Freedom), clash_mode = ERuleMode.Direct.ToString() } }); @@ -309,7 +309,7 @@ public partial class CoreConfigSingboxService if (item.OutboundTag == Global.DirectTag) { rule.server = Global.SingboxDirectDNSTag; - rule.strategy = Global.DomainStrategy4SboxMap.GetValueOrDefault(simpleDNSItem.Strategy4Freedom); + rule.strategy = Utils.DomainStrategy4Sbox(simpleDNSItem.Strategy4Freedom); if (expectedIPsRegions.Count > 0 && rule.geosite?.Count > 0) { @@ -343,7 +343,7 @@ public partial class CoreConfigSingboxService singboxConfig.dns.rules.Add(rule4Fake); } rule.server = Global.SingboxRemoteDNSTag; - rule.strategy = Global.DomainStrategy4SboxMap.GetValueOrDefault(simpleDNSItem.Strategy4Proxy); + rule.strategy = Utils.DomainStrategy4Sbox(simpleDNSItem.Strategy4Proxy); } singboxConfig.dns.rules.Add(rule); diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs index 68d04a7e..9424df78 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs @@ -10,7 +10,7 @@ public partial class CoreConfigSingboxService var simpleDnsItem = _config.SimpleDNSItem; var defaultDomainResolverTag = Global.SingboxDirectDNSTag; - var directDnsStrategy = Global.DomainStrategy4SboxMap.GetValueOrDefault(simpleDnsItem.Strategy4Freedom); + var directDnsStrategy = Utils.DomainStrategy4Sbox(simpleDnsItem.Strategy4Freedom); var rawDNSItem = await AppManager.Instance.GetDNSItem(ECoreType.sing_box); if (rawDNSItem is { Enabled: true })