From 11d9ce73725a9e5a5f8694eec9cefa7a6e4f8d5a Mon Sep 17 00:00:00 2001 From: xream Date: Sun, 16 Jun 2024 21:49:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20Loon=20Hysteria2?= =?UTF-8?q?=20salamander=20=E6=B7=B7=E6=B7=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/core/proxy-utils/parsers/peggy/loon.js | 3 ++- backend/src/core/proxy-utils/parsers/peggy/loon.peg | 3 ++- backend/src/core/proxy-utils/producers/loon.js | 8 ++++++-- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/backend/package.json b/backend/package.json index 69e1af3..6bafcfd 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.339", + "version": "2.14.340", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/core/proxy-utils/parsers/peggy/loon.js b/backend/src/core/proxy-utils/parsers/peggy/loon.js index 3976390..c101e63 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/loon.js +++ b/backend/src/core/proxy-utils/parsers/peggy/loon.js @@ -68,7 +68,7 @@ trojan = tag equals "trojan"i address password (transport/transport_host/transpo proxy.type = "trojan"; handleTransport(); } -hysteria2 = tag equals "hysteria2"i address password (tls_host/tls_verification/udp_relay/fast_open/download_bandwidth/ecn/others)* { +hysteria2 = tag equals "hysteria2"i address password (tls_host/tls_verification/udp_relay/fast_open/download_bandwidth/salamander_password/ecn/others)* { proxy.type = "hysteria2"; } https = tag equals "https"i address (username password)? (tls_host/tls_verification/fast_open/udp_relay/others)* { @@ -178,6 +178,7 @@ udp_relay = comma "udp" equals flag:bool { proxy.udp = flag; } ecn = comma "ecn" equals flag:bool { proxy.ecn = flag; } download_bandwidth = comma "download-bandwidth" equals match:[^,]+ { proxy.down = match.join(""); } +salamander_password = comma "salamander-password" equals match:[^,]+ { proxy['obfs-password'] = match.join(""); proxy.obfs = 'salamander'; } tag = match:[^=,]* { proxy.name = match.join("").trim(); } comma = _ "," _ diff --git a/backend/src/core/proxy-utils/parsers/peggy/loon.peg b/backend/src/core/proxy-utils/parsers/peggy/loon.peg index 0f272d5..fd653ff 100644 --- a/backend/src/core/proxy-utils/parsers/peggy/loon.peg +++ b/backend/src/core/proxy-utils/parsers/peggy/loon.peg @@ -66,7 +66,7 @@ trojan = tag equals "trojan"i address password (transport/transport_host/transpo proxy.type = "trojan"; handleTransport(); } -hysteria2 = tag equals "hysteria2"i address password (tls_host/tls_verification/udp_relay/fast_open/download_bandwidth/ecn/others)* { +hysteria2 = tag equals "hysteria2"i address password (tls_host/tls_verification/udp_relay/fast_open/download_bandwidth/salamander_password/ecn/others)* { proxy.type = "hysteria2"; } https = tag equals "https"i address (username password)? (tls_host/tls_verification/fast_open/udp_relay/others)* { @@ -176,6 +176,7 @@ udp_relay = comma "udp" equals flag:bool { proxy.udp = flag; } ecn = comma "ecn" equals flag:bool { proxy.ecn = flag; } download_bandwidth = comma "download-bandwidth" equals match:[^,]+ { proxy.down = match.join(""); } +salamander_password = comma "salamander-password" equals match:[^,]+ { proxy['obfs-password'] = match.join(""); proxy.obfs = 'salamander'; } tag = match:[^=,]* { proxy.name = match.join("").trim(); } comma = _ "," _ diff --git a/backend/src/core/proxy-utils/producers/loon.js b/backend/src/core/proxy-utils/producers/loon.js index 5bad345..0fc3a97 100644 --- a/backend/src/core/proxy-utils/producers/loon.js +++ b/backend/src/core/proxy-utils/producers/loon.js @@ -408,8 +408,8 @@ function wireguard(proxy) { } function hysteria2(proxy) { - if (proxy.obfs || proxy['obfs-password']) { - throw new Error(`obfs is unsupported`); + if (proxy['obfs-password'] && proxy.obfs != 'salamander') { + throw new Error(`only salamander obfs is supported`); } const result = new Result(proxy); result.append(`${proxy.name}=Hysteria2,${proxy.server},${proxy.port}`); @@ -423,6 +423,10 @@ function hysteria2(proxy) { 'skip-cert-verify', ); + if (proxy['obfs-password'] && proxy.obfs == 'salamander') { + result.append(`,salamander-password="${proxy['obfs-password']}"`); + } + // tfo result.appendIfPresent(`,fast-open=${proxy.tfo}`, 'tfo');