1
- using System . Net ;
1
+ using System . Data ;
2
+ using System . Net ;
2
3
using System . Net . NetworkInformation ;
3
4
using v2rayN . Enums ;
4
5
using v2rayN . Models ;
@@ -889,6 +890,10 @@ private int GenExperimental(SingboxConfig singboxConfig)
889
890
890
891
private int ConvertGeo2Ruleset ( SingboxConfig singboxConfig )
891
892
{
893
+ static void AddRuleSets ( List < string > ruleSets , List < string > ? rule_set )
894
+ {
895
+ if ( rule_set != null ) ruleSets . AddRange ( rule_set ) ;
896
+ }
892
897
var geosite = "geosite" ;
893
898
var geoip = "geoip" ;
894
899
var ruleSets = new List < string > ( ) ;
@@ -898,13 +903,13 @@ private int ConvertGeo2Ruleset(SingboxConfig singboxConfig)
898
903
{
899
904
rule . rule_set = rule ? . geosite ? . Select ( t => $ "{ geosite } -{ t } ") . ToList ( ) ;
900
905
rule . geosite = null ;
901
- ruleSets . AddRange ( rule . rule_set ) ;
906
+ AddRuleSets ( ruleSets , rule . rule_set ) ;
902
907
}
903
908
foreach ( var rule in singboxConfig . route . rules . Where ( t => t . geoip ? . Count > 0 ) . ToList ( ) ?? [ ] )
904
909
{
905
910
rule . rule_set = rule ? . geoip ? . Select ( t => $ "{ geoip } -{ t } ") . ToList ( ) ;
906
911
rule . geoip = null ;
907
- ruleSets . AddRange ( rule . rule_set ) ;
912
+ AddRuleSets ( ruleSets , rule . rule_set ) ;
908
913
}
909
914
910
915
//convert dns geosite & geoip to ruleset
@@ -920,7 +925,15 @@ private int ConvertGeo2Ruleset(SingboxConfig singboxConfig)
920
925
}
921
926
foreach ( var dnsRule in singboxConfig . dns ? . rules . Where ( t => t . rule_set ? . Count > 0 ) . ToList ( ) ?? [ ] )
922
927
{
923
- ruleSets . AddRange ( dnsRule . rule_set ) ;
928
+ AddRuleSets ( ruleSets , dnsRule . rule_set ) ;
929
+ }
930
+ //rules in rules
931
+ foreach ( var item in singboxConfig . dns ? . rules . Where ( t => t . rules ? . Count > 0 ) . Select ( t => t . rules ) . ToList ( ) ?? [ ] )
932
+ {
933
+ foreach ( var item2 in item ?? [ ] )
934
+ {
935
+ AddRuleSets ( ruleSets , item2 . rule_set ) ;
936
+ }
924
937
}
925
938
926
939
//load custom ruleset file
@@ -946,6 +959,7 @@ private int ConvertGeo2Ruleset(SingboxConfig singboxConfig)
946
959
singboxConfig . route . rule_set = [ ] ;
947
960
foreach ( var item in new HashSet < string > ( ruleSets ) )
948
961
{
962
+ if ( Utils . IsNullOrEmpty ( item ) ) { continue ; }
949
963
var customRuleset = customRulesets . FirstOrDefault ( t => t . tag != null && t . tag . Equals ( item ) ) ;
950
964
if ( customRuleset != null )
951
965
{
0 commit comments