summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-08-26 10:35:29 +0200
committerAlbin <albin@mullvad.net>2024-08-26 12:44:32 +0200
commit4cefa1584d102d47110606b9797f78801103f35f (patch)
treeea679771695dc63c0d6b4a6906d90998c2eaabcd /android/lib
parentec2098841f78621b31708ab6427c740f7e42ce5a (diff)
downloadmullvadvpn-4cefa1584d102d47110606b9797f78801103f35f.tar.xz
mullvadvpn-4cefa1584d102d47110606b9797f78801103f35f.zip
Add support for feature indicators for tunnel state
Diffstat (limited to 'android/lib')
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt32
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/FeatureIndicator.kt20
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt14
3 files changed, 60 insertions, 6 deletions
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 9baa426696..ca4e924b6c 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
@@ -34,6 +34,7 @@ import net.mullvad.mullvadvpn.lib.model.DnsState
import net.mullvad.mullvadvpn.lib.model.Endpoint
import net.mullvad.mullvadvpn.lib.model.ErrorState
import net.mullvad.mullvadvpn.lib.model.ErrorStateCause
+import net.mullvad.mullvadvpn.lib.model.FeatureIndicator
import net.mullvad.mullvadvpn.lib.model.GeoIpLocation
import net.mullvad.mullvadvpn.lib.model.GeoLocationId
import net.mullvad.mullvadvpn.lib.model.Mtu
@@ -89,7 +90,8 @@ internal fun ManagementInterface.TunnelState.toDomain(): TunnelState =
if (hasLocation()) {
location.toDomain()
} else null
- }
+ },
+ featureIndicators = connected.featureIndicators.toDomain()
)
ManagementInterface.TunnelState.StateCase.CONNECTED ->
TunnelState.Connected(
@@ -101,7 +103,8 @@ internal fun ManagementInterface.TunnelState.toDomain(): TunnelState =
} else {
null
}
- }
+ },
+ featureIndicators = connected.featureIndicators.toDomain()
)
ManagementInterface.TunnelState.StateCase.DISCONNECTING ->
TunnelState.Disconnecting(
@@ -578,3 +581,28 @@ internal fun ManagementInterface.Socks5Remote.toDomain(): ApiAccessMethod.Custom
internal fun ManagementInterface.SocksAuth.toDomain(): SocksAuth =
SocksAuth(username = username, password = password)
+
+internal fun ManagementInterface.FeatureIndicators.toDomain(): List<FeatureIndicator> =
+ this.activeFeaturesList.map { it.toDomain() }
+
+internal fun ManagementInterface.FeatureIndicator.toDomain() =
+ when (this) {
+ ManagementInterface.FeatureIndicator.QUANTUM_RESISTANCE ->
+ FeatureIndicator.QUANTUM_RESISTANCE
+ ManagementInterface.FeatureIndicator.SPLIT_TUNNELING -> FeatureIndicator.SPLIT_TUNNELING
+ ManagementInterface.FeatureIndicator.UDP_2_TCP -> FeatureIndicator.UDP_2_TCP
+ ManagementInterface.FeatureIndicator.LAN_SHARING -> FeatureIndicator.LAN_SHARING
+ ManagementInterface.FeatureIndicator.DNS_CONTENT_BLOCKERS ->
+ FeatureIndicator.DNS_CONTENT_BLOCKERS
+ ManagementInterface.FeatureIndicator.CUSTOM_DNS -> FeatureIndicator.CUSTOM_DNS
+ ManagementInterface.FeatureIndicator.SERVER_IP_OVERRIDE ->
+ FeatureIndicator.SERVER_IP_OVERRIDE
+ ManagementInterface.FeatureIndicator.CUSTOM_MTU -> FeatureIndicator.CUSTOM_MTU
+ ManagementInterface.FeatureIndicator.LOCKDOWN_MODE,
+ ManagementInterface.FeatureIndicator.SHADOWSOCKS,
+ ManagementInterface.FeatureIndicator.MULTIHOP,
+ ManagementInterface.FeatureIndicator.BRIDGE_MODE,
+ ManagementInterface.FeatureIndicator.CUSTOM_MSS_FIX,
+ ManagementInterface.FeatureIndicator.DAITA,
+ ManagementInterface.FeatureIndicator.UNRECOGNIZED -> error("Feature not supported")
+ }
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/FeatureIndicator.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/FeatureIndicator.kt
new file mode 100644
index 0000000000..7ad0b3ab69
--- /dev/null
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/FeatureIndicator.kt
@@ -0,0 +1,20 @@
+package net.mullvad.mullvadvpn.lib.model
+
+enum class FeatureIndicator {
+ QUANTUM_RESISTANCE,
+ SPLIT_TUNNELING,
+ UDP_2_TCP,
+ LAN_SHARING,
+ DNS_CONTENT_BLOCKERS,
+ CUSTOM_DNS,
+ SERVER_IP_OVERRIDE,
+ CUSTOM_MTU,
+ // Currently not supported
+ // LOCKDOWN_MODE,
+ // SHADOWSOCKS,
+ // MULTIHOP,
+ // BRIDGE_MODE,
+ // CUSTOM_MSS_FIX,
+ // DAITA,
+ // UNRECOGNIZED,
+}
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt
index 3fae41802a..8ed43bd294 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/TunnelState.kt
@@ -3,11 +3,17 @@ package net.mullvad.mullvadvpn.lib.model
sealed class TunnelState {
data class Disconnected(val location: GeoIpLocation? = null) : TunnelState()
- data class Connecting(val endpoint: TunnelEndpoint?, val location: GeoIpLocation?) :
- TunnelState()
+ data class Connecting(
+ val endpoint: TunnelEndpoint?,
+ val location: GeoIpLocation?,
+ val featureIndicators: List<FeatureIndicator>
+ ) : TunnelState()
- data class Connected(val endpoint: TunnelEndpoint, val location: GeoIpLocation?) :
- TunnelState()
+ data class Connected(
+ val endpoint: TunnelEndpoint,
+ val location: GeoIpLocation?,
+ val featureIndicators: List<FeatureIndicator>
+ ) : TunnelState()
data class Disconnecting(val actionAfterDisconnect: ActionAfterDisconnect) : TunnelState()