From ac11260747f682cfa9bc532d1b2ca9700a2fd8f4 Mon Sep 17 00:00:00 2001 From: Tindy X <49061470+tindy2013@users.noreply.github.com> Date: Tue, 2 Jun 2020 12:31:28 +0800 Subject: [PATCH] Fix support for some non-standard Shadowsocks subscriptions --- src/speedtestutil.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/speedtestutil.cpp b/src/speedtestutil.cpp index a49a2a5..a7823d3 100644 --- a/src/speedtestutil.cpp +++ b/src/speedtestutil.cpp @@ -477,21 +477,25 @@ void explodeSSConf(std::string content, const std::string &custom_port, bool lib json.Parse(content.data()); if(json.HasParseError()) return; + const char *section = json.HasMember("version") && json.HasMember("remarks") && json.HasMember("servers") ? "servers" : "configs"; + if(!json.HasMember(section)) + return; + GetMember(json, "remarks", group); - for(unsigned int i = 0; i < json["configs"].Size(); i++) + for(unsigned int i = 0; i < json[section].Size(); i++) { - json["configs"][i]["remarks"] >> ps; - port = custom_port.size() ? custom_port : GetMember(json["configs"][i], "server_port"); + ps = GetMember(json[section][i], "remarks"); + port = custom_port.size() ? custom_port : GetMember(json[section][i], "server_port"); if(port == "0") continue; if(ps.empty()) ps = server + ":" + port; - json["configs"][i]["password"] >> password; - json["configs"][i]["method"] >> method; - json["configs"][i]["server"] >> server; - json["configs"][i]["plugin"] >> plugin; - json["configs"][i]["plugin_opts"] >> pluginopts; + password = GetMember(json[section][i], "password"); + method = GetMember(json[section][i], "method"); + server = GetMember(json[section][i], "server"); + plugin = GetMember(json[section][i], "plugin"); + pluginopts = GetMember(json[section][i], "plugin_opts"); node.linkType = SPEEDTEST_MESSAGE_FOUNDSS; node.group = group;