diff --git a/db/ConfigBuilder.cpp b/db/ConfigBuilder.cpp index 496d973..584f88c 100644 --- a/db/ConfigBuilder.cpp +++ b/db/ConfigBuilder.cpp @@ -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"}, }; diff --git a/db/RouteEntity.cpp b/db/RouteEntity.cpp index 07113b8..c26c3d3 100644 --- a/db/RouteEntity.cpp +++ b/db/RouteEntity.cpp @@ -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); } } } diff --git a/db/RouteEntity.h b/db/RouteEntity.h index 0f8bced..f20e0c7 100644 --- a/db/RouteEntity.h +++ b/db/RouteEntity.h @@ -77,6 +77,6 @@ namespace NekoGui { std::shared_ptr get_used_rule_sets(); - QStringList get_direct_site_rule_sets(); + QStringList get_direct_sites(); }; } // namespace NekoGui \ No newline at end of file