feat: Also direct all other domain-based rule conditions

This commit is contained in:
unknown 2024-07-05 11:20:29 +03:30
parent 8a41dd31ae
commit 2c5d35c4bb
No known key found for this signature in database
GPG Key ID: C2CA486E4F771093
3 changed files with 41 additions and 13 deletions

View File

@ -570,24 +570,40 @@ namespace NekoGui {
// Direct dns domains // Direct dns domains
QJsonArray directDnsDomains; QJsonArray directDnsDomains;
QJsonArray directDnsRuleSets;
QJsonArray directDnsSuffixes;
QJsonArray directDnsKeywords;
QJsonArray directDnsRegexes;
// server addresses
for (const auto &item: status->domainListDNSDirect) { for (const auto &item: status->domainListDNSDirect) {
directDnsDomains.append(item); directDnsDomains.append(item);
} }
if (!directDnsDomains.isEmpty()) {
dnsRules += QJsonObject{
{"domain", directDnsDomains},
{"server", "dns-direct"},
};
}
// Direct domains in rules auto sets = routeChain->get_direct_sites();
QJsonArray directDnsRuleSets;
auto sets = routeChain->get_direct_site_rule_sets();
for (const auto &item: sets) { for (const auto &item: sets) {
directDnsRuleSets << item; if (item.startsWith("ruleset:")) {
directDnsRuleSets << item.mid(8);
}
if (item.startsWith("domain:")) {
directDnsDomains << item.mid(7);
}
if (item.startsWith("suffix:")) {
directDnsSuffixes << item.mid(7);
}
if (item.startsWith("keyword:")) {
directDnsKeywords << item.mid(8);
}
if (item.startsWith("regex:")) {
directDnsRegexes << item.mid(6);
}
} }
dnsRules += QJsonObject{ dnsRules += QJsonObject{
{"rule_set", directDnsRuleSets}, {"rule_set", directDnsRuleSets},
{"domain", directDnsDomains},
{"domain_suffix", directDnsSuffixes},
{"domain_keyword", directDnsKeywords},
{"domain_regex", directDnsRegexes},
{"server", "dns-direct"}, {"server", "dns-direct"},
}; };

View File

@ -473,12 +473,24 @@ namespace NekoGui {
return res; return res;
} }
QStringList RoutingChain::get_direct_site_rule_sets() { QStringList RoutingChain::get_direct_sites() {
auto res = QStringList(); auto res = QStringList();
for (const auto& item: Rules) { for (const auto& item: Rules) {
if (item->outboundID == -2) { if (item->outboundID == -2) {
for (const auto& rset: item->rule_set) { for (const auto& rset: item->rule_set) {
if (rset.endsWith("_SITE")) res << rset; if (rset.endsWith("_SITE")) res << QString("ruleset:" + rset);
}
for (const auto& domain: item->domain) {
res << QString("domain:" + domain);
}
for (const auto& suffix: item->domain_suffix) {
res << QString("suffix:" + suffix);
}
for (const auto& keyword: item->domain_keyword) {
res << QString("keyword:" + keyword);
}
for (const auto& regex: item->domain_regex) {
res << QString("regex:" + regex);
} }
} }
} }

View File

@ -77,6 +77,6 @@ namespace NekoGui {
std::shared_ptr<QStringList> get_used_rule_sets(); std::shared_ptr<QStringList> get_used_rule_sets();
QStringList get_direct_site_rule_sets(); QStringList get_direct_sites();
}; };
} // namespace NekoGui } // namespace NekoGui