Fix not correctly handle nodes with only Emojis as remarks.
Fix not correctly handle nodes with port 0.
Fix not correctly handle rename patterns that may make remarks empty.
This commit is contained in:
Tindy X committed 2020-05-24 09:53:44 +08:00
1 parent 42b00c5ce7
commit 8385792fec
2 files changed
+98 -55

No files matched your search

+90 -52
View File
@@ -74,15 +74,14 @@ void explodeVmess(std::string vmess, const std::string &custom_port, nodeInfo &n
GetMember(jsondata, "ps", ps); GetMember(jsondata, "ps", ps);
GetMember(jsondata, "add", add); GetMember(jsondata, "add", add);
port = custom_port.size() ? custom_port : GetMember(jsondata, "port");
if(port == "0")
return;
GetMember(jsondata, "type", type); GetMember(jsondata, "type", type);
GetMember(jsondata, "id", id); GetMember(jsondata, "id", id);
GetMember(jsondata, "aid", aid); GetMember(jsondata, "aid", aid);
GetMember(jsondata, "net", net); GetMember(jsondata, "net", net);
GetMember(jsondata, "tls", tls); GetMember(jsondata, "tls", tls);
if(custom_port.size())
port = custom_port;
else
GetMember(jsondata, "port", port);
GetMember(jsondata, "host", host); GetMember(jsondata, "host", host);
switch(to_int(version)) switch(to_int(version))
@@ -107,7 +106,7 @@ void explodeVmess(std::string vmess, const std::string &custom_port, nodeInfo &n
node.group = V2RAY_DEFAULT_GROUP; node.group = V2RAY_DEFAULT_GROUP;
node.remarks = ps; node.remarks = ps;
node.server = add; node.server = add;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = vmessConstruct(add, port, type, id, aid, net, "auto", path, host, "", tls); node.proxyStr = vmessConstruct(add, port, type, id, aid, net, "auto", path, host, "", tls);
} }
@@ -137,7 +136,9 @@ void explodeVmessConf(std::string content, const std::string &custom_port, bool
{ {
nodejson = json["outbounds"][0]; nodejson = json["outbounds"][0];
add = GetMember(nodejson["settings"]["vnext"][0], "address"); add = GetMember(nodejson["settings"]["vnext"][0], "address");
port = GetMember(nodejson["settings"]["vnext"][0], "port"); port = custom_port.size() ? custom_port : GetMember(nodejson["settings"]["vnext"][0], "port");
if(port == "0")
return;
if(nodejson["settings"]["vnext"][0]["users"].Size()) if(nodejson["settings"]["vnext"][0]["users"].Size())
{ {
id = GetMember(nodejson["settings"]["vnext"][0]["users"][0], "id"); id = GetMember(nodejson["settings"]["vnext"][0]["users"][0], "id");
@@ -188,7 +189,7 @@ void explodeVmessConf(std::string content, const std::string &custom_port, bool
node.group = V2RAY_DEFAULT_GROUP; node.group = V2RAY_DEFAULT_GROUP;
node.remarks = add + ":" + port; node.remarks = add + ":" + port;
node.server = add; node.server = add;
node.port = to_int(port); node.port = to_int(port, 1);
nodes.push_back(node); nodes.push_back(node);
} }
return; return;
@@ -212,10 +213,9 @@ void explodeVmessConf(std::string content, const std::string &custom_port, bool
//common info //common info
json["vmess"][i]["remarks"] >> ps; json["vmess"][i]["remarks"] >> ps;
json["vmess"][i]["address"] >> add; json["vmess"][i]["address"] >> add;
if(custom_port.size()) port = custom_port.size() ? custom_port : GetMember(json["vmess"][i], "port");
port = custom_port; if(port == "0")
else continue;
json["vmess"][i]["port"] >> port;
json["vmess"][i]["subid"] >> subid; json["vmess"][i]["subid"] >> subid;
if(subid.size()) if(subid.size())
@@ -264,7 +264,7 @@ void explodeVmessConf(std::string content, const std::string &custom_port, bool
node.remarks = ps; node.remarks = ps;
node.id = index; node.id = index;
node.server = add; node.server = add;
node.port = to_int(port); node.port = to_int(port, 1);
nodes.push_back(node); nodes.push_back(node);
} }
return; return;
@@ -328,6 +328,8 @@ void explodeSS(std::string ss, bool libev, const std::string &custom_port, nodeI
} }
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
if(ps.empty()) if(ps.empty())
ps = server + ":" + port; ps = server + ":" + port;
@@ -335,7 +337,7 @@ void explodeSS(std::string ss, bool libev, const std::string &custom_port, nodeI
node.group = group; node.group = group;
node.remarks = ps; node.remarks = ps;
node.server = server; node.server = server;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, ps, libev); node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, ps, libev);
} }
@@ -405,15 +407,16 @@ void explodeSSD(std::string link, bool libev, const std::string &custom_port, st
GetMember(singlenode, "plugin", plugin); GetMember(singlenode, "plugin", plugin);
GetMember(singlenode, "plugin_options", pluginopts); GetMember(singlenode, "plugin_options", pluginopts);
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
continue;
node.linkType = SPEEDTEST_MESSAGE_FOUNDSS; node.linkType = SPEEDTEST_MESSAGE_FOUNDSS;
node.group = group; node.group = group;
node.remarks = remarks; node.remarks = remarks;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, remarks, libev); node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, remarks, libev);
node.id = index; node.id = index;
nodes.push_back(node); nodes.push_back(node);
@@ -424,6 +427,9 @@ void explodeSSD(std::string link, bool libev, const std::string &custom_port, st
void explodeSSAndroid(std::string ss, bool libev, const std::string &custom_port, std::vector<nodeInfo> &nodes) void explodeSSAndroid(std::string ss, bool libev, const std::string &custom_port, std::vector<nodeInfo> &nodes)
{ {
std::string ps, password, method, server, port, group = SS_DEFAULT_GROUP;
std::string plugin, pluginopts;
Document json; Document json;
nodeInfo node; nodeInfo node;
int index = nodes.size(); int index = nodes.size();
@@ -435,17 +441,13 @@ void explodeSSAndroid(std::string ss, bool libev, const std::string &custom_port
for(unsigned int i = 0; i < json["nodes"].Size(); i++) for(unsigned int i = 0; i < json["nodes"].Size(); i++)
{ {
std::string ps, password, method, server, port, group = SS_DEFAULT_GROUP;
std::string plugin, pluginopts;
server = GetMember(json["nodes"][i], "server"); server = GetMember(json["nodes"][i], "server");
if(server.empty()) if(server.empty())
continue; continue;
ps = GetMember(json["nodes"][i], "remarks"); ps = GetMember(json["nodes"][i], "remarks");
if(custom_port.size()) port = custom_port.size() ? custom_port : GetMember(json["nodes"][i], "server_port");
port = custom_port; if(port == "0")
else continue;
port = GetMember(json["nodes"][i], "server_port");
if(ps.empty()) if(ps.empty())
ps = server + ":" + port; ps = server + ":" + port;
password = GetMember(json["nodes"][i], "password"); password = GetMember(json["nodes"][i], "password");
@@ -458,7 +460,7 @@ void explodeSSAndroid(std::string ss, bool libev, const std::string &custom_port
node.group = group; node.group = group;
node.remarks = ps; node.remarks = ps;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, ps, libev); node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, ps, libev);
nodes.push_back(node); nodes.push_back(node);
index++; index++;
@@ -479,14 +481,11 @@ void explodeSSConf(std::string content, const std::string &custom_port, bool lib
for(unsigned int i = 0; i < json["configs"].Size(); i++) for(unsigned int i = 0; i < json["configs"].Size(); i++)
{ {
json["configs"][i]["remarks"] >> ps; json["configs"][i]["remarks"] >> ps;
if(custom_port.size()) port = custom_port.size() ? custom_port : GetMember(json["configs"][i], "server_port");
port = custom_port; if(port == "0")
else continue;
json["configs"][i]["server_port"] >> port;
if(ps.empty()) if(ps.empty())
{
ps = server + ":" + port; ps = server + ":" + port;
}
json["configs"][i]["password"] >> password; json["configs"][i]["password"] >> password;
json["configs"][i]["method"] >> method; json["configs"][i]["method"] >> method;
@@ -499,7 +498,7 @@ void explodeSSConf(std::string content, const std::string &custom_port, bool lib
node.remarks = ps; node.remarks = ps;
node.id = index; node.id = index;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, ps, libev); node.proxyStr = ssConstruct(server, port, password, method, plugin, pluginopts, ps, libev);
nodes.push_back(node); nodes.push_back(node);
index++; index++;
@@ -544,6 +543,8 @@ void explodeSSR(std::string ssr, bool ss_libev, bool ssr_libev, const std::strin
password = urlsafe_base64_decode(password); password = urlsafe_base64_decode(password);
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
if(group.empty()) if(group.empty())
group = SSR_DEFAULT_GROUP; group = SSR_DEFAULT_GROUP;
@@ -556,7 +557,7 @@ void explodeSSR(std::string ssr, bool ss_libev, bool ssr_libev, const std::strin
node.group = group; node.group = group;
node.remarks = remarks; node.remarks = remarks;
node.server = server; node.server = server;
node.port = to_int(port, 0); node.port = to_int(port, 1);
if(find(ss_ciphers.begin(), ss_ciphers.end(), method) != ss_ciphers.end() && (obfs.empty() || obfs == "plain") && (protocol.empty() || protocol == "origin")) if(find(ss_ciphers.begin(), ss_ciphers.end(), method) != ss_ciphers.end() && (obfs.empty() || obfs == "plain") && (protocol.empty() || protocol == "origin"))
{ {
node.linkType = SPEEDTEST_MESSAGE_FOUNDSS; node.linkType = SPEEDTEST_MESSAGE_FOUNDSS;
@@ -586,7 +587,7 @@ void explodeSSRConf(std::string content, const std::string &custom_port, bool ss
port = GetMember(json, "server_port"); port = GetMember(json, "server_port");
node.remarks = server + ":" + port; node.remarks = server + ":" + port;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
method = GetMember(json, "method"); method = GetMember(json, "method");
obfs = GetMember(json, "obfs"); obfs = GetMember(json, "obfs");
protocol = GetMember(json, "protocol"); protocol = GetMember(json, "protocol");
@@ -617,10 +618,9 @@ void explodeSSRConf(std::string content, const std::string &custom_port, bool ss
group = SSR_DEFAULT_GROUP; group = SSR_DEFAULT_GROUP;
json["configs"][i]["remarks"] >> remarks; json["configs"][i]["remarks"] >> remarks;
json["configs"][i]["server"] >> server; json["configs"][i]["server"] >> server;
if(custom_port.size()) port = custom_port.size() ? custom_port : GetMember(json["configs"][i], "server_port");
port = custom_port; if(port == "0")
else continue;
json["configs"][i]["server_port"] >> port;
if(remarks.empty()) if(remarks.empty())
remarks = server + ":" + port; remarks = server + ":" + port;
@@ -638,7 +638,7 @@ void explodeSSRConf(std::string content, const std::string &custom_port, bool ss
node.remarks = remarks; node.remarks = remarks;
node.id = index; node.id = index;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
node.proxyStr = ssrConstruct(group, remarks, remarks_base64, server, port, protocol, method, obfs, password, obfsparam, protoparam, ssr_libev); node.proxyStr = ssrConstruct(group, remarks, remarks_base64, server, port, protocol, method, obfs, password, obfsparam, protoparam, ssr_libev);
nodes.push_back(node); nodes.push_back(node);
index++; index++;
@@ -679,12 +679,14 @@ void explodeSocks(std::string link, const std::string &custom_port, nodeInfo &no
remarks = server + ":" + port; remarks = server + ":" + port;
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
node.linkType = SPEEDTEST_MESSAGE_FOUNDSOCKS; node.linkType = SPEEDTEST_MESSAGE_FOUNDSOCKS;
node.group = group; node.group = group;
node.remarks = remarks; node.remarks = remarks;
node.server = server; node.server = server;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = socksConstruct(remarks, server, port, username, password); node.proxyStr = socksConstruct(remarks, server, port, username, password);
} }
@@ -704,12 +706,14 @@ void explodeHTTP(std::string link, const std::string &custom_port, nodeInfo &nod
remarks = server + ":" + port; remarks = server + ":" + port;
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
node.linkType = SPEEDTEST_MESSAGE_FOUNDHTTP; node.linkType = SPEEDTEST_MESSAGE_FOUNDHTTP;
node.group = group; node.group = group;
node.remarks = remarks; node.remarks = remarks;
node.server = server; node.server = server;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = httpConstruct(remarks, server, port, username, password, strFind(link, "/https")); node.proxyStr = httpConstruct(remarks, server, port, username, password, strFind(link, "/https"));
} }
@@ -764,12 +768,14 @@ void explodeHTTPSub(std::string link, const std::string &custom_port, nodeInfo &
remarks = server + ":" + port; remarks = server + ":" + port;
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
node.linkType = SPEEDTEST_MESSAGE_FOUNDHTTP; node.linkType = SPEEDTEST_MESSAGE_FOUNDHTTP;
node.group = group; node.group = group;
node.remarks = remarks; node.remarks = remarks;
node.server = server; node.server = server;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = httpConstruct(remarks, server, port, username, password, tls); node.proxyStr = httpConstruct(remarks, server, port, username, password, tls);
} }
@@ -806,6 +812,8 @@ void explodeTrojan(std::string trojan, const std::string &custom_port, nodeInfo
return; return;
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
host = getUrlArg(addition, "peer"); host = getUrlArg(addition, "peer");
@@ -818,7 +826,7 @@ void explodeTrojan(std::string trojan, const std::string &custom_port, nodeInfo
node.group = TROJAN_DEFAULT_GROUP; node.group = TROJAN_DEFAULT_GROUP;
node.remarks = remark; node.remarks = remark;
node.server = server; node.server = server;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = trojanConstruct(remark, server, port, psk, host, true); node.proxyStr = trojanConstruct(remark, server, port, psk, host, true);
} }
@@ -837,6 +845,8 @@ void explodeQuan(std::string quan, const std::string &custom_port, nodeInfo &nod
ps = trim(configs[0]); ps = trim(configs[0]);
add = trim(configs[2]); add = trim(configs[2]);
port = custom_port.size() ? custom_port : trim(configs[3]); port = custom_port.size() ? custom_port : trim(configs[3]);
if(port == "0")
return;
cipher = trim(configs[4]); cipher = trim(configs[4]);
id = trim(replace_all_distinct(configs[5], "\"", "")); id = trim(replace_all_distinct(configs[5], "\"", ""));
@@ -878,7 +888,7 @@ void explodeQuan(std::string quan, const std::string &custom_port, nodeInfo &nod
node.group = group; node.group = group;
node.remarks = ps; node.remarks = ps;
node.server = add; node.server = add;
node.port = to_int(port, 0); node.port = to_int(port, 1);
node.proxyStr = vmessConstruct(add, port, type, id, aid, net, cipher, path, host, edge, tls); node.proxyStr = vmessConstruct(add, port, type, id, aid, net, cipher, path, host, edge, tls);
} }
} }
@@ -900,6 +910,8 @@ void explodeNetch(std::string netch, bool ss_libev, bool ssr_libev, const std::s
tfo = GetMember(json, "EnableTFO"); tfo = GetMember(json, "EnableTFO");
scv = GetMember(json, "AllowInsecure"); scv = GetMember(json, "AllowInsecure");
port = custom_port.size() ? custom_port : GetMember(json, "Port"); port = custom_port.size() ? custom_port : GetMember(json, "Port");
if(port == "0")
return;
method = GetMember(json, "EncryptMethod"); method = GetMember(json, "EncryptMethod");
password = GetMember(json, "Password"); password = GetMember(json, "Password");
if(remark.empty()) if(remark.empty())
@@ -978,7 +990,7 @@ void explodeNetch(std::string netch, bool ss_libev, bool ssr_libev, const std::s
node.remarks = remark; node.remarks = remark;
node.server = address; node.server = address;
node.port = (unsigned short)to_int(port, 0); node.port = (unsigned short)to_int(port, 1);
} }
void explodeClash(Node yamlnode, const std::string &custom_port, std::vector<nodeInfo> &nodes, bool ss_libev, bool ssr_libev) void explodeClash(Node yamlnode, const std::string &custom_port, std::vector<nodeInfo> &nodes, bool ss_libev, bool ssr_libev)
@@ -1000,7 +1012,7 @@ void explodeClash(Node yamlnode, const std::string &custom_port, std::vector<nod
singleproxy["name"] >>= ps; singleproxy["name"] >>= ps;
singleproxy["server"] >>= server; singleproxy["server"] >>= server;
port = custom_port.empty() ? safe_as<std::string>(singleproxy["port"]) : custom_port; port = custom_port.empty() ? safe_as<std::string>(singleproxy["port"]) : custom_port;
if(port.empty()) if(port.empty() || port == "0")
continue; continue;
udp = safe_as<std::string>(singleproxy["udp"]); udp = safe_as<std::string>(singleproxy["udp"]);
scv = safe_as<std::string>(singleproxy["skip-cert-verify"]); scv = safe_as<std::string>(singleproxy["skip-cert-verify"]);
@@ -1056,7 +1068,6 @@ void explodeClash(Node yamlnode, const std::string &custom_port, std::vector<nod
{ {
plugin = "simple-obfs"; plugin = "simple-obfs";
singleproxy["obfs"] >>= pluginopts_mode; singleproxy["obfs"] >>= pluginopts_mode;
if(singleproxy["obfs-host"].IsDefined())
singleproxy["obfs-host"] >>= pluginopts_host; singleproxy["obfs-host"] >>= pluginopts_host;
} }
else else
@@ -1148,7 +1159,7 @@ void explodeClash(Node yamlnode, const std::string &custom_port, std::vector<nod
node.group = group; node.group = group;
node.remarks = ps; node.remarks = ps;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
node.id = index; node.id = index;
nodes.push_back(node); nodes.push_back(node);
index++; index++;
@@ -1180,6 +1191,8 @@ void explodeShadowrocket(std::string rocket, const std::string &custom_port, nod
return; return;
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
remarks = UrlDecode(getUrlArg(addition, "remark")); remarks = UrlDecode(getUrlArg(addition, "remark"));
obfs = getUrlArg(addition, "obfs"); obfs = getUrlArg(addition, "obfs");
if(obfs.size()) if(obfs.size())
@@ -1251,6 +1264,8 @@ void explodeKitsunebi(std::string kit, const std::string &custom_port, nodeInfo
} }
if(custom_port.size()) if(custom_port.size())
port = custom_port; port = custom_port;
if(port == "0")
return;
net = getUrlArg(addition, "network"); net = getUrlArg(addition, "network");
tls = getUrlArg(addition, "tls") == "true" ? "tls" : ""; tls = getUrlArg(addition, "tls") == "true" ? "tls" : "";
host = getUrlArg(addition, "ws.host"); host = getUrlArg(addition, "ws.host");
@@ -1338,6 +1353,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
{ {
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
method = trim(configs[3]); method = trim(configs[3]);
password = trim(configs[4]); password = trim(configs[4]);
@@ -1376,6 +1393,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
case "ss"_hash: //surge 3 style ss proxy case "ss"_hash: //surge 3 style ss proxy
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
for(i = 3; i < configs.size(); i++) for(i = 3; i < configs.size(); i++)
{ {
@@ -1413,6 +1432,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
node.group = SOCKS_DEFAULT_GROUP; node.group = SOCKS_DEFAULT_GROUP;
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
if(configs.size() >= 5) if(configs.size() >= 5)
{ {
username = trim(configs[3]); username = trim(configs[3]);
@@ -1438,6 +1459,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
case "vmess"_hash: //surge 4 style vmess proxy case "vmess"_hash: //surge 4 style vmess proxy
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
net = "tcp"; net = "tcp";
method = "auto"; method = "auto";
@@ -1486,6 +1509,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
node.group = HTTP_DEFAULT_GROUP; node.group = HTTP_DEFAULT_GROUP;
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
for(i = 3; i < configs.size(); i++) for(i = 3; i < configs.size(); i++)
{ {
vArray = split(configs[i], "="); vArray = split(configs[i], "=");
@@ -1508,6 +1533,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
node.group = TROJAN_DEFAULT_GROUP; node.group = TROJAN_DEFAULT_GROUP;
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
for(i = 3; i < configs.size(); i++) for(i = 3; i < configs.size(); i++)
{ {
@@ -1537,6 +1564,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
server = trim(configs[1]); server = trim(configs[1]);
port = custom_port.empty() ? trim(configs[2]) : custom_port; port = custom_port.empty() ? trim(configs[2]) : custom_port;
if(port == "0")
continue;
for(i = 3; i < configs.size(); i++) for(i = 3; i < configs.size(); i++)
{ {
@@ -1567,6 +1596,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
case "shadowsocks"_hash: //quantumult x style ss/ssr link case "shadowsocks"_hash: //quantumult x style ss/ssr link
server = trim(configs[0].substr(0, configs[0].rfind(":"))); server = trim(configs[0].substr(0, configs[0].rfind(":")));
port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port; port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port;
if(port == "0")
continue;
for(i = 1; i < configs.size(); i++) for(i = 1; i < configs.size(); i++)
{ {
@@ -1617,6 +1648,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
case "vmess"_hash: //quantumult x style vmess link case "vmess"_hash: //quantumult x style vmess link
server = trim(configs[0].substr(0, configs[0].rfind(":"))); server = trim(configs[0].substr(0, configs[0].rfind(":")));
port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port; port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port;
if(port == "0")
continue;
net = "tcp"; net = "tcp";
for(i = 1; i < configs.size(); i++) for(i = 1; i < configs.size(); i++)
@@ -1659,6 +1692,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
case "trojan"_hash: //quantumult x style trojan link case "trojan"_hash: //quantumult x style trojan link
server = trim(configs[0].substr(0, configs[0].rfind(":"))); server = trim(configs[0].substr(0, configs[0].rfind(":")));
port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port; port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port;
if(port == "0")
continue;
for(i = 1; i < configs.size(); i++) for(i = 1; i < configs.size(); i++)
{ {
@@ -1692,6 +1727,8 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
case "http"_hash: //quantumult x style http links case "http"_hash: //quantumult x style http links
server = trim(configs[0].substr(0, configs[0].rfind(":"))); server = trim(configs[0].substr(0, configs[0].rfind(":")));
port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port; port = custom_port.empty() ? trim(configs[0].substr(configs[0].rfind(":") + 1)) : custom_port;
if(port == "0")
continue;
for(i = 1; i < configs.size(); i++) for(i = 1; i < configs.size(); i++)
{ {
@@ -1743,6 +1780,10 @@ bool explodeSurge(std::string surge, const std::string &custom_port, std::vector
void explodeSSTap(std::string sstap, const std::string &custom_port, std::vector<nodeInfo> &nodes, bool ss_libev, bool ssr_libev) void explodeSSTap(std::string sstap, const std::string &custom_port, std::vector<nodeInfo> &nodes, bool ss_libev, bool ssr_libev)
{ {
std::string configType, group, remarks, server, port;
std::string cipher;
std::string user, pass;
std::string protocol, protoparam, obfs, obfsparam;
Document json; Document json;
nodeInfo node; nodeInfo node;
unsigned int index = nodes.size(); unsigned int index = nodes.size();
@@ -1752,15 +1793,12 @@ void explodeSSTap(std::string sstap, const std::string &custom_port, std::vector
for(unsigned int i = 0; i < json["configs"].Size(); i++) for(unsigned int i = 0; i < json["configs"].Size(); i++)
{ {
std::string configType, group, remarks, server, port;
std::string cipher;
std::string user, pass;
std::string protocol, protoparam, obfs, obfsparam;
json["configs"][i]["group"] >> group; json["configs"][i]["group"] >> group;
json["configs"][i]["remarks"] >> remarks; json["configs"][i]["remarks"] >> remarks;
json["configs"][i]["server"] >> server; json["configs"][i]["server"] >> server;
port = custom_port.size() ? custom_port : GetMember(json["configs"][i], "server_port"); port = custom_port.size() ? custom_port : GetMember(json["configs"][i], "server_port");
if(port == "0")
continue;
if(remarks.empty()) if(remarks.empty())
remarks = server + ":" + port; remarks = server + ":" + port;
@@ -1799,7 +1837,7 @@ void explodeSSTap(std::string sstap, const std::string &custom_port, std::vector
node.remarks = remarks; node.remarks = remarks;
node.id = index; node.id = index;
node.server = server; node.server = server;
node.port = to_int(port); node.port = to_int(port, 1);
nodes.push_back(node); nodes.push_back(node);
} }
} }
+8 -3
View File
@@ -460,10 +460,10 @@ bool matchRange(std::string &range, int target)
return match; return match;
} }
std::string nodeRename(std::string remark, int groupID, const string_array &rename_array) std::string nodeRename(const std::string &orig_remark, int groupID, const string_array &rename_array)
{ {
string_array vArray; string_array vArray;
std::string targetRange; std::string targetRange, remark = orig_remark;
string_size pos; string_size pos;
for(const std::string &x : rename_array) for(const std::string &x : rename_array)
@@ -490,12 +490,15 @@ std::string nodeRename(std::string remark, int groupID, const string_array &rena
if(matchRange(targetRange, groupID)) if(matchRange(targetRange, groupID))
remark = regReplace(remark, vArray[0], vArray[1]); remark = regReplace(remark, vArray[0], vArray[1]);
} }
if(remark.empty())
return orig_remark;
return remark; return remark;
} }
std::string removeEmoji(std::string remark) std::string removeEmoji(const std::string &orig_remark)
{ {
char emoji_id[2] = {(char)-16, (char)-97}; char emoji_id[2] = {(char)-16, (char)-97};
std::string remark = orig_remark;
while(true) while(true)
{ {
if(remark[0] == emoji_id[0] && remark[1] == emoji_id[1]) if(remark[0] == emoji_id[0] && remark[1] == emoji_id[1])
@@ -503,6 +506,8 @@ std::string removeEmoji(std::string remark)
else else
break; break;
} }
if(remark.empty())
return orig_remark;
return remark; return remark;
} }