From 180b5efd9321dcbf6b750a7e26fbc1a827b4d5b6 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 15 Aug 2020 19:37:59 -0400 Subject: [PATCH] Enable tcping test for custom config --- .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 18 ++++++++++++++ .../kotlin/com/v2ray/ang/ui/MainActivity.kt | 24 ++++++++++++------- .../com/v2ray/ang/util/V2rayConfigUtil.kt | 18 ++++++++++++++ 3 files changed, 51 insertions(+), 9 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 f8ef577f..57fd191f 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 @@ -108,6 +108,24 @@ data class V2rayConfig( } data class MuxBean(var enabled: Boolean) + + fun getServerAddress(): String? { + if (protocol.equals(EConfigType.VMESS.name.toLowerCase())) { + return settings?.vnext?.get(0)?.address + } else if (protocol.equals(EConfigType.SHADOWSOCKS.name.toLowerCase()) || protocol.equals(EConfigType.SOCKS.name.toLowerCase())) { + return settings?.servers?.get(0)?.address + } + return null + } + + fun getServerPort(): Int? { + if (protocol.equals(EConfigType.VMESS.name.toLowerCase())) { + return settings?.vnext?.get(0)?.port + } else if (protocol.equals(EConfigType.SHADOWSOCKS.name.toLowerCase()) || protocol.equals(EConfigType.SOCKS.name.toLowerCase())) { + return settings?.servers?.get(0)?.port + } + return null + } } //data class DnsBean(var servers: List) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index 6d420339..61565c80 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -253,16 +253,22 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList adapter.updateConfigList() } for (k in 0 until configs.vmess.count()) { - if (configs.vmess[k].configType != EConfigType.CUSTOM.value) { - testingJobs.add(GlobalScope.launch(Dispatchers.IO) { - configs.vmess[k].testResult = Utils.tcping(configs.vmess[k].address, configs.vmess[k].port) - val myJob = coroutineContext[Job] - launch(Dispatchers.Main) { - testingJobs.remove(myJob) - adapter.updateSelectedItem(k) - } - }) + var serverAddress = configs.vmess[k].address + var serverPort = configs.vmess[k].port + if (configs.vmess[k].configType == EConfigType.CUSTOM.value) { + val serverOutbound = V2rayConfigUtil.getCustomConfigServerOutbound(applicationContext, configs.vmess[k].guid) + ?: continue + serverAddress = serverOutbound.getServerAddress() ?: continue + serverPort = serverOutbound.getServerPort() ?: continue } + testingJobs.add(GlobalScope.launch(Dispatchers.IO) { + configs.vmess[k].testResult = Utils.tcping(serverAddress, serverPort) + val myJob = coroutineContext[Job] + launch(Dispatchers.Main) { + testingJobs.remove(myJob) + adapter.updateSelectedItem(k) + } + }) } true } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt index b00c8dc3..98e6506c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt @@ -1,5 +1,6 @@ package com.v2ray.ang.util +import android.content.Context import android.text.TextUtils import android.util.Log import com.google.gson.Gson @@ -15,6 +16,7 @@ import org.json.JSONObject import org.json.JSONArray import com.google.gson.JsonObject import com.v2ray.ang.dto.EConfigType +import com.v2ray.ang.extension.defaultDPreference object V2rayConfigUtil { private val requestObj: JsonObject by lazy { @@ -60,6 +62,22 @@ object V2rayConfigUtil { } } + fun getCustomConfigServerOutbound(content: Context, guid: String): V2rayConfig.OutboundBean? { + val jsonConfig = content.defaultDPreference.getPrefString(AppConfig.ANG_CONFIG + guid, "") + if (TextUtils.isEmpty(jsonConfig)) { + return null + } + val v2rayConfig = Gson().fromJson(jsonConfig, V2rayConfig::class.java) ?: return null + for (outbound in v2rayConfig.outbounds) { + if (outbound.protocol.equals(EConfigType.VMESS.name.toLowerCase()) || + outbound.protocol.equals(EConfigType.SHADOWSOCKS.name.toLowerCase()) || + outbound.protocol.equals(EConfigType.SOCKS.name.toLowerCase())) { + return outbound + } + } + return null + } + /** * 生成v2ray的客户端配置文件 */