diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-10-03 15:06:03 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-10-09 16:20:54 +0200 |
| commit | 892da35cbc36db7b733fb4416b5c16189571896e (patch) | |
| tree | 358e2ad6f688943568010fe221f8199413c421c0 /android/lib | |
| parent | 0962150429d7fce47c33e6dafe3a195e890eab7f (diff) | |
| download | mullvadvpn-892da35cbc36db7b733fb4416b5c16189571896e.tar.xz mullvadvpn-892da35cbc36db7b733fb4416b5c16189571896e.zip | |
Add support for mutlihop communication with daemon
Diffstat (limited to 'android/lib')
5 files changed, 52 insertions, 24 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 024091c9dc..42bdc56a6c 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 @@ -120,18 +120,19 @@ import net.mullvad.mullvadvpn.lib.model.UpdateApiAccessMethodError import net.mullvad.mullvadvpn.lib.model.UpdateCustomListError import net.mullvad.mullvadvpn.lib.model.VoucherCode import net.mullvad.mullvadvpn.lib.model.WebsiteAuthToken -import net.mullvad.mullvadvpn.lib.model.WireguardConstraints as ModelWireguardConstraints import net.mullvad.mullvadvpn.lib.model.WireguardEndpointData as ModelWireguardEndpointData import net.mullvad.mullvadvpn.lib.model.addresses import net.mullvad.mullvadvpn.lib.model.customOptions import net.mullvad.mullvadvpn.lib.model.location import net.mullvad.mullvadvpn.lib.model.ownership +import net.mullvad.mullvadvpn.lib.model.port import net.mullvad.mullvadvpn.lib.model.providers import net.mullvad.mullvadvpn.lib.model.relayConstraints import net.mullvad.mullvadvpn.lib.model.selectedObfuscationMode import net.mullvad.mullvadvpn.lib.model.shadowsocks import net.mullvad.mullvadvpn.lib.model.state import net.mullvad.mullvadvpn.lib.model.udp2tcp +import net.mullvad.mullvadvpn.lib.model.useMultihop import net.mullvad.mullvadvpn.lib.model.wireguardConstraints @Suppress("TooManyFunctions") @@ -591,19 +592,6 @@ class ManagementService( } .mapEmpty() - suspend fun setWireguardConstraints( - value: ModelWireguardConstraints - ): Either<SetWireguardConstraintsError, Unit> = - Either.catch { - val relaySettings = getSettings().relaySettings - val updated = - RelaySettings.relayConstraints.wireguardConstraints.set(relaySettings, value) - grpc.setRelaySettings(updated.fromDomain()) - } - .onLeft { Logger.e("Set wireguard constraints error") } - .mapLeft(SetWireguardConstraintsError::Unknown) - .mapEmpty() - suspend fun setOwnershipAndProviders( ownershipConstraint: Constraint<ModelOwnership>, providersConstraint: Constraint<Providers>, @@ -754,6 +742,36 @@ class ManagementService( either { ensure(result.value) { TestApiAccessMethodError.CouldNotAccess } } } + suspend fun setWireguardPort( + port: Constraint<Port> + ): Either<SetWireguardConstraintsError, Unit> = + Either.catch { + val relaySettings = getSettings().relaySettings + val updated = + RelaySettings.relayConstraints.wireguardConstraints.port.set( + relaySettings, + port, + ) + grpc.setRelaySettings(updated.fromDomain()) + } + .onLeft { Logger.e("Set wireguard port error") } + .mapLeft(SetWireguardConstraintsError::Unknown) + .mapEmpty() + + suspend fun setMultihop(enabled: Boolean): Either<SetWireguardConstraintsError, Unit> = + Either.catch { + val relaySettings = getSettings().relaySettings + val updated = + RelaySettings.relayConstraints.wireguardConstraints.useMultihop.set( + relaySettings, + enabled, + ) + grpc.setRelaySettings(updated.fromDomain()) + } + .onLeft { Logger.e("Set multihop error") } + .mapLeft(SetWireguardConstraintsError::Unknown) + .mapEmpty() + private fun <A> Either<A, Empty>.mapEmpty() = map {} private inline fun <B, C> Either<Throwable, B>.mapLeftStatus( 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 84a826f104..817418e1fc 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 @@ -18,7 +18,6 @@ import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings import net.mullvad.mullvadvpn.lib.model.Ownership import net.mullvad.mullvadvpn.lib.model.PlayPurchase import net.mullvad.mullvadvpn.lib.model.PlayPurchasePaymentToken -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 @@ -126,13 +125,16 @@ internal fun CustomList.fromDomain(): ManagementInterface.CustomList = .build() internal fun WireguardConstraints.fromDomain(): ManagementInterface.WireguardConstraints = - when (port) { - is Constraint.Any -> ManagementInterface.WireguardConstraints.newBuilder().build() - is Constraint.Only -> - ManagementInterface.WireguardConstraints.newBuilder() - .setPort((port as Constraint.Only<Port>).value.value) - .build() - } + ManagementInterface.WireguardConstraints.newBuilder() + .setUseMultihop(useMultihop) + .setEntryLocation(entryLocation.fromDomain()) + .apply { + when (val port = this@fromDomain.port) { + is Constraint.Any -> clearPort() + is Constraint.Only -> setPort(port.value.value) + } + } + .build() internal fun Ownership.fromDomain(): ManagementInterface.Ownership = when (this) { 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 2f6a08eede..bb7fb83fa6 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 @@ -137,6 +137,7 @@ internal fun ManagementInterface.GeoIpLocation.toDomain(): GeoIpLocation = latitude = latitude, longitude = longitude, hostname = if (hasHostname()) hostname else null, + entryHostname = if (hasEntryHostname()) entryHostname else null, ) internal fun ManagementInterface.TunnelEndpoint.toDomain(): TunnelEndpoint = @@ -320,7 +321,9 @@ internal fun ManagementInterface.WireguardConstraints.toDomain(): WireguardConst Constraint.Only(Port(port)) } else { Constraint.Any - } + }, + useMultihop = useMultihop, + entryLocation = entryLocation.toDomain(), ) internal fun ManagementInterface.Ownership.toDomain(): Constraint<Ownership> = diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GeoIpLocation.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GeoIpLocation.kt index d312382a02..8bf50613ba 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GeoIpLocation.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/GeoIpLocation.kt @@ -12,6 +12,7 @@ data class GeoIpLocation( val latitude: Double, val longitude: Double, val hostname: String?, + val entryHostname: String?, ) { companion object } diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardConstraints.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardConstraints.kt index 8affb81077..7af0144cf4 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardConstraints.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardConstraints.kt @@ -3,6 +3,10 @@ package net.mullvad.mullvadvpn.lib.model import arrow.optics.optics @optics -data class WireguardConstraints(val port: Constraint<Port>) { +data class WireguardConstraints( + val port: Constraint<Port>, + val useMultihop: Boolean, + val entryLocation: Constraint<RelayItemId>, +) { companion object } |
