From e4e668b4929a46055b1954505475821ce4aab04d Mon Sep 17 00:00:00 2001 From: Utaea <69945099+Utaea@users.noreply.github.com> Date: Wed, 6 Mar 2024 18:03:03 +0800 Subject: [PATCH] Add support to transport for shadowsocks --- .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 3 +- .../com/v2ray/ang/util/AngConfigManager.kt | 36 ++++++++ .../layout/activity_server_shadowsocks.xml | 90 ++++++++++++++++++- 3 files changed, 127 insertions(+), 2 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt index 15374923..4aef996e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt @@ -367,7 +367,8 @@ data class V2rayConfig( fun getTransportSettingDetails(): List? { if (protocol.equals(EConfigType.VMESS.name, true) || protocol.equals(EConfigType.VLESS.name, true) - || protocol.equals(EConfigType.TROJAN.name, true)) { + || protocol.equals(EConfigType.TROJAN.name, true) + || protocol.equals(EConfigType.SHADOWSOCKS.name, true)) { val transport = streamSettings?.network ?: return null return when (transport) { "tcp" -> { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt index 01a78938..19fdece1 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt @@ -583,6 +583,42 @@ object AngConfigManager { password = base64Decode.substringAfter(":") } + val query = Utils.urlDecode(uri.query ?: "") + if (query != "") { + val queryPairs = HashMap() + val pairs = query.split(";") + Log.d(AppConfig.ANG_PACKAGE, pairs.toString()) + for (pair in pairs) { + val idx = pair.indexOf("=") + if (idx == -1) { + queryPairs[Utils.urlDecode(pair)] = ""; + } else { + queryPairs[Utils.urlDecode(pair.substring(0, idx))] = Utils.urlDecode(pair.substring(idx + 1)) + } + } + Log.d(AppConfig.ANG_PACKAGE, queryPairs.toString()) + var sni: String? = "" + if (queryPairs["plugin"] == "obfs-local" && queryPairs["obfs"] == "http") { + sni = config.outboundBean?.streamSettings?.populateTransportSettings( + "tcp", "http", queryPairs["obfs-host"], queryPairs["path"], null, null, null, null, null + ) + } else if (queryPairs["plugin"] == "v2ray-plugin") { + var network = "ws"; + if (queryPairs["mode"] == "quic") { + network = "quic"; + } + sni = config.outboundBean?.streamSettings?.populateTransportSettings( + network, null, queryPairs["host"], queryPairs["path"], null, null, null, null, null + ) + } + if ("tls" in queryPairs) { + config.outboundBean?.streamSettings?.populateTlsSettings( + "tls", false, sni ?: "", null, null, null, null, null + ) + } + + } + config.outboundBean?.settings?.servers?.get(0)?.let { server -> server.address = uri.idnHost server.port = uri.port diff --git a/V2rayNG/app/src/main/res/layout/activity_server_shadowsocks.xml b/V2rayNG/app/src/main/res/layout/activity_server_shadowsocks.xml index dba1c142..d861295c 100644 --- a/V2rayNG/app/src/main/res/layout/activity_server_shadowsocks.xml +++ b/V2rayNG/app/src/main/res/layout/activity_server_shadowsocks.xml @@ -117,7 +117,95 @@ android:entries="@array/ss_securitys" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file +