@@ -731,8 +731,31 @@ 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 >()
734+ }
735+ }
736+
737+ val hasDomainCriteria = ! domainList.isNullOrEmpty()
738+ val hasIpCriteria =
739+ rule.ip.isNotBlank() || rulesetTags.any { it.second }
740+ val hasDomainRuleset = rulesetTags.any { ! it.second }
741+ val isAppOnlyDns =
742+ uidList.isNotEmpty() &&
743+ ! hasDomainCriteria &&
744+ ! hasIpCriteria &&
745+ ! hasDomainRuleset &&
746+ rule.port.isBlank() &&
747+ rule.sourcePort.isBlank() &&
748+ rule.network.isBlank() &&
749+ rule.source.isBlank() &&
750+ rule.protocol.isBlank()
751+ val shouldAddDnsRule = hasDomainCriteria || isAppOnlyDns
752+
753+ when (rule.outbound) {
754+ - 1L -> {
755+ if (shouldAddDnsRule) {
756+ userDNSRuleList + = makeDnsRuleObj().apply { server = " dns-direct" }
757+ }
758+
736759 if (rule_set != null && rulesetTags.isNotEmpty()) {
737760 for (tag in rule_set) {
738761 val tagInfo = rulesetTags.find { it.first == tag }
@@ -752,21 +775,59 @@ fun buildConfig(
752775 userDNSRuleList + = makeDnsRuleObj().apply { server = " dns-direct" }
753776 }
754777
755- - 2L -> {
756- userDNSRuleList + = makeDnsRuleObj().apply {
757- server = " dns-block"
758- disable_cache = true
778+ 0L -> {
779+ if (shouldAddDnsRule) {
780+ if (useFakeDns) userDNSRuleList + = makeDnsRuleObj().apply {
781+ server = " dns-fake"
782+ inbound = listOf (" tun-in" )
783+ query_type = listOf (" A" , " AAAA" )
784+ } else {
785+ userDNSRuleList + = makeDnsRuleObj().apply {
786+ server = " dns-remote"
787+ }
788+ }
789+ }
790+
791+ if (rule_set != null && rulesetTags.isNotEmpty()) {
792+ for (tag in rule_set) {
793+ val tagInfo = rulesetTags.find { it.first == tag }
794+ if (tag.startsWith(" ruleset-" ) && tagInfo != null && ! tagInfo.second) {
795+ if (useFakeDns) {
796+ userDNSRuleList + = DNSRule_DefaultOptions ().apply {
797+ rule_set = mutableListOf (tag)
798+ server = " dns-fake"
799+ inbound = listOf (" tun-in" )
800+ query_type = listOf (" A" , " AAAA" )
801+ }
802+ } else {
803+ userDNSRuleList + = DNSRule_DefaultOptions ().apply {
804+ rule_set = mutableListOf (tag)
805+ server = " dns-remote"
806+ }
807+ }
808+ }
809+ }
759810 }
760811 }
761812
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 {
813+ - 2L -> {
814+ if (shouldAddDnsRule) {
768815 userDNSRuleList + = makeDnsRuleObj().apply {
769- server = " dns-remote"
816+ server = " dns-block"
817+ disable_cache = true
818+ }
819+ }
820+
821+ if (rule_set != null && rulesetTags.isNotEmpty()) {
822+ for (tag in rule_set) {
823+ val tagInfo = rulesetTags.find { it.first == tag }
824+ if (tag.startsWith(" ruleset-" ) && tagInfo != null && ! tagInfo.second) {
825+ userDNSRuleList + = DNSRule_DefaultOptions ().apply {
826+ rule_set = mutableListOf (tag)
827+ server = " dns-block"
828+ disable_cache = true
829+ }
830+ }
770831 }
771832 }
772833 }
0 commit comments