From 54c525fbf24e5f8898fc2aad33f3dd9db9d08822 Mon Sep 17 00:00:00 2001 From: DHR60 Date: Wed, 4 Mar 2026 17:44:29 +0800 Subject: [PATCH] Fix hosts resolve rule --- .../Singbox/SingboxRoutingService.cs | 53 +++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs index 4b87b6d2..281a44e2 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxRoutingService.cs @@ -84,11 +84,58 @@ public partial class CoreConfigSingboxService } if (hostsDomains.Count > 0) { - _coreConfig.route.rules.Add(new() + var hostsResolveRule = new Rule4Sbox { action = "resolve", - domain = hostsDomains, - }); + }; + var hostsCounter = 0; + foreach (var host in hostsDomains) + { + var domainRule = new Rule4Sbox(); + if (!ParseV2Domain(host, domainRule)) + { + continue; + } + if (domainRule.domain_keyword?.Count > 0 && !host.StartsWith("keyword:")) + { + domainRule.domain = domainRule.domain_keyword; + domainRule.domain_keyword = null; + } + if (domainRule.domain?.Count > 0) + { + hostsResolveRule.domain ??= []; + hostsResolveRule.domain.AddRange(domainRule.domain); + hostsCounter++; + } + else if (domainRule.domain_keyword?.Count > 0) + { + hostsResolveRule.domain_keyword ??= []; + hostsResolveRule.domain_keyword.AddRange(domainRule.domain_keyword); + hostsCounter++; + } + else if (domainRule.domain_suffix?.Count > 0) + { + hostsResolveRule.domain_suffix ??= []; + hostsResolveRule.domain_suffix.AddRange(domainRule.domain_suffix); + hostsCounter++; + } + else if (domainRule.domain_regex?.Count > 0) + { + hostsResolveRule.domain_regex ??= []; + hostsResolveRule.domain_regex.AddRange(domainRule.domain_regex); + hostsCounter++; + } + else if (domainRule.geosite?.Count > 0) + { + hostsResolveRule.geosite ??= []; + hostsResolveRule.geosite.AddRange(domainRule.geosite); + hostsCounter++; + } + } + if (hostsCounter > 0) + { + _coreConfig.route.rules.Add(hostsResolveRule); + } } _coreConfig.route.rules.Add(new()