mirror of
https://github.com/Mahdi-zarei/nekoray.git
synced 2025-12-19 05:30:06 +08:00
feat: Also direct all other domain-based rule conditions
This commit is contained in:
parent
8a41dd31ae
commit
2c5d35c4bb
@ -570,24 +570,40 @@ namespace NekoGui {
|
||||
|
||||
// Direct dns domains
|
||||
QJsonArray directDnsDomains;
|
||||
QJsonArray directDnsRuleSets;
|
||||
QJsonArray directDnsSuffixes;
|
||||
QJsonArray directDnsKeywords;
|
||||
QJsonArray directDnsRegexes;
|
||||
|
||||
// server addresses
|
||||
for (const auto &item: status->domainListDNSDirect) {
|
||||
directDnsDomains.append(item);
|
||||
}
|
||||
if (!directDnsDomains.isEmpty()) {
|
||||
dnsRules += QJsonObject{
|
||||
{"domain", directDnsDomains},
|
||||
{"server", "dns-direct"},
|
||||
};
|
||||
}
|
||||
|
||||
// Direct domains in rules
|
||||
QJsonArray directDnsRuleSets;
|
||||
auto sets = routeChain->get_direct_site_rule_sets();
|
||||
auto sets = routeChain->get_direct_sites();
|
||||
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{
|
||||
{"rule_set", directDnsRuleSets},
|
||||
{"domain", directDnsDomains},
|
||||
{"domain_suffix", directDnsSuffixes},
|
||||
{"domain_keyword", directDnsKeywords},
|
||||
{"domain_regex", directDnsRegexes},
|
||||
{"server", "dns-direct"},
|
||||
};
|
||||
|
||||
|
||||
@ -473,12 +473,24 @@ namespace NekoGui {
|
||||
return res;
|
||||
}
|
||||
|
||||
QStringList RoutingChain::get_direct_site_rule_sets() {
|
||||
QStringList RoutingChain::get_direct_sites() {
|
||||
auto res = QStringList();
|
||||
for (const auto& item: Rules) {
|
||||
if (item->outboundID == -2) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,6 +77,6 @@ namespace NekoGui {
|
||||
|
||||
std::shared_ptr<QStringList> get_used_rule_sets();
|
||||
|
||||
QStringList get_direct_site_rule_sets();
|
||||
QStringList get_direct_sites();
|
||||
};
|
||||
} // namespace NekoGui
|
||||
Loading…
Reference in New Issue
Block a user