summaryrefslogtreecommitdiffhomepage
path: root/android/lib
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-10-02 08:49:41 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-10-09 11:02:02 +0200
commit8cfcae2c7d7148d55a4812df420a0aa6a9d4d7d4 (patch)
tree3ccef8b1ff7f1619df798289acad0427a23e7cdc /android/lib
parentcc3d7a2295765fb47949fc73b8bcf7cb76cea552 (diff)
downloadmullvadvpn-8cfcae2c7d7148d55a4812df420a0aa6a9d4d7d4.tar.xz
mullvadvpn-8cfcae2c7d7148d55a4812df420a0aa6a9d4d7d4.zip
Implement LWO on android
Diffstat (limited to 'android/lib')
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/FromDomain.kt1
-rw-r--r--android/lib/daemon-grpc/src/main/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/mapper/ToDomain.kt9
-rw-r--r--android/lib/daemon-grpc/src/test/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/RelayNameComparatorTest.kt20
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/FeatureIndicator.kt1
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt1
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationType.kt1
-rw-r--r--android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt1
-rw-r--r--android/lib/resource/src/main/res/values/strings_non_translatable.xml1
-rw-r--r--android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/relaylist/RelayItemPreviewData.kt1
-rw-r--r--android/lib/ui/tag/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/tag/TestTagConstants.kt2
10 files changed, 32 insertions, 6 deletions
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 2424ff00a7..5eb933e687 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
@@ -93,6 +93,7 @@ internal fun ObfuscationMode.fromDomain():
ObfuscationMode.Shadowsocks ->
ManagementInterface.ObfuscationSettings.SelectedObfuscation.SHADOWSOCKS
ObfuscationMode.Quic -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.QUIC
+ ObfuscationMode.Lwo -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.LWO
ObfuscationMode.Auto -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO
ObfuscationMode.Off -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF
}
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 65ab420be3..26207c5d57 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
@@ -226,8 +226,7 @@ internal fun ManagementInterface.ObfuscationEndpoint.ObfuscationType.toDomain():
ManagementInterface.ObfuscationEndpoint.ObfuscationType.SHADOWSOCKS ->
ObfuscationType.Shadowsocks
ManagementInterface.ObfuscationEndpoint.ObfuscationType.QUIC -> ObfuscationType.Quic
- ManagementInterface.ObfuscationEndpoint.ObfuscationType.LWO ->
- throw IllegalArgumentException("Unsupported obfuscation type")
+ ManagementInterface.ObfuscationEndpoint.ObfuscationType.LWO -> ObfuscationType.Lwo
ManagementInterface.ObfuscationEndpoint.ObfuscationType.UNRECOGNIZED ->
throw IllegalArgumentException("Unrecognized obfuscation type")
}
@@ -434,8 +433,7 @@ internal fun ManagementInterface.ObfuscationSettings.SelectedObfuscation.toDomai
ManagementInterface.ObfuscationSettings.SelectedObfuscation.SHADOWSOCKS ->
ObfuscationMode.Shadowsocks
ManagementInterface.ObfuscationSettings.SelectedObfuscation.QUIC -> ObfuscationMode.Quic
- ManagementInterface.ObfuscationSettings.SelectedObfuscation.LWO ->
- throw IllegalArgumentException("Unsupported obfuscation type")
+ ManagementInterface.ObfuscationSettings.SelectedObfuscation.LWO -> ObfuscationMode.Lwo
ManagementInterface.ObfuscationSettings.SelectedObfuscation.UNRECOGNIZED ->
throw IllegalArgumentException("Unrecognized selected obfuscation")
}
@@ -606,6 +604,7 @@ internal fun ManagementInterface.Relay.toDomain(
} else {
null
},
+ lwo = endpointData.wireguard.lwo,
)
private fun ManagementInterface.Relay.RelayData.Wireguard.Quic.toDomain(): Quic =
@@ -730,7 +729,7 @@ internal fun ManagementInterface.FeatureIndicator.toDomain() =
ManagementInterface.FeatureIndicator.MULTIHOP -> FeatureIndicator.MULTIHOP
ManagementInterface.FeatureIndicator.DAITA_MULTIHOP -> FeatureIndicator.DAITA_MULTIHOP
ManagementInterface.FeatureIndicator.QUIC -> FeatureIndicator.QUIC
- ManagementInterface.FeatureIndicator.LWO,
+ ManagementInterface.FeatureIndicator.LWO -> FeatureIndicator.LWO
ManagementInterface.FeatureIndicator.LOCKDOWN_MODE,
ManagementInterface.FeatureIndicator.BRIDGE_MODE,
ManagementInterface.FeatureIndicator.CUSTOM_MSS_FIX,
diff --git a/android/lib/daemon-grpc/src/test/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/RelayNameComparatorTest.kt b/android/lib/daemon-grpc/src/test/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/RelayNameComparatorTest.kt
index 310b2ab1fd..e6b110c5b3 100644
--- a/android/lib/daemon-grpc/src/test/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/RelayNameComparatorTest.kt
+++ b/android/lib/daemon-grpc/src/test/kotlin/net/mullvad/mullvadvpn/lib/daemon/grpc/RelayNameComparatorTest.kt
@@ -27,6 +27,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay10 =
RelayItem.Location.Relay(
@@ -36,6 +37,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
relay9 assertOrderBothDirection relay10
@@ -51,6 +53,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay9b =
RelayItem.Location.Relay(
@@ -60,6 +63,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
assertTrue(RelayNameComparator.compare(relay9a, relay9b) == 0)
@@ -76,6 +80,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay1 =
RelayItem.Location.Relay(
@@ -85,6 +90,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay3 =
RelayItem.Location.Relay(
@@ -94,6 +100,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay100 =
RelayItem.Location.Relay(
@@ -103,6 +110,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
relay001 assertOrderBothDirection relay1
@@ -121,6 +129,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay9b =
RelayItem.Location.Relay(
@@ -130,6 +139,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
assertTrue(RelayNameComparator.compare(relay9a, relay9b) == 0)
@@ -146,6 +156,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay005 =
RelayItem.Location.Relay(
@@ -155,6 +166,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
relay001 assertOrderBothDirection relay005
@@ -170,6 +182,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relayAr8 =
RelayItem.Location.Relay(
@@ -179,6 +192,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relaySe5 =
RelayItem.Location.Relay(
@@ -188,6 +202,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relaySe10 =
RelayItem.Location.Relay(
@@ -197,6 +212,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
relayAr2 assertOrderBothDirection relayAr8
@@ -214,6 +230,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay2w =
RelayItem.Location.Relay(
@@ -223,6 +240,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
relay2c assertOrderBothDirection relay2w
@@ -238,6 +256,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
val relay22b =
RelayItem.Location.Relay(
@@ -247,6 +266,7 @@ class RelayNameComparatorTest {
ownership = Ownership.MullvadOwned,
daita = false,
quic = null,
+ lwo = false,
)
relay22a assertOrderBothDirection relay22b
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
index 6d7951749b..84f516f7bd 100644
--- 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
@@ -10,6 +10,7 @@ enum class FeatureIndicator {
UDP_2_TCP,
SHADOWSOCKS,
QUIC,
+ LWO,
LAN_SHARING,
DNS_CONTENT_BLOCKERS,
CUSTOM_DNS,
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt
index 8926ded829..bdf8d28c5c 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt
@@ -6,4 +6,5 @@ enum class ObfuscationMode {
Udp2Tcp,
Shadowsocks,
Quic,
+ Lwo,
}
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationType.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationType.kt
index 5eb0ad5548..e84d6ec769 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationType.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationType.kt
@@ -4,4 +4,5 @@ enum class ObfuscationType {
Udp2Tcp,
Shadowsocks,
Quic,
+ Lwo,
}
diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt
index 197e8e95ce..492069a62b 100644
--- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt
+++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/RelayItem.kt
@@ -86,6 +86,7 @@ sealed interface RelayItem {
override val active: Boolean,
val daita: Boolean,
val quic: Quic?,
+ val lwo: Boolean,
) : Location {
override val name: String = id.code
override val hasChildren: Boolean = false
diff --git a/android/lib/resource/src/main/res/values/strings_non_translatable.xml b/android/lib/resource/src/main/res/values/strings_non_translatable.xml
index 3595fe7096..0c87a19c25 100644
--- a/android/lib/resource/src/main/res/values/strings_non_translatable.xml
+++ b/android/lib/resource/src/main/res/values/strings_non_translatable.xml
@@ -12,6 +12,7 @@
<string name="socks5_remote" translatable="false">SOCKS5</string>
<string name="shadowsocks" translatable="false">Shadowsocks</string>
<string name="quic" translatable="false">QUIC</string>
+ <string name="lwo" translatable="false">LWO</string>
<string name="local_network_sharing_ip_ranges" translatable="false">
<![CDATA[<ul><li>10.0.0.0/8</li><li>172.16.0.0/12</li><li>192.168.0.0/16</li><li>169.254.0.0/16</li><li>fe80::/10</li><li>fc00::/7</li></ul>]]>
</string>
diff --git a/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/relaylist/RelayItemPreviewData.kt b/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/relaylist/RelayItemPreviewData.kt
index 2e4e228439..be4c5d4539 100644
--- a/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/relaylist/RelayItemPreviewData.kt
+++ b/android/lib/ui/component/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/component/relaylist/RelayItemPreviewData.kt
@@ -52,6 +52,7 @@ private fun generateRelayItemRelay(
ownership = Ownership.MullvadOwned,
daita = daita,
quic = null,
+ lwo = false,
)
private fun String.generateCountryCode() =
diff --git a/android/lib/ui/tag/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/tag/TestTagConstants.kt b/android/lib/ui/tag/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/tag/TestTagConstants.kt
index 9b7be4dc07..419459031d 100644
--- a/android/lib/ui/tag/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/tag/TestTagConstants.kt
+++ b/android/lib/ui/tag/src/main/kotlin/net/mullvad/mullvadvpn/lib/ui/tag/TestTagConstants.kt
@@ -32,8 +32,8 @@ const val WIREGUARD_OBFUSCATION_SHADOWSOCKS_CELL_TEST_TAG =
"wireguard_obfuscation_shadowsocks_cell_test_tag"
const val WIREGUARD_OBFUSCATION_UDP_OVER_TCP_CELL_TEST_TAG =
"wireguard_obfuscation_udp_over_tcp_cell_test_tag"
-
const val WIREGUARD_OBFUSCATION_QUIC_CELL_TEST_TAG = "wireguard_obfuscation_quic_cell_test_tag"
+const val WIREGUARD_OBFUSCATION_LWO_CELL_TEST_TAG = "wireguard_obfuscation_lwo_cell_test_tag"
// Account screen
const val MANAGE_DEVICES_BUTTON_TEST_TAG = "manage_devices_button_test_tag"