This commit is contained in:
2026-07-28 10:32:21 +08:00
parent fc8c23beee
commit 389c0d172a
17 changed files with 678 additions and 157 deletions
+49 -39
View File
@@ -142,19 +142,29 @@ func ParseVless(line string, index int) model.ProxyNode {
}
node := map[string]any{
"name": fragmentName(u, fmt.Sprintf("vless-%d", index+1)),
"type": "vless",
"server": u.Hostname(),
"port": portFromURL(u, 443),
"uuid": userInfo(u),
"udp": true,
"flow": params.Get("flow"),
"network": orDefault(params.Get("type"), "tcp"),
"tls": security != "none",
"name": fragmentName(u, fmt.Sprintf("vless-%d", index+1)),
"type": "vless",
"server": u.Hostname(),
"port": portFromURL(u, 443),
"uuid": userInfo(u),
"udp": true,
"flow": params.Get("flow"),
"network": orDefault(params.Get("type"), "tcp"),
"tls": security != "none",
"servername": params.Get("sni"),
"encryption": orDefault(params.Get("encryption"), "none"),
"encryption": orDefault(params.Get("encryption"), "none"),
"client-fingerprint": orDefault(params.Get("fp"), "chrome"),
}
if node["network"] == "ws" {
wsOpts := map[string]any{
"path": orDefault(params.Get("path"), "/"),
}
host := params.Get("host")
if host != "" {
wsOpts["headers"] = map[string]any{"Host": host}
}
node["ws-opts"] = wsOpts
}
if publicKey != "" {
node["reality-opts"] = StripUndefined(map[string]any{
"public-key": publicKey,
@@ -251,17 +261,17 @@ func ParseVmess(line string, index int) model.ProxyNode {
port := toNumberOrUndefined(payload["port"])
node := map[string]any{
"name": orDefault(toString(payload["ps"]), fmt.Sprintf("vmess-%d", index+1)),
"type": "vmess",
"server": toString(payload["add"]),
"port": port,
"uuid": toString(payload["id"]),
"alterId": toNumberOrUndefined(payload["aid"]),
"cipher": orDefault(toString(payload["scy"]), "auto"),
"tls": toString(payload["tls"]) == "tls",
"name": orDefault(toString(payload["ps"]), fmt.Sprintf("vmess-%d", index+1)),
"type": "vmess",
"server": toString(payload["add"]),
"port": port,
"uuid": toString(payload["id"]),
"alterId": toNumberOrUndefined(payload["aid"]),
"cipher": orDefault(toString(payload["scy"]), "auto"),
"tls": toString(payload["tls"]) == "tls",
"servername": firstNonEmpty(toString(payload["sni"]), toString(payload["host"])),
"network": orDefault(toString(payload["net"]), "tcp"),
"udp": true,
"network": orDefault(toString(payload["net"]), "tcp"),
"udp": true,
}
if toString(payload["net"]) == "ws" {
wsOpts := map[string]any{
@@ -415,15 +425,15 @@ func ParseShadowsocksR(line string, index int) model.ProxyNode {
}
node := map[string]any{
"name": name,
"type": "ssr",
"server": server,
"port": port,
"cipher": method,
"name": name,
"type": "ssr",
"server": server,
"port": port,
"cipher": method,
"password": password,
"protocol": protocol,
"obfs": obfs,
"udp": true,
"obfs": obfs,
"udp": true,
}
if pp := query.Get("protoparam"); pp != "" {
@@ -490,18 +500,18 @@ func ParseHttpProxy(line string, index int) model.ProxyNode {
func ParseTuic(line string, index int) model.ProxyNode {
u := parseURL(line)
return StripUndefined(map[string]any{
"name": fragmentName(u, fmt.Sprintf("tuic-%d", index+1)),
"type": "tuic",
"server": u.Hostname(),
"port": portFromURL(u, 443),
"uuid": userInfo(u),
"password": userPassword(u),
"sni": paramGet(u, "sni"),
"alpn": CommaList(paramGet(u, "alpn")),
"skip-cert-verify": BoolParam(firstNonEmpty(paramGet(u, "allow_insecure"), paramGet(u, "insecure"))),
"disable-sni": BoolParam(firstNonEmpty(paramGet(u, "disable_sni"), paramGet(u, "disable-sni"))),
"reduce-rtt": BoolParam(firstNonEmpty(paramGet(u, "reduce_rtt"), paramGet(u, "reduce-rtt"))),
"udp-relay-mode": firstNonEmpty(paramGet(u, "udp_relay_mode"), paramGet(u, "udp-relay-mode")),
"name": fragmentName(u, fmt.Sprintf("tuic-%d", index+1)),
"type": "tuic",
"server": u.Hostname(),
"port": portFromURL(u, 443),
"uuid": userInfo(u),
"password": userPassword(u),
"sni": paramGet(u, "sni"),
"alpn": CommaList(paramGet(u, "alpn")),
"skip-cert-verify": BoolParam(firstNonEmpty(paramGet(u, "allow_insecure"), paramGet(u, "insecure"))),
"disable-sni": BoolParam(firstNonEmpty(paramGet(u, "disable_sni"), paramGet(u, "disable-sni"))),
"reduce-rtt": BoolParam(firstNonEmpty(paramGet(u, "reduce_rtt"), paramGet(u, "reduce-rtt"))),
"udp-relay-mode": firstNonEmpty(paramGet(u, "udp_relay_mode"), paramGet(u, "udp-relay-mode")),
"congestion-controller": firstNonEmpty(paramGet(u, "congestion_control"), paramGet(u, "congestion-controller")),
})
}