diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2025-10-02 08:49:41 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2025-10-09 11:02:02 +0200 |
| commit | 8cfcae2c7d7148d55a4812df420a0aa6a9d4d7d4 (patch) | |
| tree | 3ccef8b1ff7f1619df798289acad0427a23e7cdc /android/lib | |
| parent | cc3d7a2295765fb47949fc73b8bcf7cb76cea552 (diff) | |
| download | mullvadvpn-8cfcae2c7d7148d55a4812df420a0aa6a9d4d7d4.tar.xz mullvadvpn-8cfcae2c7d7148d55a4812df420a0aa6a9d4d7d4.zip | |
Implement LWO on android
Diffstat (limited to 'android/lib')
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" |
