diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt index 915bf23b..b4cd3e16 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/ServerConfig.kt @@ -69,10 +69,6 @@ data class ServerConfig( fun getV2rayPointDomainAndPort(): String { val address = getProxyOutbound()?.getServerAddress().orEmpty() val port = getProxyOutbound()?.getServerPort() - return if (Utils.isIpv6Address(address)) { - String.format("[%s]:%s", address, port) - } else { - String.format("%s:%s", address, port) - } + return Utils.getIpv6Address(address) + ":" + port } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt index 2f38b7e2..11016d57 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt @@ -21,6 +21,7 @@ import com.v2ray.ang.util.MmkvManager import com.v2ray.ang.util.MmkvManager.ID_MAIN import com.v2ray.ang.util.MmkvManager.KEY_SELECTED_SERVER import com.v2ray.ang.util.Utils +import com.v2ray.ang.util.Utils.getIpv6Address class ServerActivity : BaseActivity() { @@ -106,6 +107,9 @@ class ServerActivity : BaseActivity() { private val et_reserved1: EditText? by lazy { findViewById(R.id.et_reserved1) } private val et_reserved2: EditText? by lazy { findViewById(R.id.et_reserved2) } private val et_reserved3: EditText? by lazy { findViewById(R.id.et_reserved3) } + private val et_local_v4_address: EditText? by lazy { findViewById(R.id.et_local_v4_address) } + private val et_local_v6_address: EditText? by lazy { findViewById(R.id.et_local_v6_address) } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -210,6 +214,14 @@ class ServerActivity : BaseActivity() { et_reserved2?.text = Utils.getEditable(outbound.settings?.reserved?.get(1).toString()) et_reserved3?.text = Utils.getEditable(outbound.settings?.reserved?.get(2).toString()) } + if (outbound.settings?.address == null) { + et_local_v4_address?.text = Utils.getEditable("172.16.0.2/32") + et_local_v6_address?.text = Utils.getEditable("2606:4700:110:8f81:d551:a0:532e:a2b3/128") + } else { + val list = outbound.settings?.address as List<*> + et_local_v4_address?.text = Utils.getEditable(list.get(0).toString()) + et_local_v6_address?.text = Utils.getEditable(list.get(1).toString()) + } } val securityEncryptions = if (config.configType == EConfigType.SHADOWSOCKS) shadowsocksSecuritys else securitys val security = Utils.arrayFind(securityEncryptions, outbound.getSecurityEncryption().orEmpty()) @@ -295,6 +307,8 @@ class ServerActivity : BaseActivity() { et_reserved1?.text = Utils.getEditable("0") et_reserved2?.text = Utils.getEditable("0") et_reserved3?.text = Utils.getEditable("0") + et_local_v4_address?.text = Utils.getEditable("172.16.0.2/32") + et_local_v6_address?.text = Utils.getEditable("2606:4700:110:8f81:d551:a0:532e:a2b3/128") return true } @@ -398,7 +412,7 @@ class ServerActivity : BaseActivity() { private fun savePeer(wireguard: V2rayConfig.OutboundBean.OutSettingsBean, port: Int) { wireguard.secretKey = et_id.text.toString().trim() wireguard.peers?.get(0)?.publicKey = et_public_key?.text.toString().trim() - wireguard.peers?.get(0)?.endpoint = et_address.text.toString().trim() + ":" + port + wireguard.peers?.get(0)?.endpoint = getIpv6Address(et_address.text.toString().trim()) + ":" + port val reserved1 = Utils.parseInt(et_reserved1?.text.toString()) val reserved2 = Utils.parseInt(et_reserved2?.text.toString()) val reserved3 = Utils.parseInt(et_reserved3?.text.toString()) @@ -407,6 +421,8 @@ class ServerActivity : BaseActivity() { }else { wireguard.reserved = null } + wireguard.address = listOf(et_local_v4_address?.text.toString().trim(), + et_local_v6_address?.text.toString().trim()) } private fun saveStreamSettings(streamSetting: V2rayConfig.OutboundBean.StreamSettingsBean) { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt index 07ea467b..b0f01eb0 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt @@ -366,7 +366,7 @@ object Utils { } fun getIpv6Address(address: String): String { - return if (isIpv6Address(address)) { + return if (isIpv6Address(address) && !address.contains('[') && !address.contains(']')) { String.format("[%s]", address) } else { address 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 2a80162c..b29efcac 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 @@ -427,9 +427,13 @@ object V2rayConfigUtil { } if (protocol.equals(EConfigType.WIREGUARD.name, true)) { - val localTunAddr = mutableListOf("172.16.0.2/32") - if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) == true) { - localTunAddr.add("2606:4700:110:8f81:d551:a0:532e:a2b3/128") + var localTunAddr = if (outbound.settings?.address == null) { + listOf("172.16.0.2/32", "2606:4700:110:8f81:d551:a0:532e:a2b3/128") + } else { + outbound.settings?.address as List<*> + } + if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) != true) { + localTunAddr = listOf(localTunAddr.first()) } outbound.settings?.address = localTunAddr } diff --git a/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml b/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml index 284a8b23..9b5bdf26 100644 --- a/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml +++ b/V2rayNG/app/src/main/res/layout/activity_server_wireguard.xml @@ -151,6 +151,43 @@ + + + + + + + + + + + + + + + ShortId SpiderX Reserved (اختياري) + العنوان المحلي IPv4(اختياري) + العنوان المحلي IPv6(اختياري, يستخدم فقط عندما تفضل IPv6) نجاح فشل لا يوجد شيء diff --git a/V2rayNG/app/src/main/res/values-fa/strings.xml b/V2rayNG/app/src/main/res/values-fa/strings.xml index 96b2cbe2..37a53b49 100644 --- a/V2rayNG/app/src/main/res/values-fa/strings.xml +++ b/V2rayNG/app/src/main/res/values-fa/strings.xml @@ -61,6 +61,8 @@ رمزگذاری جریان Reserved (اختیاری) + آدرس محلی IPv4(اختیاری) + آدرس محلی IPv6(اختیاری, فقط زمانی استفاده می شود که IPv6 را ترجیح می دهد) موفقیت شکست چیزی نیست diff --git a/V2rayNG/app/src/main/res/values-ru/strings.xml b/V2rayNG/app/src/main/res/values-ru/strings.xml index e2c4e548..59befe74 100644 --- a/V2rayNG/app/src/main/res/values-ru/strings.xml +++ b/V2rayNG/app/src/main/res/values-ru/strings.xml @@ -66,6 +66,8 @@ ShortId SpiderX Reserved (необязательно) + локальный адрес IPv4(необязательно) + локальный адрес IPv6(необязательно, используется только в том случае если предпочитаете IPv6) Успешно Ошибка Ничего нет diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index fab44ac3..f3f6ca1c 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -60,6 +60,8 @@ Mã hoá Kiểm soát lưu lượng Reserved (Bổ sung) + địa chỉ cục bộ IPv4(Bổ sung) + địa chỉ cục bộ IPv6(Bổ sung, chỉ được sử dụng khi thích IPv6) Thành công! Đã xảy ra lỗi, vui lòng thử lại! Không có gì ở đây diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index 483fbe1f..e1113fc1 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -60,6 +60,8 @@ 加密方式(encryption) 流控(flow) Reserved(可选) + 本地 IPv4 地址(可选) + 本地 IPv6 地址(可选, 仅 IPv6 优先时使用) 成功 失败 没有数据 diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index de2a4862..13f69607 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -60,6 +60,8 @@ 加密 (encryption) 流程 (flow) Reserved (可選) + 本機 IPv4 位址(可選) + 本機 IPv6 位址(可選, 僅偏好 IPv6 時使用) 成功 失敗 無資料 diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index 532d9fc8..1e217f6e 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -67,6 +67,8 @@ SpiderX SecretKey Reserved(Optional) + local address IPv4(Optional) + local address IPv6(Optional, only used when prefer IPv6) Success Failure There is nothing