summaryrefslogtreecommitdiffhomepage
path: root/android/lib/talpid
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-11-18 14:23:05 +0100
committerDavid Göransson <david.goransson@mullvad.net>2024-11-27 09:00:18 +0100
commit1bb7fc7ebaa2837ed9f9d28c2bb5a6fd91033988 (patch)
treea83565926fb753a2dd9fd24f0e2bd07262e4507e /android/lib/talpid
parent0d155385e1cb7075012bd270de0398d83a438bc5 (diff)
downloadmullvadvpn-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')
-rw-r--r--android/lib/talpid/build.gradle.kts2
-rw-r--r--android/lib/talpid/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt18
-rw-r--r--android/lib/talpid/src/main/kotlin/net/mullvad/talpid/model/CreateTunResult.kt10
-rw-r--r--android/lib/talpid/src/main/kotlin/net/mullvad/talpid/util/InetAddressExt.kt10
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
-}