From 24d3bf6176c1fa5abb2785eddfb7f5e8ad1d5272 Mon Sep 17 00:00:00 2001 From: parhelia512 <0011d3@gmail.com> Date: Sun, 20 Jul 2025 20:38:50 +0800 Subject: [PATCH] feat: add bypass russia chain --- include/dataStore/RouteEntity.h | 3 +++ src/dataStore/Database.cpp | 1 + src/dataStore/RouteEntity.cpp | 30 +++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/dataStore/RouteEntity.h b/include/dataStore/RouteEntity.h index b1c8bc7..f087c08 100644 --- a/include/dataStore/RouteEntity.h +++ b/include/dataStore/RouteEntity.h @@ -25,6 +25,7 @@ namespace Configs { enum inputType {trufalse, select, text}; const int IranBypassChainID = 111111111; const int ChinaBypassChainID = 222222222; + const int RussiaBypassChainID = 333333333; enum ruleType {custom, simpleAddress, simpleProcessName, simpleProcessPath}; enum simpleAction{direct, block, proxy}; inline QString simpleActionToString(simpleAction action) @@ -133,6 +134,8 @@ namespace Configs { static std::shared_ptr GetChinaDefaultChain(); + static std::shared_ptr GetRussiaDefaultChain(); + std::shared_ptr> get_used_outbounds(); std::shared_ptr get_used_rule_sets(); diff --git a/src/dataStore/Database.cpp b/src/dataStore/Database.cpp index 62f644a..bd7342c 100644 --- a/src/dataStore/Database.cpp +++ b/src/dataStore/Database.cpp @@ -113,6 +113,7 @@ namespace Configs { routes[IranBypassChainID] = RoutingChain::GetIranDefaultChain(); routes[ChinaBypassChainID] = RoutingChain::GetChinaDefaultChain(); + routes[RussiaBypassChainID] = RoutingChain::GetRussiaDefaultChain(); } void ProfileManager::SaveManager() { diff --git a/src/dataStore/RouteEntity.cpp b/src/dataStore/RouteEntity.cpp index 8746169..75c9b89 100644 --- a/src/dataStore/RouteEntity.cpp +++ b/src/dataStore/RouteEntity.cpp @@ -578,7 +578,8 @@ namespace Configs { bool RoutingChain::isViewOnly() const { return id == IranBypassChainID || - id == ChinaBypassChainID; + id == ChinaBypassChainID || + id == RussiaBypassChainID; } std::shared_ptr RoutingChain::GetDefaultChain() { @@ -646,6 +647,33 @@ namespace Configs { return chain; } + std::shared_ptr RoutingChain::GetRussiaDefaultChain() { + auto chain = std::make_shared(); + chain->name = "Bypass Russia"; + chain->id = RussiaBypassChainID; + chain->save_control_no_save = true; + + auto rule0 = std::make_shared(); + rule0->name = "Route DNS"; + rule0->action = "hijack-dns"; + rule0->protocol = "dns"; + chain->Rules << rule0; + + auto rule1 = std::make_shared(); + rule1->rule_set << QString("ru_IP") << QString("category-ru_SITE"); + rule1->name = "Bypass Russia IPs and Domains"; + rule1->outboundID = -2; + chain->Rules << rule1; + + auto rule2 = std::make_shared(); + rule2->name = "Bypass Private IPs"; + rule2->ip_is_private = true; + rule1->outboundID = -2; + chain->Rules << rule2; + + return chain; + } + std::shared_ptr> RoutingChain::get_used_outbounds() { auto res = std::make_shared>(); for (const auto& item: Rules) {