From 2ec39ecc80f68526ffcb411271cac958b52e22f8 Mon Sep 17 00:00:00 2001 From: fortressme <87455543+fortressme@users.noreply.github.com> Date: Tue, 9 Jun 2026 12:36:39 +0800 Subject: [PATCH] feat: add support for extra configuration options in ProxyGroupConfig --- src/config/binding.h | 15 +++++++++++++++ src/config/proxygroup.h | 1 + src/generator/config/subexport.cpp | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/config/binding.h b/src/config/binding.h index e069869..bb9f909 100644 --- a/src/config/binding.h +++ b/src/config/binding.h @@ -84,6 +84,12 @@ namespace toml throw serialization_error(format_error("Proxy Group must contains at least one of proxy match rule or provider!", v.location(), "here"), v.location()); if(v.contains("disable-udp")) conf.DisableUdp = find_or(v, "disable-udp", conf.DisableUdp.get()); + if(v.contains("extra")) + { + const auto& extra_table = toml::find(v, "extra"); + for(const auto& [k, val] : extra_table) + conf.Extras[k] = toml::format(val); + } return conf; } }; @@ -254,6 +260,15 @@ namespace INIBinding conf.UsingProvider.reserve(conf.UsingProvider.size() + list.size()); std::move(list.begin(), list.end(), std::back_inserter(conf.UsingProvider)); } + else if(startsWith(vArray[i], "!!")) + { + std::string keyval = vArray[i].substr(2); + auto eqpos = keyval.find('='); + if(eqpos != std::string::npos) + conf.Extras[keyval.substr(0, eqpos)] = keyval.substr(eqpos + 1); + else + conf.Extras[keyval] = "true"; + } else conf.Proxies.emplace_back(std::move(vArray[i])); } diff --git a/src/config/proxygroup.h b/src/config/proxygroup.h index 07dbddc..f08c622 100644 --- a/src/config/proxygroup.h +++ b/src/config/proxygroup.h @@ -35,6 +35,7 @@ struct ProxyGroupConfig Boolean DisableUdp; Boolean Persistent; Boolean EvaluateBeforeUse; + string_map Extras; String TypeStr() const { diff --git a/src/generator/config/subexport.cpp b/src/generator/config/subexport.cpp index 0db3807..8ccb4b0 100644 --- a/src/generator/config/subexport.cpp +++ b/src/generator/config/subexport.cpp @@ -808,6 +808,8 @@ proxyToClash(std::vector &nodes, YAML::Node &yamlnode, const ProxyGroupCo } if (!x.DisableUdp.is_undef()) singlegroup["disable-udp"] = x.DisableUdp.get(); + for (const auto &[key, value] : x.Extras) + singlegroup[key] = yamlScalarFromString(value); for (const auto &y: x.Proxies) groupGenerate(y, nodelist, filtered_nodelist, true, ext);