Skip to content

Commit 125b33c

Browse files
committed
feat: Optimize rule set processing logic and simplify DNS rule generation.
1 parent 370aa7e commit 125b33c

1 file changed

Lines changed: 36 additions & 71 deletions

File tree

app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt

Lines changed: 36 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -731,81 +731,46 @@ fun buildConfig(
731731
return DNSRule_DefaultOptions().apply {
732732
if (uidList.isNotEmpty()) user_id = uidList
733733
domainList?.let { makeSingBoxRule(it) }
734+
735+
val nonIpRulesets = mutableListOf<String>()
736+
if (rule_set != null && rulesetTags.isNotEmpty()) {
737+
for (tag in rule_set) {
738+
val tagInfo = rulesetTags.find { it.first == tag }
739+
if (tag.startsWith("ruleset-") && tagInfo != null && !tagInfo.second) {
740+
nonIpRulesets.add(tag)
741+
}
742+
}
743+
}
744+
if (nonIpRulesets.isNotEmpty()) {
745+
rule_set = nonIpRulesets
746+
}
734747
}
735748
}
736749

737-
when (rule.outbound) {
738-
-1L -> {
739-
userDNSRuleList += makeDnsRuleObj().apply { server = "dns-direct" }
740-
741-
if (rule_set != null && rulesetTags.isNotEmpty()) {
742-
for (tag in rule_set) {
743-
// 只处理ruleset标签,且必须是非IP类型
744-
val tagInfo = rulesetTags.find { it.first == tag }
745-
if (tag.startsWith("ruleset-") && tagInfo != null && !tagInfo.second) {
746-
userDNSRuleList += DNSRule_DefaultOptions().apply {
747-
rule_set = mutableListOf(tag)
748-
server = "dns-direct"
749-
}
750-
}
751-
}
752-
}
753-
}
754-
755-
-2L -> {
756-
userDNSRuleList += makeDnsRuleObj().apply {
757-
server = "dns-block"
758-
disable_cache = true
759-
}
760-
761-
if (rule_set != null && rulesetTags.isNotEmpty()) {
762-
for (tag in rule_set) {
763-
val tagInfo = rulesetTags.find { it.first == tag }
764-
if (tag.startsWith("ruleset-") && tagInfo != null && !tagInfo.second) {
765-
userDNSRuleList += DNSRule_DefaultOptions().apply {
766-
rule_set = mutableListOf(tag)
767-
server = "dns-block"
768-
disable_cache = true
769-
}
770-
}
771-
}
772-
}
773-
}
774-
775-
else -> {
776-
if (useFakeDns) userDNSRuleList += makeDnsRuleObj().apply {
777-
server = "dns-fake"
778-
inbound = listOf("tun-in")
779-
query_type = listOf("A", "AAAA")
780-
} else {
781-
userDNSRuleList += makeDnsRuleObj().apply {
782-
server = "dns-remote"
783-
}
784-
}
785-
786-
if (rule_set != null && rulesetTags.isNotEmpty()) {
787-
for (tag in rule_set) {
788-
val tagInfo = rulesetTags.find { it.first == tag }
789-
if (tag.startsWith("ruleset-") && tagInfo != null && !tagInfo.second) {
790-
if (useFakeDns) {
791-
userDNSRuleList += DNSRule_DefaultOptions().apply {
792-
rule_set = mutableListOf(tag)
793-
server = "dns-fake"
794-
inbound = listOf("tun-in")
795-
query_type = listOf("A", "AAAA")
796-
}
797-
} else {
798-
userDNSRuleList += DNSRule_DefaultOptions().apply {
799-
rule_set = mutableListOf(tag)
800-
server = "dns-remote"
801-
}
802-
}
803-
}
804-
}
805-
}
806-
}
807-
}
750+
when (rule.outbound) {
751+
-1L -> {
752+
userDNSRuleList += makeDnsRuleObj().apply { server = "dns-direct" }
753+
}
754+
755+
-2L -> {
756+
userDNSRuleList += makeDnsRuleObj().apply {
757+
server = "dns-block"
758+
disable_cache = true
759+
}
760+
}
808761

762+
else -> {
763+
if (useFakeDns) userDNSRuleList += makeDnsRuleObj().apply {
764+
server = "dns-fake"
765+
inbound = listOf("tun-in")
766+
query_type = listOf("A", "AAAA")
767+
} else {
768+
userDNSRuleList += makeDnsRuleObj().apply {
769+
server = "dns-remote"
770+
}
771+
}
772+
}
773+
}
809774
outbound = when (val outId = rule.outbound) {
810775
0L -> mainProxyTag
811776
-1L -> TAG_BYPASS

0 commit comments

Comments
 (0)