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 d52f1424..253e8838 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 @@ -382,7 +382,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 cf382636..39fe81a4 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 @@ -589,6 +589,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 +