Enable tcping test for custom config

This commit is contained in:
yuhan6665
2020-08-15 19:37:59 -04:00
parent dc31380cc2
commit 180b5efd93
3 changed files with 51 additions and 9 deletions

View File

@@ -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<String>)

View File

@@ -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
}

View File

@@ -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的客户端配置文件
*/