Skip to content

Commit 0f9ee6c

Browse files
author
bestrui
committed
feat: ✨ 同步 2.21.46
1 parent a5b3117 commit 0f9ee6c

4 files changed

Lines changed: 90 additions & 12 deletions

File tree

src/core/proxy-utils/parsers/peggy/loon.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ shadowsocksr = tag equals "shadowsocksr"i address method password (ssr_protocol/
4444
// handle ssr obfs
4545
proxy.obfs = obfs.type;
4646
}
47-
shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/ip_mode/block_quic/others)* {
47+
shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/ip_mode/block_quic/udp_over_tcp/others)* {
4848
proxy.type = "ss";
4949
// handle ss obfs
5050
if (obfs.type == "http" || obfs.type === "tls") {
@@ -204,6 +204,8 @@ idle_session_timeout = comma "idle-session-timeout" equals match:$[0-9]+ { proxy
204204
min_idle_session = comma "min-idle-session" equals match:$[0-9]+ { proxy["min-idle-session"] = parseInt(match.trim()); }
205205
max_stream_count = comma "max-stream-count" equals match:$[0-9]+ { proxy["max-stream-count"] = parseInt(match.trim()); }
206206
207+
udp_over_tcp = comma "udp-over-tcp" equals flag:bool { proxy["udp-over-tcp"] = true; proxy["udp-over-tcp-version"] = 2; }
208+
207209
tag = match:[^=,]* { proxy.name = match.join("").trim(); }
208210
comma = _ "," _
209211
equals = _ "=" _

src/core/proxy-utils/parsers/peggy/loon.peg

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ start = (shadowsocksr/shadowsocks/vmess/vless/trojan/https/http/socks5/hysteria2
3737
return proxy;
3838
}
3939

40-
shadowsocksr = tag equals "shadowsocksr"i address method password (ssr_protocol/ssr_protocol_param/obfs_ssr/obfs_ssr_param/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/ip_mode/block_quic/others)*{
40+
shadowsocksr = tag equals "shadowsocksr"i address method password (ssr_protocol/ssr_protocol_param/obfs_ssr/obfs_ssr_param/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/ip_mode/block_quic/udp_over_tcp/others)*{
4141
proxy.type = "ssr";
4242
// handle ssr obfs
4343
proxy.obfs = obfs.type;
@@ -202,6 +202,8 @@ idle_session_timeout = comma "idle-session-timeout" equals match:$[0-9]+ { proxy
202202
min_idle_session = comma "min-idle-session" equals match:$[0-9]+ { proxy["min-idle-session"] = parseInt(match.trim()); }
203203
max_stream_count = comma "max-stream-count" equals match:$[0-9]+ { proxy["max-stream-count"] = parseInt(match.trim()); }
204204

205+
udp_over_tcp = comma "udp-over-tcp" equals flag:bool { proxy["udp-over-tcp"] = true; proxy["udp-over-tcp-version"] = 2; }
206+
205207
tag = match:[^=,]* { proxy.name = match.join("").trim(); }
206208
comma = _ "," _
207209
equals = _ "=" _

src/core/proxy-utils/producers/loon.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
const targetPlatform = 'Loon';
33
import { isPresent, Result } from './utils';
44
import { isIPv4, isIPv6 } from '@/utils';
5+
import $ from '@/core/app';
56

67
const ipVersions = {
78
dual: 'dual',
@@ -148,6 +149,23 @@ function shadowsocks(proxy) {
148149
}
149150
}
150151

152+
// udp over tcp
153+
if (proxy['udp-over-tcp']) {
154+
if (proxy['udp-over-tcp-version'] === 2) {
155+
if (proxy.plugin === 'obfs') {
156+
$.error(
157+
`Platform ${targetPlatform} shadowsocks udp-over-tcp does not support obfs`,
158+
);
159+
} else {
160+
result.append(`,udp-over-tcp=true`);
161+
}
162+
} else {
163+
$.error(
164+
`Platform ${targetPlatform} shadowsocks only supports udp-over-tcp-version 2`,
165+
);
166+
}
167+
}
168+
151169
// tfo
152170
result.appendIfPresent(`,fast-open=${proxy.tfo}`, 'tfo');
153171

src/core/proxy-utils/producers/sing-box.js

Lines changed: 66 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -840,19 +840,27 @@ const anytlsParser = (proxy = {}) => {
840840
};
841841

842842
const wireguardParser = (proxy = {}) => {
843-
const local_address = ['ip', 'ipv6']
843+
const address = ['ip', 'ipv6']
844844
.map((i) => proxy[i])
845845
.map((i) => {
846846
if (isIPv4(i)) return `${i}/32`;
847847
if (isIPv6(i)) return `${i}/128`;
848848
})
849849
.filter((i) => i);
850850
const parsedProxy = {
851+
system: !!proxy.system,
852+
mtu: proxy.mtu ? parseInt(`${proxy.mtu}`, 10) : undefined,
853+
udp_timeout: proxy['udp-timeout']
854+
? parseInt(`${proxy['udp-timeout']}`, 10)
855+
: undefined,
856+
workers: proxy['workers']
857+
? parseInt(`${proxy['workers']}`, 10)
858+
: undefined,
851859
tag: proxy.name,
852860
type: 'wireguard',
853861
server: proxy.server,
854862
server_port: parseInt(`${proxy.port}`, 10),
855-
local_address,
863+
address,
856864
private_key: proxy['private-key'],
857865
peer_public_key: proxy['public-key'],
858866
pre_shared_key: proxy['pre-shared-key'],
@@ -868,14 +876,42 @@ const wireguardParser = (proxy = {}) => {
868876
} else {
869877
delete parsedProxy.reserved;
870878
}
879+
if (!Array.isArray(proxy.peers) || proxy.peers.length === 0) {
880+
proxy.peers = [{}];
881+
}
871882
if (proxy.peers && proxy.peers.length > 0) {
872883
parsedProxy.peers = [];
873884
for (const p of proxy.peers) {
885+
let address;
886+
let port;
887+
if (p.server && p.port) {
888+
address = p.server;
889+
port = parseInt(`${p.port}`, 10);
890+
} else {
891+
address = parsedProxy.server;
892+
port = parseInt(`${parsedProxy.server_port}`, 10);
893+
}
874894
const peer = {
875-
server: p.server,
876-
server_port: parseInt(`${p.port}`, 10),
877-
public_key: p['public-key'],
878-
allowed_ips: p['allowed-ips'] || p.allowed_ips,
895+
address,
896+
port,
897+
persistent_keepalive_interval: p[
898+
'persistent-keepalive-interval'
899+
]
900+
? parseInt(`${p['persistent-keepalive-interval']}`, 10)
901+
: undefined,
902+
public_key:
903+
p['public-key'] ||
904+
p['public_key'] ||
905+
parsedProxy.peer_public_key,
906+
pre_shared_key:
907+
p['pre-shared-key'] ||
908+
p['pre_shared_key'] ||
909+
parsedProxy.pre_shared_key,
910+
allowed_ips: p['allowed-ips'] ||
911+
p.allowed_ips || [
912+
'0.0.0.0/0',
913+
...(proxy.ipv6 ? ['::/0'] : []),
914+
],
879915
reserved: [],
880916
};
881917
if (typeof p.reserved === 'string') {
@@ -885,7 +921,10 @@ const wireguardParser = (proxy = {}) => {
885921
} else {
886922
delete peer.reserved;
887923
}
888-
if (p['pre-shared-key']) peer.pre_shared_key = p['pre-shared-key'];
924+
if (!Array.isArray(peer.reserved) || peer.reserved.length === 0) {
925+
peer.reserved = parsedProxy.reserved;
926+
}
927+
// if (p['pre-shared-key']) peer.pre_shared_key = p['pre-shared-key'];
889928
parsedProxy.peers.push(peer);
890929
}
891930
}
@@ -894,6 +933,11 @@ const wireguardParser = (proxy = {}) => {
894933
detourParser(proxy, parsedProxy);
895934
smuxParser(proxy.smux, parsedProxy);
896935
ipVersionParser(proxy, parsedProxy);
936+
delete parsedProxy.server;
937+
delete parsedProxy.server_port;
938+
delete parsedProxy.pre_shared_key;
939+
delete parsedProxy.peer_public_key;
940+
delete parsedProxy.reserved;
897941
return parsedProxy;
898942
};
899943

@@ -1052,9 +1096,21 @@ export default function singbox_Producer() {
10521096
}
10531097
});
10541098

1055-
return type === 'internal'
1056-
? list
1057-
: JSON.stringify({ outbounds: list }, null, 2);
1099+
if (type === 'internal') return list;
1100+
1101+
const categorized = list.reduce(
1102+
(result, item) => {
1103+
if (['wireguard'].includes(item.type)) {
1104+
result.endpoints.push(item);
1105+
} else {
1106+
result.outbounds.push(item);
1107+
}
1108+
return result;
1109+
},
1110+
{ outbounds: [], endpoints: [] },
1111+
);
1112+
1113+
return JSON.stringify(categorized, null, 2);
10581114
};
10591115
return { type, produce };
10601116
}

0 commit comments

Comments
 (0)