diff options
| author | David Göransson <david.goransson@mullvad.net> | 2024-11-18 14:23:05 +0100 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2024-11-27 09:00:18 +0100 |
| commit | 1bb7fc7ebaa2837ed9f9d28c2bb5a6fd91033988 (patch) | |
| tree | a83565926fb753a2dd9fd24f0e2bd07262e4507e /android/lib/talpid | |
| parent | 0d155385e1cb7075012bd270de0398d83a438bc5 (diff) | |
| download | mullvadvpn-1bb7fc7ebaa2837ed9f9d28c2bb5a6fd91033988.tar.xz mullvadvpn-1bb7fc7ebaa2837ed9f9d28c2bb5a6fd91033988.zip | |
Handle legacy always-on vpn profiles
Co-authored-by: Jonatan Rhodin <jonatan.rhodin@mullvad.net>
Diffstat (limited to 'android/lib/talpid')
4 files changed, 24 insertions, 16 deletions
diff --git a/android/lib/talpid/build.gradle.kts b/android/lib/talpid/build.gradle.kts index c53c2add28..24ba625ff2 100644 --- a/android/lib/talpid/build.gradle.kts +++ b/android/lib/talpid/build.gradle.kts @@ -30,9 +30,11 @@ android { dependencies { implementation(projects.lib.model) + implementation(projects.lib.common) implementation(libs.androidx.ktx) implementation(libs.androidx.lifecycle.service) + implementation(libs.arrow) implementation(libs.kermit) implementation(libs.kotlin.stdlib) implementation(libs.kotlinx.coroutines.android) diff --git a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt index dc1f8d23ca..74d44005cd 100644 --- a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt +++ b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt @@ -10,6 +10,8 @@ import java.net.Inet4Address import java.net.Inet6Address import java.net.InetAddress import kotlin.properties.Delegates.observable +import net.mullvad.mullvadvpn.lib.common.util.prepareVpnSafe +import net.mullvad.mullvadvpn.lib.model.PrepareError import net.mullvad.talpid.model.CreateTunResult import net.mullvad.talpid.model.TunConfig import net.mullvad.talpid.util.TalpidSdkUtils.setMeteredIfSupported @@ -76,10 +78,11 @@ open class TalpidVpnService : LifecycleVpnService() { // Function is to be cleaned up and lint suppression to be removed. @Suppress("ReturnCount") private fun createTun(config: TunConfig): CreateTunResult { - if (prepare(this) != null) { - // VPN permission wasn't granted - return CreateTunResult.PermissionDenied - } + prepareVpnSafe() + .mapLeft { it.toCreateTunResult() } + .onLeft { + return it + } val invalidDnsServerAddresses = ArrayList<InetAddress>() @@ -149,6 +152,13 @@ open class TalpidVpnService : LifecycleVpnService() { return protect(socket) } + private fun PrepareError.toCreateTunResult() = + when (this) { + is PrepareError.OtherLegacyAlwaysOnVpn -> CreateTunResult.OtherLegacyAlwaysOnVpn + is PrepareError.NotPrepared -> CreateTunResult.NotPrepared + is PrepareError.OtherAlwaysOnApp -> CreateTunResult.OtherAlwaysOnApp(appName) + } + private fun InetAddress.prefixLength(): Int = when (this) { is Inet4Address -> IPV4_PREFIX_LENGTH diff --git a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/model/CreateTunResult.kt b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/model/CreateTunResult.kt index 089112e3ab..3cd73685f7 100644 --- a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/model/CreateTunResult.kt +++ b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/model/CreateTunResult.kt @@ -17,7 +17,13 @@ sealed class CreateTunResult { get() = true } - data object PermissionDenied : CreateTunResult() - + // Establish error data object TunnelDeviceError : CreateTunResult() + + // Prepare errors + data object OtherLegacyAlwaysOnVpn : CreateTunResult() + + data class OtherAlwaysOnApp(val appName: String) : CreateTunResult() + + data object NotPrepared : CreateTunResult() } diff --git a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/util/InetAddressExt.kt b/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/util/InetAddressExt.kt deleted file mode 100644 index d310deb884..0000000000 --- a/android/lib/talpid/src/main/kotlin/net/mullvad/talpid/util/InetAddressExt.kt +++ /dev/null @@ -1,10 +0,0 @@ -package net.mullvad.talpid.util - -import java.net.InetAddress - -fun InetAddress.addressString(): String { - val hostNameAndAddress = this.toString().split('/', limit = 2) - val address = hostNameAndAddress[1] - - return address -} |
