From 7c38ad7c574305978b78cf349bd7678e7aa3dbd0 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 9 May 2026 16:48:09 +0800 Subject: [PATCH] Improve WireGuard addresses --- .../com/v2ray/ang/core/CoreOutboundBuilder.kt | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt index b14387cd2..6b017264e 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt @@ -72,18 +72,6 @@ object CoreOutboundBuilder { outbound.mux?.concurrency = -1 } - if (protocol.equals(EConfigType.WIREGUARD.name, true)) { - var localTunAddr = if (outbound.settings?.address == null) { - listOf(AppConfig.WIREGUARD_LOCAL_ADDRESS_V4) - } else { - outbound.settings?.address as List<*> - } - if (MmkvManager.decodeSettingsBool(AppConfig.PREF_IPV6_ENABLED) != true) { - localTunAddr = listOf(localTunAddr.first()) - } - outbound.settings?.address = localTunAddr - } - } catch (e: Exception) { LogUtil.e(AppConfig.TAG, "Failed to update outbound with global settings", e) return false @@ -267,9 +255,23 @@ object CoreOutboundBuilder { private fun toOutboundWireguard(profileItem: ProfileItem): OutboundBean? { val outboundBean = createInitOutbound(EConfigType.WIREGUARD) + val rawAddresses = profileItem.localAddress + ?.split(",") + ?.map { it.trim() } + ?.filter { it.isNotEmpty() } + ?.ifEmpty { null } + ?: listOf(AppConfig.WIREGUARD_LOCAL_ADDRESS_V4) + + val addresses = if (MmkvManager.decodeSettingsBool(AppConfig.PREF_IPV6_ENABLED) == true) { + rawAddresses + } else { + val ipv4Addresses = rawAddresses.filter { !it.contains(":") } + ipv4Addresses.ifEmpty { listOf(AppConfig.WIREGUARD_LOCAL_ADDRESS_V4) } + } + outboundBean?.settings?.let { wireguard -> wireguard.secretKey = profileItem.secretKey - wireguard.address = (profileItem.localAddress ?: AppConfig.WIREGUARD_LOCAL_ADDRESS_V4).split(",") + wireguard.address = addresses wireguard.peers?.firstOrNull()?.let { peer -> peer.publicKey = profileItem.publicKey.orEmpty() peer.preSharedKey = profileItem.preSharedKey?.nullIfBlank()