From 11ed400fc7095dd693e06d50db01d0f130aae71f Mon Sep 17 00:00:00 2001 From: Tindy X <49061470+tindy2013@users.noreply.github.com> Date: Mon, 8 Jun 2020 20:41:02 +0800 Subject: [PATCH] Optimize codes Fix keeping UDP/TFO/Skip Cert Verify flags from original subscriptions not working. Fix compiler warning. --- src/interfaces.cpp | 19 +------------------ src/misc.h | 6 ++++++ src/rapidjson_extra.h | 3 +++ src/speedtestutil.cpp | 19 +------------------ src/subexport.cpp | 28 +++++++++++----------------- src/subexport.h | 8 ++++---- src/templates.cpp | 8 +------- src/yamlcpp_extra.h | 19 +++++++++++++++++++ 8 files changed, 46 insertions(+), 64 deletions(-) create mode 100644 src/yamlcpp_extra.h diff --git a/src/interfaces.cpp b/src/interfaces.cpp index efba64e..398d8ef 100644 --- a/src/interfaces.cpp +++ b/src/interfaces.cpp @@ -6,6 +6,7 @@ #include #include +#include "yamlcpp_extra.h" #include "misc.h" #include "nodeinfo.h" #include "speedtestutil.h" @@ -74,24 +75,6 @@ size_t max_allowed_rulesets = 64, max_allowed_rules = 32768; string_array regex_blacklist = {"(.*)*"}; -template void operator >> (const YAML::Node& node, T& i) -{ - if(node.IsDefined() && !node.IsNull()) //fail-safe - i = node.as(); -}; - -template T safe_as (const YAML::Node& node) -{ - if(node.IsDefined() && !node.IsNull()) - return node.as(); - return T(); -}; - -template void operator >>= (const YAML::Node& node, T& i) -{ - i = safe_as(node); -}; - std::string parseProxy(const std::string &source) { std::string proxy = source; diff --git a/src/misc.h b/src/misc.h index 8dae5bc..08a7605 100644 --- a/src/misc.h +++ b/src/misc.h @@ -85,6 +85,12 @@ public: return _M_VALUE; } + bool set(const tribool &value) + { + _M_VALUE = value._M_VALUE; + return _M_VALUE; + } + bool set(const std::string &str) { switch(hash_(str)) diff --git a/src/rapidjson_extra.h b/src/rapidjson_extra.h index 86546c1..1836c00 100644 --- a/src/rapidjson_extra.h +++ b/src/rapidjson_extra.h @@ -9,6 +9,9 @@ template void exception_thrower(T e) throw std::runtime_error("assert"); } +#ifdef RAPIDJSON_ASSERT +#undef RAPIDJSON_ASSERT +#endif // RAPIDJSON_ASSERT #define RAPIDJSON_ASSERT(x) exception_thrower(x) #include #include diff --git a/src/speedtestutil.cpp b/src/speedtestutil.cpp index 397457c..375cc77 100644 --- a/src/speedtestutil.cpp +++ b/src/speedtestutil.cpp @@ -6,6 +6,7 @@ #define PCRE2_CODE_UNIT_WIDTH 8 #include +#include "yamlcpp_extra.h" #include "misc.h" #include "printout.h" #include "logger.h" @@ -26,24 +27,6 @@ std::string modSSMD5 = "f7653207090ce3389115e9c88541afe0"; //remake from speedtestutil -template void operator >> (const YAML::Node& node, T& i) -{ - if(node.IsDefined() && !node.IsNull()) //fail-safe - i = node.as(); -}; - -template T safe_as (const YAML::Node& node) -{ - if(node.IsDefined() && !node.IsNull()) - return node.as(); - return T(); -}; - -template void operator >>= (const YAML::Node& node, T& i) -{ - i = safe_as(node); -}; - void explodeVmess(std::string vmess, const std::string &custom_port, nodeInfo &node) { std::string version, ps, add, port, type, id, aid, net, path, host, tls; diff --git a/src/subexport.cpp b/src/subexport.cpp index 1ad7038..6cab035 100644 --- a/src/subexport.cpp +++ b/src/subexport.cpp @@ -1,3 +1,13 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "misc.h" #include "speedtestutil.h" #include "ini_reader.h" @@ -11,16 +21,7 @@ #include "logger.h" #include "templates.h" #include "script_duktape.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "yamlcpp_extra.h" extern bool api_mode; extern string_array ss_ciphers, ssr_ciphers; @@ -37,13 +38,6 @@ const string_array surge_rule_type = {basic_types, "IP-CIDR6", "USER-AGENT", "UR const string_array quanx_rule_type = {basic_types, "USER-AGENT", "HOST", "HOST-SUFFIX", "HOST-KEYWORD"}; const string_array surfb_rule_type = {basic_types, "IP-CIDR6", "PROCESS-NAME", "IN-PORT", "DEST-PORT", "SRC-IP"}; -template T safe_as (const YAML::Node& node) -{ - if(node.IsDefined() && !node.IsNull()) - return node.as(); - return T(); -}; - std::string hostnameToIPAddr(const std::string &host) { int retVal; diff --git a/src/subexport.h b/src/subexport.h index b23b0e5..0961c41 100644 --- a/src/subexport.h +++ b/src/subexport.h @@ -33,11 +33,11 @@ struct extra_settings std::string surge_ssr_path; std::string managed_config_prefix; std::string quanx_dev_id; - tribool udp = false; - tribool tfo = false; - tribool skip_cert_verify = false; + tribool udp = tribool(); + tribool tfo = tribool(); + tribool skip_cert_verify = tribool(); bool clash_classical_ruleset = false; - std::string sort_script; + std::string sort_script = ""; }; void rulesetToClash(YAML::Node &base_rule, std::vector &ruleset_content_array, bool overwrite_original_rules, bool new_field_name); diff --git a/src/templates.cpp b/src/templates.cpp index da8f41e..e2494be 100644 --- a/src/templates.cpp +++ b/src/templates.cpp @@ -4,6 +4,7 @@ #include #include +#include "yamlcpp_extra.h" #include "interfaces.h" #include "templates.h" #include "logger.h" @@ -11,13 +12,6 @@ extern std::string managed_config_prefix; -template T safe_as (const YAML::Node& node) -{ - if(node.IsDefined() && !node.IsNull()) - return node.as(); - return T(); -}; - static inline void parse_json_pointer(nlohmann::json &json, const std::string &path, const std::string &value) { std::string pointer = "/" + replace_all_distinct(path, ".", "/"); diff --git a/src/yamlcpp_extra.h b/src/yamlcpp_extra.h new file mode 100644 index 0000000..0042568 --- /dev/null +++ b/src/yamlcpp_extra.h @@ -0,0 +1,19 @@ +#include + +template void operator >> (const YAML::Node& node, T& i) +{ + if(node.IsDefined() && !node.IsNull()) //fail-safe + i = node.as(); +}; + +template T safe_as (const YAML::Node& node) +{ + if(node.IsDefined() && !node.IsNull()) + return node.as(); + return T(); +}; + +template void operator >>= (const YAML::Node& node, T& i) +{ + i = safe_as(node); +};