feat: add bypass russia chain

This commit is contained in:
parhelia512 2025-07-20 20:38:50 +08:00
parent 320b599559
commit 24d3bf6176
3 changed files with 33 additions and 1 deletions

View File

@ -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<RoutingChain> GetChinaDefaultChain();
static std::shared_ptr<RoutingChain> GetRussiaDefaultChain();
std::shared_ptr<QList<int>> get_used_outbounds();
std::shared_ptr<QStringList> get_used_rule_sets();

View File

@ -113,6 +113,7 @@ namespace Configs {
routes[IranBypassChainID] = RoutingChain::GetIranDefaultChain();
routes[ChinaBypassChainID] = RoutingChain::GetChinaDefaultChain();
routes[RussiaBypassChainID] = RoutingChain::GetRussiaDefaultChain();
}
void ProfileManager::SaveManager() {

View File

@ -578,7 +578,8 @@ namespace Configs {
bool RoutingChain::isViewOnly() const {
return id == IranBypassChainID ||
id == ChinaBypassChainID;
id == ChinaBypassChainID ||
id == RussiaBypassChainID;
}
std::shared_ptr<RoutingChain> RoutingChain::GetDefaultChain() {
@ -646,6 +647,33 @@ namespace Configs {
return chain;
}
std::shared_ptr<RoutingChain> RoutingChain::GetRussiaDefaultChain() {
auto chain = std::make_shared<RoutingChain>();
chain->name = "Bypass Russia";
chain->id = RussiaBypassChainID;
chain->save_control_no_save = true;
auto rule0 = std::make_shared<RouteRule>();
rule0->name = "Route DNS";
rule0->action = "hijack-dns";
rule0->protocol = "dns";
chain->Rules << rule0;
auto rule1 = std::make_shared<RouteRule>();
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<RouteRule>();
rule2->name = "Bypass Private IPs";
rule2->ip_is_private = true;
rule1->outboundID = -2;
chain->Rules << rule2;
return chain;
}
std::shared_ptr<QList<int>> RoutingChain::get_used_outbounds() {
auto res = std::make_shared<QList<int>>();
for (const auto& item: Rules) {