summaryrefslogtreecommitdiffhomepage
path: root/android/lib/daemon-grpc/src
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2024-06-03 13:48:17 +0200
committerDavid Göransson <david.goransson@mullvad.net>2024-06-04 08:27:03 +0200
commit270c44a7a5e0f427d2fb4efc3de7a2dda178cb30 (patch)
treed6dfc363ad439b0284100ff6a2500844082c8109 /android/lib/daemon-grpc/src
parent3ac0f264402e42a16f0bd6c76e1a6a67e01ed4ef (diff)
downloadmullvadvpn-270c44a7a5e0f427d2fb4efc3de7a2dda178cb30.tar.xz
mullvadvpn-270c44a7a5e0f427d2fb4efc3de7a2dda178cb30.zip
Add support for UDP-over-TCP port
Diffstat (limited to 'android/lib/daemon-grpc/src')
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt19
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/FromDomain.kt26
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt19
3 files changed, 43 insertions, 21 deletions
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
index 53aefe13db..268f664840 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/ManagementService.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.lib.daemon.grpc
import android.net.LocalSocketAddress
import android.util.Log
import arrow.core.Either
+import arrow.core.raise.either
import arrow.optics.copy
import arrow.optics.dsl.index
import arrow.optics.typeclasses.Index
@@ -68,11 +69,13 @@ import net.mullvad.mullvadvpn.lib.model.GetDeviceListError
import net.mullvad.mullvadvpn.lib.model.GetDeviceStateError
import net.mullvad.mullvadvpn.lib.model.LoginAccountError
import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings as ModelObfuscationSettings
+import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings
import net.mullvad.mullvadvpn.lib.model.Ownership as ModelOwnership
import net.mullvad.mullvadvpn.lib.model.PlayPurchase
import net.mullvad.mullvadvpn.lib.model.PlayPurchaseInitError
import net.mullvad.mullvadvpn.lib.model.PlayPurchasePaymentToken
import net.mullvad.mullvadvpn.lib.model.PlayPurchaseVerifyError
+import net.mullvad.mullvadvpn.lib.model.Port
import net.mullvad.mullvadvpn.lib.model.Providers
import net.mullvad.mullvadvpn.lib.model.QuantumResistantState as ModelQuantumResistantState
import net.mullvad.mullvadvpn.lib.model.RedeemVoucherError
@@ -107,6 +110,7 @@ import net.mullvad.mullvadvpn.lib.model.ownership
import net.mullvad.mullvadvpn.lib.model.providers
import net.mullvad.mullvadvpn.lib.model.relayConstraints
import net.mullvad.mullvadvpn.lib.model.state
+import net.mullvad.mullvadvpn.lib.model.udp2tcp
import net.mullvad.mullvadvpn.lib.model.wireguardConstraints
@Suppress("TooManyFunctions")
@@ -386,6 +390,21 @@ class ManagementService(
.mapLeft(SetObfuscationOptionsError::Unknown)
.mapEmpty()
+ suspend fun setObfuscationPort(
+ portConstraint: Constraint<Port>
+ ): Either<SetObfuscationOptionsError, Unit> = either {
+ val updatedObfuscationSettings =
+ Either.catch {
+ val obfuscationSettings = getSettings().obfuscationSettings
+ ObfuscationSettings.udp2tcp.modify(obfuscationSettings) {
+ it.copy(port = portConstraint)
+ }
+ }
+ .mapLeft(SetObfuscationOptionsError::Unknown)
+ .bind()
+ setObfuscationOptions(updatedObfuscationSettings).bind()
+ }
+
suspend fun setAutoConnect(isEnabled: Boolean): Either<SetAutoConnectError, Unit> =
Either.catch { grpc.setAutoConnect(BoolValue.of(isEnabled)) }
.mapLeft(SetAutoConnectError::Unknown)
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/FromDomain.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/FromDomain.kt
index df4625228f..4efd8c452e 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/FromDomain.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/FromDomain.kt
@@ -17,6 +17,8 @@ import net.mullvad.mullvadvpn.lib.model.Port
import net.mullvad.mullvadvpn.lib.model.Providers
import net.mullvad.mullvadvpn.lib.model.RelayItemId
import net.mullvad.mullvadvpn.lib.model.RelaySettings
+import net.mullvad.mullvadvpn.lib.model.SelectedObfuscation
+import net.mullvad.mullvadvpn.lib.model.Udp2TcpObfuscationSettings
import net.mullvad.mullvadvpn.lib.model.WireguardConstraints
internal fun Constraint<RelayItemId>.fromDomain(): ManagementInterface.LocationConstraint =
@@ -70,10 +72,30 @@ internal fun DefaultDnsOptions.fromDomain(): ManagementInterface.DefaultDnsOptio
internal fun ObfuscationSettings.fromDomain(): ManagementInterface.ObfuscationSettings =
ManagementInterface.ObfuscationSettings.newBuilder()
- .setSelectedObfuscation(selectedObfuscation.toDomain())
- .setUdp2Tcp(udp2tcp.toDomain())
+ .setSelectedObfuscation(selectedObfuscation.fromDomain())
+ .setUdp2Tcp(udp2tcp.fromDomain())
.build()
+internal fun SelectedObfuscation.fromDomain():
+ ManagementInterface.ObfuscationSettings.SelectedObfuscation =
+ when (this) {
+ SelectedObfuscation.Udp2Tcp ->
+ ManagementInterface.ObfuscationSettings.SelectedObfuscation.UDP2TCP
+ SelectedObfuscation.Auto -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO
+ SelectedObfuscation.Off -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF
+ }
+
+internal fun Udp2TcpObfuscationSettings.fromDomain():
+ ManagementInterface.Udp2TcpObfuscationSettings =
+ when (val port = port) {
+ is Constraint.Any ->
+ ManagementInterface.Udp2TcpObfuscationSettings.newBuilder().clearPort().build()
+ is Constraint.Only ->
+ ManagementInterface.Udp2TcpObfuscationSettings.newBuilder()
+ .setPort(port.value.value)
+ .build()
+ }
+
internal fun GeoLocationId.fromDomain(): ManagementInterface.GeographicLocationConstraint =
ManagementInterface.GeographicLocationConstraint.newBuilder()
.apply {
diff --git a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt
index 636e6c5176..0fe64e09f2 100644
--- a/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt
+++ b/android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt
@@ -409,25 +409,6 @@ internal fun QuantumResistantState.toDomain(): ManagementInterface.QuantumResist
)
.build()
-internal fun SelectedObfuscation.toDomain():
- ManagementInterface.ObfuscationSettings.SelectedObfuscation =
- when (this) {
- SelectedObfuscation.Udp2Tcp ->
- ManagementInterface.ObfuscationSettings.SelectedObfuscation.UDP2TCP
- SelectedObfuscation.Auto -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO
- SelectedObfuscation.Off -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF
- }
-
-internal fun Udp2TcpObfuscationSettings.toDomain(): ManagementInterface.Udp2TcpObfuscationSettings =
- when (val port = port) {
- is Constraint.Any ->
- ManagementInterface.Udp2TcpObfuscationSettings.newBuilder().clearPort().build()
- is Constraint.Only ->
- ManagementInterface.Udp2TcpObfuscationSettings.newBuilder()
- .setPort(port.value.value)
- .build()
- }
-
internal fun ManagementInterface.AppVersionInfo.toDomain(): AppVersionInfo =
AppVersionInfo(
supported = supported,