Fix wg reconnection problem after awg connection (#696)
* Update Android AWG to 0.2.5
This commit is contained in:
parent
553a6a73dd
commit
10caecbffd
6 changed files with 20 additions and 19 deletions
|
|
@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
|
||||||
|
|
||||||
set(PROJECT AmneziaVPN)
|
set(PROJECT AmneziaVPN)
|
||||||
|
|
||||||
project(${PROJECT} VERSION 4.4.1.3
|
project(${PROJECT} VERSION 4.4.1.4
|
||||||
DESCRIPTION "AmneziaVPN"
|
DESCRIPTION "AmneziaVPN"
|
||||||
HOMEPAGE_URL "https://amnezia.org/"
|
HOMEPAGE_URL "https://amnezia.org/"
|
||||||
)
|
)
|
||||||
|
|
@ -11,7 +11,7 @@ string(TIMESTAMP CURRENT_DATE "%Y-%m-%d")
|
||||||
set(RELEASE_DATE "${CURRENT_DATE}")
|
set(RELEASE_DATE "${CURRENT_DATE}")
|
||||||
|
|
||||||
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
set(APP_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH})
|
||||||
set(APP_ANDROID_VERSION_CODE 48)
|
set(APP_ANDROID_VERSION_CODE 49)
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
set(MZ_PLATFORM_NAME "linux")
|
set(MZ_PLATFORM_NAME "linux")
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 629fdf77735506c904bb1449a3ed73de7d1f93f6
|
Subproject commit ab4e6b680dc3d3d81809886c2c25b77750659c1a
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
package org.amnezia.vpn.protocol.wireguard
|
|
||||||
|
|
||||||
object GoBackend {
|
|
||||||
external fun wgGetConfig(handle: Int): String?
|
|
||||||
external fun wgGetSocketV4(handle: Int): Int
|
|
||||||
external fun wgGetSocketV6(handle: Int): Int
|
|
||||||
external fun wgTurnOff(handle: Int)
|
|
||||||
external fun wgTurnOn(ifName: String, tunFd: Int, settings: String): Int
|
|
||||||
external fun wgVersion(): String
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
package org.amnezia.awg
|
||||||
|
|
||||||
|
object GoBackend {
|
||||||
|
external fun awgGetConfig(handle: Int): String?
|
||||||
|
external fun awgGetSocketV4(handle: Int): Int
|
||||||
|
external fun awgGetSocketV6(handle: Int): Int
|
||||||
|
external fun awgTurnOff(handle: Int)
|
||||||
|
external fun awgTurnOn(ifName: String, tunFd: Int, settings: String): Int
|
||||||
|
external fun awgVersion(): String
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ import android.content.Context
|
||||||
import android.net.VpnService.Builder
|
import android.net.VpnService.Builder
|
||||||
import java.util.TreeMap
|
import java.util.TreeMap
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import org.amnezia.awg.GoBackend
|
||||||
import org.amnezia.vpn.protocol.Protocol
|
import org.amnezia.vpn.protocol.Protocol
|
||||||
import org.amnezia.vpn.protocol.ProtocolState
|
import org.amnezia.vpn.protocol.ProtocolState
|
||||||
import org.amnezia.vpn.protocol.ProtocolState.CONNECTED
|
import org.amnezia.vpn.protocol.ProtocolState.CONNECTED
|
||||||
|
|
@ -61,7 +62,7 @@ open class Wireguard : Protocol() {
|
||||||
override val statistics: Statistics
|
override val statistics: Statistics
|
||||||
get() {
|
get() {
|
||||||
if (tunnelHandle == -1) return Statistics.EMPTY_STATISTICS
|
if (tunnelHandle == -1) return Statistics.EMPTY_STATISTICS
|
||||||
val config = GoBackend.wgGetConfig(tunnelHandle) ?: return Statistics.EMPTY_STATISTICS
|
val config = GoBackend.awgGetConfig(tunnelHandle) ?: return Statistics.EMPTY_STATISTICS
|
||||||
return Statistics.build {
|
return Statistics.build {
|
||||||
var optsCount = 0
|
var optsCount = 0
|
||||||
config.splitToSequence("\n").forEach { line ->
|
config.splitToSequence("\n").forEach { line ->
|
||||||
|
|
@ -156,8 +157,8 @@ open class Wireguard : Protocol() {
|
||||||
if (tunFd == null) {
|
if (tunFd == null) {
|
||||||
throw VpnStartException("Create VPN interface: permission not granted or revoked")
|
throw VpnStartException("Create VPN interface: permission not granted or revoked")
|
||||||
}
|
}
|
||||||
Log.v(TAG, "Wg-go backend ${GoBackend.wgVersion()}")
|
Log.v(TAG, "Wg-go backend ${GoBackend.awgVersion()}")
|
||||||
tunnelHandle = GoBackend.wgTurnOn(ifName, tunFd.detachFd(), config.toWgUserspaceString())
|
tunnelHandle = GoBackend.awgTurnOn(ifName, tunFd.detachFd(), config.toWgUserspaceString())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tunnelHandle < 0) {
|
if (tunnelHandle < 0) {
|
||||||
|
|
@ -165,8 +166,8 @@ open class Wireguard : Protocol() {
|
||||||
throw VpnStartException("Wireguard tunnel creation error")
|
throw VpnStartException("Wireguard tunnel creation error")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!protect(GoBackend.wgGetSocketV4(tunnelHandle)) || !protect(GoBackend.wgGetSocketV6(tunnelHandle))) {
|
if (!protect(GoBackend.awgGetSocketV4(tunnelHandle)) || !protect(GoBackend.awgGetSocketV6(tunnelHandle))) {
|
||||||
GoBackend.wgTurnOff(tunnelHandle)
|
GoBackend.awgTurnOff(tunnelHandle)
|
||||||
tunnelHandle = -1
|
tunnelHandle = -1
|
||||||
throw VpnStartException("Protect VPN interface: permission not granted or revoked")
|
throw VpnStartException("Protect VPN interface: permission not granted or revoked")
|
||||||
}
|
}
|
||||||
|
|
@ -179,7 +180,7 @@ open class Wireguard : Protocol() {
|
||||||
}
|
}
|
||||||
val handleToClose = tunnelHandle
|
val handleToClose = tunnelHandle
|
||||||
tunnelHandle = -1
|
tunnelHandle = -1
|
||||||
GoBackend.wgTurnOff(handleToClose)
|
GoBackend.awgTurnOff(handleToClose)
|
||||||
state.value = DISCONNECTED
|
state.value = DISCONNECTED
|
||||||
}
|
}
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue