diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-09-17 15:34:41 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-09-17 15:34:41 +0200 |
| commit | 95cd7d3e57fe08a93068c34d069d259c9d58dddd (patch) | |
| tree | e1a608d11a51fa2246002695b5ecaed9c71f1da5 /android/lib | |
| parent | 196061b0c06c031d3e19b4bfa13268010e8a4e2c (diff) | |
| download | mullvadvpn-95cd7d3e57fe08a93068c34d069d259c9d58dddd.tar.xz mullvadvpn-95cd7d3e57fe08a93068c34d069d259c9d58dddd.zip | |
Implement wireguard over shadowsocks
Diffstat (limited to 'android/lib')
30 files changed, 84 insertions, 51 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 f444edce39..514d4f83aa 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 @@ -81,6 +81,7 @@ import net.mullvad.mullvadvpn.lib.model.LoginAccountError import net.mullvad.mullvadvpn.lib.model.LogoutAccountError import net.mullvad.mullvadvpn.lib.model.NameAlreadyExists import net.mullvad.mullvadvpn.lib.model.NewAccessMethodSetting +import net.mullvad.mullvadvpn.lib.model.ObfuscationMode import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings import net.mullvad.mullvadvpn.lib.model.Ownership as ModelOwnership import net.mullvad.mullvadvpn.lib.model.PlayPurchase @@ -100,7 +101,6 @@ import net.mullvad.mullvadvpn.lib.model.RelayList import net.mullvad.mullvadvpn.lib.model.RelaySettings import net.mullvad.mullvadvpn.lib.model.RemoveApiAccessMethodError import net.mullvad.mullvadvpn.lib.model.RemoveSplitTunnelingAppError -import net.mullvad.mullvadvpn.lib.model.SelectedObfuscation import net.mullvad.mullvadvpn.lib.model.SetAllowLanError import net.mullvad.mullvadvpn.lib.model.SetApiAccessMethodError import net.mullvad.mullvadvpn.lib.model.SetAutoConnectError @@ -129,7 +129,8 @@ import net.mullvad.mullvadvpn.lib.model.location 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.selectedObfuscation +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.wireguardConstraints @@ -460,12 +461,10 @@ class ManagementService( .mapLeft(SetWireguardQuantumResistantError::Unknown) .mapEmpty() - suspend fun setObfuscation( - value: SelectedObfuscation - ): Either<SetObfuscationOptionsError, Unit> = + suspend fun setObfuscation(value: ObfuscationMode): Either<SetObfuscationOptionsError, Unit> = Either.catch { val updatedObfuscationSettings = - ObfuscationSettings.selectedObfuscation.modify( + ObfuscationSettings.selectedObfuscationMode.modify( getSettings().obfuscationSettings ) { value @@ -476,7 +475,7 @@ class ManagementService( .mapLeft(SetObfuscationOptionsError::Unknown) .mapEmpty() - suspend fun setObfuscationPort( + suspend fun setUdp2TcpObfuscationPort( portConstraint: Constraint<Port> ): Either<SetObfuscationOptionsError, Unit> = Either.catch { @@ -490,6 +489,19 @@ class ManagementService( .mapLeft(SetObfuscationOptionsError::Unknown) .mapEmpty() + suspend fun setShadowsocksObfuscationPort( + portConstraint: Constraint<Port> + ): Either<SetObfuscationOptionsError, Unit> = + Either.catch { + val updatedSettings = + ObfuscationSettings.shadowsocks.modify(getSettings().obfuscationSettings) { + it.copy(port = portConstraint) + } + grpc.setObfuscationSettings(updatedSettings.fromDomain()) + } + .mapLeft(SetObfuscationOptionsError::Unknown) + .mapEmpty() + suspend fun setAutoConnect(isEnabled: Boolean): Either<SetAutoConnectError, Unit> = Either.catch { grpc.setAutoConnect(BoolValue.of(isEnabled)) } .onLeft { Logger.e("Set auto connect error") } 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 874783910a..84a826f104 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 @@ -13,6 +13,7 @@ import net.mullvad.mullvadvpn.lib.model.DnsOptions import net.mullvad.mullvadvpn.lib.model.DnsState import net.mullvad.mullvadvpn.lib.model.GeoLocationId import net.mullvad.mullvadvpn.lib.model.NewAccessMethodSetting +import net.mullvad.mullvadvpn.lib.model.ObfuscationMode import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings import net.mullvad.mullvadvpn.lib.model.Ownership import net.mullvad.mullvadvpn.lib.model.PlayPurchase @@ -21,7 +22,7 @@ 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.ShadowsocksSettings import net.mullvad.mullvadvpn.lib.model.SocksAuth import net.mullvad.mullvadvpn.lib.model.TransportProtocol import net.mullvad.mullvadvpn.lib.model.Udp2TcpObfuscationSettings @@ -78,18 +79,20 @@ internal fun DefaultDnsOptions.fromDomain(): ManagementInterface.DefaultDnsOptio internal fun ObfuscationSettings.fromDomain(): ManagementInterface.ObfuscationSettings = ManagementInterface.ObfuscationSettings.newBuilder() - .setSelectedObfuscation(selectedObfuscation.fromDomain()) + .setSelectedObfuscation(selectedObfuscationMode.fromDomain()) .setUdp2Tcp(udp2tcp.fromDomain()) - .setShadowsocks(ManagementInterface.ShadowsocksSettings.newBuilder()) + .setShadowsocks(shadowsocks.fromDomain()) .build() -internal fun SelectedObfuscation.fromDomain(): +internal fun ObfuscationMode.fromDomain(): ManagementInterface.ObfuscationSettings.SelectedObfuscation = when (this) { - SelectedObfuscation.Udp2Tcp -> + ObfuscationMode.Udp2Tcp -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.UDP2TCP - SelectedObfuscation.Auto -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO - SelectedObfuscation.Off -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF + ObfuscationMode.Shadowsocks -> + ManagementInterface.ObfuscationSettings.SelectedObfuscation.SHADOWSOCKS + ObfuscationMode.Auto -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO + ObfuscationMode.Off -> ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF } internal fun Udp2TcpObfuscationSettings.fromDomain(): @@ -236,3 +239,11 @@ internal fun ApiAccessMethodSetting.fromDomain(): ManagementInterface.AccessMeth .setEnabled(enabled) .setAccessMethod(apiAccessMethod.fromDomain()) .build() + +internal fun ShadowsocksSettings.fromDomain(): ManagementInterface.ShadowsocksSettings = + when (val port = port) { + is Constraint.Any -> + ManagementInterface.ShadowsocksSettings.newBuilder().clearPort().build() + is Constraint.Only -> + ManagementInterface.ShadowsocksSettings.newBuilder().setPort(port.value.value).build() + } 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 a1020b71d0..a171cff46b 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 @@ -39,6 +39,7 @@ import net.mullvad.mullvadvpn.lib.model.GeoIpLocation import net.mullvad.mullvadvpn.lib.model.GeoLocationId import net.mullvad.mullvadvpn.lib.model.Mtu import net.mullvad.mullvadvpn.lib.model.ObfuscationEndpoint +import net.mullvad.mullvadvpn.lib.model.ObfuscationMode import net.mullvad.mullvadvpn.lib.model.ObfuscationSettings import net.mullvad.mullvadvpn.lib.model.ObfuscationType import net.mullvad.mullvadvpn.lib.model.Ownership @@ -57,8 +58,8 @@ import net.mullvad.mullvadvpn.lib.model.RelayItemId import net.mullvad.mullvadvpn.lib.model.RelayList import net.mullvad.mullvadvpn.lib.model.RelayOverride import net.mullvad.mullvadvpn.lib.model.RelaySettings -import net.mullvad.mullvadvpn.lib.model.SelectedObfuscation import net.mullvad.mullvadvpn.lib.model.Settings +import net.mullvad.mullvadvpn.lib.model.ShadowsocksSettings import net.mullvad.mullvadvpn.lib.model.SocksAuth import net.mullvad.mullvadvpn.lib.model.SplitTunnelSettings import net.mullvad.mullvadvpn.lib.model.TransportProtocol @@ -172,10 +173,10 @@ internal fun ManagementInterface.ObfuscationEndpoint.toDomain(): ObfuscationEndp internal fun ManagementInterface.ObfuscationEndpoint.ObfuscationType.toDomain(): ObfuscationType = when (this) { ManagementInterface.ObfuscationEndpoint.ObfuscationType.UDP2TCP -> ObfuscationType.Udp2Tcp + ManagementInterface.ObfuscationEndpoint.ObfuscationType.SHADOWSOCKS -> + ObfuscationType.Shadowsocks ManagementInterface.ObfuscationEndpoint.ObfuscationType.UNRECOGNIZED -> throw IllegalArgumentException("Unrecognized obfuscation type") - ManagementInterface.ObfuscationEndpoint.ObfuscationType.SHADOWSOCKS -> - throw IllegalArgumentException("Shadowsocks is unsupported") } internal fun ManagementInterface.TransportProtocol.toDomain(): TransportProtocol = @@ -334,19 +335,20 @@ internal fun ManagementInterface.Ownership.toDomain(): Constraint<Ownership> = internal fun ManagementInterface.ObfuscationSettings.toDomain(): ObfuscationSettings = ObfuscationSettings( - selectedObfuscation = selectedObfuscation.toDomain(), + selectedObfuscationMode = selectedObfuscation.toDomain(), udp2tcp = udp2Tcp.toDomain(), + shadowsocks = shadowsocks.toDomain(), ) internal fun ManagementInterface.ObfuscationSettings.SelectedObfuscation.toDomain(): - SelectedObfuscation = + ObfuscationMode = when (this) { - ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO -> SelectedObfuscation.Auto - ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF -> SelectedObfuscation.Off + ManagementInterface.ObfuscationSettings.SelectedObfuscation.AUTO -> ObfuscationMode.Auto + ManagementInterface.ObfuscationSettings.SelectedObfuscation.OFF -> ObfuscationMode.Off ManagementInterface.ObfuscationSettings.SelectedObfuscation.UDP2TCP -> - SelectedObfuscation.Udp2Tcp + ObfuscationMode.Udp2Tcp ManagementInterface.ObfuscationSettings.SelectedObfuscation.SHADOWSOCKS -> - throw IllegalArgumentException("Shadowsocks is unsupported") + ObfuscationMode.Shadowsocks ManagementInterface.ObfuscationSettings.SelectedObfuscation.UNRECOGNIZED -> throw IllegalArgumentException("Unrecognized selected obfuscation") } @@ -358,6 +360,13 @@ internal fun ManagementInterface.Udp2TcpObfuscationSettings.toDomain(): Udp2TcpO Udp2TcpObfuscationSettings(Constraint.Any) } +internal fun ManagementInterface.ShadowsocksSettings.toDomain(): ShadowsocksSettings = + if (hasPort()) { + ShadowsocksSettings(Constraint.Only(Port(port))) + } else { + ShadowsocksSettings(Constraint.Any) + } + internal fun ManagementInterface.CustomList.toDomain(): CustomList = CustomList( id = CustomListId(id), @@ -443,7 +452,10 @@ internal fun ManagementInterface.RelayList.toDomain(): RelayList = RelayList(countriesList.toDomain(), wireguard.toDomain()) internal fun ManagementInterface.WireguardEndpointData.toDomain(): WireguardEndpointData = - WireguardEndpointData(portRangesList.map { it.toDomain() }) + WireguardEndpointData( + portRangesList.map { it.toDomain() }, + shadowsocksPortRangesList.map { it.toDomain() }, + ) internal fun ManagementInterface.WireguardRelayEndpointData.toDomain(): WireguardRelayEndpointData = WireguardRelayEndpointData(daita) @@ -609,9 +621,9 @@ internal fun ManagementInterface.FeatureIndicator.toDomain() = FeatureIndicator.SERVER_IP_OVERRIDE ManagementInterface.FeatureIndicator.CUSTOM_MTU -> FeatureIndicator.CUSTOM_MTU ManagementInterface.FeatureIndicator.DAITA -> FeatureIndicator.DAITA + ManagementInterface.FeatureIndicator.SHADOWSOCKS -> FeatureIndicator.SHADOWSOCKS ManagementInterface.FeatureIndicator.DAITA_SMART_ROUTING, ManagementInterface.FeatureIndicator.LOCKDOWN_MODE, - ManagementInterface.FeatureIndicator.SHADOWSOCKS, ManagementInterface.FeatureIndicator.MULTIHOP, ManagementInterface.FeatureIndicator.BRIDGE_MODE, ManagementInterface.FeatureIndicator.CUSTOM_MSS_FIX, 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 d11f405869..9b6b5cbf33 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,9 +10,10 @@ enum class FeatureIndicator { SERVER_IP_OVERRIDE, CUSTOM_MTU, DAITA, + SHADOWSOCKS, // Currently not supported + // DAITA_SMART_ROUTING // LOCKDOWN_MODE, - // SHADOWSOCKS, // MULTIHOP, // BRIDGE_MODE, // CUSTOM_MSS_FIX, diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SelectedObfuscation.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt index 03de12079e..7e4101e973 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/SelectedObfuscation.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationMode.kt @@ -1,7 +1,8 @@ package net.mullvad.mullvadvpn.lib.model -enum class SelectedObfuscation { +enum class ObfuscationMode { Auto, Off, Udp2Tcp, + Shadowsocks, } diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationSettings.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationSettings.kt index 1bf12b2f9b..4425abd39b 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationSettings.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ObfuscationSettings.kt @@ -4,8 +4,9 @@ import arrow.optics.optics @optics data class ObfuscationSettings( - val selectedObfuscation: SelectedObfuscation, + val selectedObfuscationMode: ObfuscationMode, val udp2tcp: Udp2TcpObfuscationSettings, + val shadowsocks: ShadowsocksSettings, ) { companion object } diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt index e6ca1e01b9..0f8bf37332 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/Port.kt @@ -19,8 +19,8 @@ value class Port(val value: Int) : Parcelable { Port(number) } - private const val MIN_VALUE = 0 - private const val MAX_VALUE = 65535 + const val MIN_VALUE = 0 + const val MAX_VALUE = 65535 } } diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ShadowsocksSettings.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ShadowsocksSettings.kt new file mode 100644 index 0000000000..dd20470436 --- /dev/null +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/ShadowsocksSettings.kt @@ -0,0 +1,8 @@ +package net.mullvad.mullvadvpn.lib.model + +import arrow.optics.optics + +@optics +data class ShadowsocksSettings(val port: Constraint<Port>) { + companion object +} diff --git a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardEndpointData.kt b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardEndpointData.kt index 8aff7d2895..358882ddce 100644 --- a/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardEndpointData.kt +++ b/android/lib/model/src/main/kotlin/net/mullvad/mullvadvpn/lib/model/WireguardEndpointData.kt @@ -1,3 +1,6 @@ package net.mullvad.mullvadvpn.lib.model -data class WireguardEndpointData(val portRanges: List<PortRange>) +data class WireguardEndpointData( + val portRanges: List<PortRange>, + val shadowsocksPortRanges: List<PortRange>, +) diff --git a/android/lib/resource/src/main/res/values-da/strings.xml b/android/lib/resource/src/main/res/values-da/strings.xml index 637b70f544..65bed61227 100644 --- a/android/lib/resource/src/main/res/values-da/strings.xml +++ b/android/lib/resource/src/main/res/values-da/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Indtast port</string> <string name="custom_port_dialog_remove">Fjern brugerdefineret port</string> <string name="custom_port_dialog_submit">Indstil port</string> - <string name="custom_port_dialog_title">Brugerdefineret WireGuard-port</string> <string name="custom_port_dialog_valid_ranges">Gyldige områder: %1$s</string> <string name="custom_tunnel_host_resolution_error">Kunne ikke fortolke værten for den tilpassede tunnel. Prøv at ændre dine indstillinger.</string> <string name="daita_info">%1$s (%2$s) skjuler mønstre i din krypterede VPN-trafik. Hvis nogen overvåger din forbindelse, gør dette det betydeligt sværere for dem at identificere, hvilke websteder du besøger. Mønstrene skjules ved omhyggeligt at tilføje netværksstøj og gøre alle netværkspakker lige store.</string> diff --git a/android/lib/resource/src/main/res/values-de/strings.xml b/android/lib/resource/src/main/res/values-de/strings.xml index a5f284ac1d..dd4022568f 100644 --- a/android/lib/resource/src/main/res/values-de/strings.xml +++ b/android/lib/resource/src/main/res/values-de/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Port eingeben</string> <string name="custom_port_dialog_remove">Eigenen Port entfernen</string> <string name="custom_port_dialog_submit">Port festlegen</string> - <string name="custom_port_dialog_title">Eigener WireGuard-Port</string> <string name="custom_port_dialog_valid_ranges">Gültige Bereiche: %1$s</string> <string name="custom_tunnel_host_resolution_error">Der Host des benutzerdefinierten Tunnels konnte nicht aufgelöst werden. Versuchen Sie, Ihre Einstellungen zu ändern.</string> <string name="daita_info">%1$s (%2$s) verbirgt Muster in Ihrem verschlüsselten VPN-Traffic. Wenn jemand Ihre Verbindung überwacht, ist es für ihn wesentlich schwieriger zu erkennen, welche Websites Sie besuchen. Dazu fügt es vorsichtig Netzwerkrauschen hinzu und sorgt dafür, dass alle Netzwerkpakete die gleiche Größe haben.</string> diff --git a/android/lib/resource/src/main/res/values-es/strings.xml b/android/lib/resource/src/main/res/values-es/strings.xml index 559618f53f..6545174d98 100644 --- a/android/lib/resource/src/main/res/values-es/strings.xml +++ b/android/lib/resource/src/main/res/values-es/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Introducir puerto</string> <string name="custom_port_dialog_remove">Quitar puerto personalizado</string> <string name="custom_port_dialog_submit">Establecer puerto</string> - <string name="custom_port_dialog_title">Puerto personalizado de WireGuard</string> <string name="custom_port_dialog_valid_ranges">Intervalos válidos: %1$s</string> <string name="custom_tunnel_host_resolution_error">No se puede resolver el host del túnel personalizado. Pruebe a cambiar la configuración.</string> <string name="daita_info">%1$s (%2$s) oculta los patrones en su tráfico VPN cifrado. Si alguien supervisa su conexión, esto les dificulta notablemente identificar qué sitios web está visitando. Lo realiza añadiendo con cuidado ruido de red y haciendo que todos los paquetes de red tengan el mismo tamaño.</string> diff --git a/android/lib/resource/src/main/res/values-fi/strings.xml b/android/lib/resource/src/main/res/values-fi/strings.xml index a548f3bd60..93d25f7463 100644 --- a/android/lib/resource/src/main/res/values-fi/strings.xml +++ b/android/lib/resource/src/main/res/values-fi/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Anna portti</string> <string name="custom_port_dialog_remove">Poista mukautettu portti</string> <string name="custom_port_dialog_submit">Määritä portti</string> - <string name="custom_port_dialog_title">Mukautettu WireGuard-portti</string> <string name="custom_port_dialog_valid_ranges">Kelvolliset portit: %1$s</string> <string name="custom_tunnel_host_resolution_error">Muokatun tunnelin isännän selvittäminen ei onnistu. Kokeile muuttaa asetuksiasi.</string> <string name="daita_info">%1$s (%2$s) piilottaa salatussa VPN-liikenteessäsi toistuvat maneerit luomalla tarkoin räätälöityjä häiriöitä verkkoliikenteeseen ja tekemällä kaikista verkkopaketeista samankokoisia. Jos joku siis yrittää tarkkailla yhteyttäsi, hänen on huomattavasti vaikeampi tunnistaa, millä verkkosivustoilla oikein vierailet.</string> diff --git a/android/lib/resource/src/main/res/values-fr/strings.xml b/android/lib/resource/src/main/res/values-fr/strings.xml index b7a09d437d..59340b55b8 100644 --- a/android/lib/resource/src/main/res/values-fr/strings.xml +++ b/android/lib/resource/src/main/res/values-fr/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Saisir le port</string> <string name="custom_port_dialog_remove">Supprimer le port personnalisé</string> <string name="custom_port_dialog_submit">Définir le port</string> - <string name="custom_port_dialog_title">Port WireGuard personnalisé</string> <string name="custom_port_dialog_valid_ranges">Plages valides : %1$s</string> <string name="custom_tunnel_host_resolution_error">Échec de la résolution de l\'hôte du tunnel personnalisé. Essayez de modifier vos paramètres.</string> <string name="daita_info">%1$s (%2$s) dissimule des motifs dans votre trafic VPN chiffré. Si quelqu\'un surveille votre connexion, il lui sera beaucoup plus difficile d\'identifier les sites Web que vous visitez. Pour ce faire, il ajoute soigneusement du bruit réseau et fait en sorte que tous les paquets de réseau aient la même taille.</string> diff --git a/android/lib/resource/src/main/res/values-it/strings.xml b/android/lib/resource/src/main/res/values-it/strings.xml index b9ba1f5a17..a951c8a3fd 100644 --- a/android/lib/resource/src/main/res/values-it/strings.xml +++ b/android/lib/resource/src/main/res/values-it/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Inserisci porta</string> <string name="custom_port_dialog_remove">Rimuovi porta personalizzata</string> <string name="custom_port_dialog_submit">Imposta porta</string> - <string name="custom_port_dialog_title">Porta personalizzata WireGuard</string> <string name="custom_port_dialog_valid_ranges">Intervalli validi: %1$s</string> <string name="custom_tunnel_host_resolution_error">Impossibile risolvere l\'host del tunnel personalizzato. Prova a modificare le impostazioni.</string> <string name="daita_info">%1$s (%2$s) nasconde i percorsi in un traffico VPN crittografato. Se qualcuno sta monitorando la tua connessione, sarà molto più difficile per lui identificare quali siti web stai visitando. Ciò avviene aggiungendo con attenzione rumore di rete e rendendo tutti i pacchetti di rete della stessa dimensione.</string> diff --git a/android/lib/resource/src/main/res/values-ja/strings.xml b/android/lib/resource/src/main/res/values-ja/strings.xml index 91a72a347f..86506d6005 100644 --- a/android/lib/resource/src/main/res/values-ja/strings.xml +++ b/android/lib/resource/src/main/res/values-ja/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">ポートを入力</string> <string name="custom_port_dialog_remove">カスタムポートを削除</string> <string name="custom_port_dialog_submit">ポートを設定</string> - <string name="custom_port_dialog_title">WireGuardカスタムポート</string> <string name="custom_port_dialog_valid_ranges">有効な範囲: %1$s</string> <string name="custom_tunnel_host_resolution_error">カスタムトンネルのホストを解決できません。設定を変更してみてください。</string> <string name="daita_info">%1$s (%2$s) を使用すると、暗号化された VPN トラフィックのパターンを隠すことができるようになります。何者かがあなたの接続を監視している場合に、アクセスしているウェブサイトの特定が大幅に難しくなります。ネットワークノイズを慎重に追加し、ネットワークパケットのサイズをすべて同一に揃えることによって実現しています。</string> diff --git a/android/lib/resource/src/main/res/values-ko/strings.xml b/android/lib/resource/src/main/res/values-ko/strings.xml index a9ec5e6604..21b0750a0b 100644 --- a/android/lib/resource/src/main/res/values-ko/strings.xml +++ b/android/lib/resource/src/main/res/values-ko/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">포트 입력</string> <string name="custom_port_dialog_remove">사용자 지정 포트 제거</string> <string name="custom_port_dialog_submit">포트 설정</string> - <string name="custom_port_dialog_title">WireGuard 사용자 지정 포트</string> <string name="custom_port_dialog_valid_ranges">유효한 범위: %1$s</string> <string name="custom_tunnel_host_resolution_error">사용자 지정 터널의 호스트를 확인할 수 없습니다. 설정을 변경해 보세요.</string> <string name="daita_info">%1$s (%2$s)은(는) 암호화 VPN 트래픽에서 패턴을 숨깁니다. 누군가가 사용자의 연결을 모니터링하고 있다면, 사용자가 방문하고 있는 웹사이트 식별을 훨씬 더 어렵게 만듭니다. 네트워크 노이즈를 세심하게 추가하고, 모든 네트워크 패킷을 같은 크기로 만듭니다.</string> diff --git a/android/lib/resource/src/main/res/values-my/strings.xml b/android/lib/resource/src/main/res/values-my/strings.xml index 7a5fb2b8f5..7f7cf869ba 100644 --- a/android/lib/resource/src/main/res/values-my/strings.xml +++ b/android/lib/resource/src/main/res/values-my/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">ပေါ့တ် ရိုက်ထည့်ရန်</string> <string name="custom_port_dialog_remove">စိတ်ကြိုက် ပေါ့တ်ကို ဖယ်ရှားရန်</string> <string name="custom_port_dialog_submit">ပေါ့တ် သတ်မှတ်ရန်</string> - <string name="custom_port_dialog_title">စိတ်ကြိုက် WireGuard ပေါ့တ်</string> <string name="custom_port_dialog_valid_ranges">အကျုံးဝင်သည့် အပိုင်းအခြား- %1$s</string> <string name="custom_tunnel_host_resolution_error">စိတ်ကြိုက်ပြုလုပ်ထားသည့် Tunnel ၏ Host ကို ဖြေရှင်း၍ မရနိုင်ပါ။ သင့်ဆက်တင်ကို ပြောင်းကြည့်ပါ။</string> <string name="daita_info">%1$s (%2$s) သည် သင်၏ ကုဒ်ပြောင်းဝှက်ထားသော VPN ကူးလူးမှုတွင် ပက်တန်များကို ဝှက်ထားပါသည်။ သင့်ချိတ်ဆက်မှုကို တစ်စုံတစ်ယောက်က စောင့်ကြည့်နေပါက မည်သည့်ဝက်ဘ်ဆိုက်များ သင်ဝင်ရောက်နေသည်ကို ၎င်းတို့က ခွဲခြားဖော်ထုတ်ဖို့ရာ ပို၍ သိသိသာသာ ခက်ခဲသွားအောင် ၎င်းက ပြုလုပ်ပေးပါသည်။ ကွန်ရက် အနှောင့်အယှက်လျှပ်လိုင်းကို ဂရုတစိုက် ထည့်ပြီး ကွန်ရက် ပက်ကက်အားလုံးကို အရွယ်အစားတူညီအောင် ပြုလုပ်ခြင်းဖြင့် ပို၍ခက်ခဲသွားအောင် ဆောင်ရွက်ပါသည်။</string> diff --git a/android/lib/resource/src/main/res/values-nb/strings.xml b/android/lib/resource/src/main/res/values-nb/strings.xml index cb41eaaa33..61ed6229bd 100644 --- a/android/lib/resource/src/main/res/values-nb/strings.xml +++ b/android/lib/resource/src/main/res/values-nb/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Skriv inn port</string> <string name="custom_port_dialog_remove">Fjern tilpasset port</string> <string name="custom_port_dialog_submit">Konfigurer port</string> - <string name="custom_port_dialog_title">Tilpasset WireGuard-port</string> <string name="custom_port_dialog_valid_ranges">Gyldige verdiområder: %1$s</string> <string name="custom_tunnel_host_resolution_error">Kunne ikke løse vert for egendefinert tunnel. Forsøk å endre innstillingene dine.</string> <string name="daita_info">%1$s (%2$s) skjuler mønstre i den krypterte VPN-trafikken. Hvis noen overvåker tilkoblingen din, gjør dette det betydelig vanskeligere for dem å identifisere hvilke nettsteder du besøker. Dette gjøres ved varsomt å legge til nettverksstøy og gjøre alle nettverkspakker like store.</string> diff --git a/android/lib/resource/src/main/res/values-nl/strings.xml b/android/lib/resource/src/main/res/values-nl/strings.xml index e57e7b96ab..f0ff345e91 100644 --- a/android/lib/resource/src/main/res/values-nl/strings.xml +++ b/android/lib/resource/src/main/res/values-nl/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Voer poort in</string> <string name="custom_port_dialog_remove">Aangepaste poort verwijderen</string> <string name="custom_port_dialog_submit">Poort instellen</string> - <string name="custom_port_dialog_title">Aangepaste WireGuard-poort</string> <string name="custom_port_dialog_valid_ranges">Geldige bereiken: %1$s</string> <string name="custom_tunnel_host_resolution_error">Kan host van aangepaste tunnel niet omzetten. Probeer uw instellingen te wijzigen.</string> <string name="daita_info">%1$s (%2$s) verbergt patronen in het versleutelde VPN-verkeer. Als iemand de verbinding in de gaten houdt, maakt dit het aanzienlijk moeilijker voor diegene om te zien welke websites u bezoekt. Dit wordt gedaan door zorgvuldig netwerkruis toe te voegen en alle netwerkpakketten even groot te maken.</string> diff --git a/android/lib/resource/src/main/res/values-pl/strings.xml b/android/lib/resource/src/main/res/values-pl/strings.xml index a90f0a95e8..f928845015 100644 --- a/android/lib/resource/src/main/res/values-pl/strings.xml +++ b/android/lib/resource/src/main/res/values-pl/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Wprowadź port</string> <string name="custom_port_dialog_remove">Usuń port niestandardowy</string> <string name="custom_port_dialog_submit">Ustaw port</string> - <string name="custom_port_dialog_title">Niestandardowy port WireGuard</string> <string name="custom_port_dialog_valid_ranges">Prawidłowe zakresy: %1$s</string> <string name="custom_tunnel_host_resolution_error">Nie można rozpoznać hosta tunelu niestandardowego. Spróbuj zmienić ustawienia.</string> <string name="daita_info">%1$s (%2$s) ukrywa wzorce w zaszyfrowanym ruchu VPN. Jeśli ktoś monitoruje Twoje połączenie, znacznie utrudni to identyfikację odwiedzanych witryn. Odbywa się to poprzez ostrożne dodawanie szumów sieciowych i ustawianie tego samego rozmiaru wszystkich pakietów sieciowych.</string> diff --git a/android/lib/resource/src/main/res/values-pt/strings.xml b/android/lib/resource/src/main/res/values-pt/strings.xml index c179f7d305..35604314fe 100644 --- a/android/lib/resource/src/main/res/values-pt/strings.xml +++ b/android/lib/resource/src/main/res/values-pt/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Introduzir porta</string> <string name="custom_port_dialog_remove">Remover porta personalizada</string> <string name="custom_port_dialog_submit">Definir porta</string> - <string name="custom_port_dialog_title">Porta personalizada WireGuard</string> <string name="custom_port_dialog_valid_ranges">Intervalos válidos: %1$s</string> <string name="custom_tunnel_host_resolution_error">Não foi possível resolver o anfitrião do túnel personalizado. Experimente alterar as suas definições.</string> <string name="daita_info">%1$s (%2$s) oculta padrões no seu tráfego VPN encriptado. Se alguém estiver a monitorizar a sua ligação, isto dificulta significativamente a identificação dos sites que visita. Para tal, adiciona cuidadosamente ruído de rede e torna todos os pacotes de rede do mesmo tamanho.</string> diff --git a/android/lib/resource/src/main/res/values-ru/strings.xml b/android/lib/resource/src/main/res/values-ru/strings.xml index 1ac114b0c9..fa6edb42bf 100644 --- a/android/lib/resource/src/main/res/values-ru/strings.xml +++ b/android/lib/resource/src/main/res/values-ru/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Введите порт</string> <string name="custom_port_dialog_remove">Удалить пользовательский порт</string> <string name="custom_port_dialog_submit">Установить порт</string> - <string name="custom_port_dialog_title">Пользовательский порт WireGuard</string> <string name="custom_port_dialog_valid_ranges">Допустимые диапазоны: %1$s</string> <string name="custom_tunnel_host_resolution_error">Не удалось преобразовать имя узла пользовательского туннеля. Попробуйте изменить настройки.</string> <string name="daita_info">%1$s (%2$s) маскирует особенности зашифрованного VPN-трафика. Если кто-то следит за вашим подключением, ему будет значительно сложнее определить, какие сайты вы посещаете. Для этого добавляется сетевой шум, а все сетевые пакеты делаются одинаковыми по размеру.</string> diff --git a/android/lib/resource/src/main/res/values-sv/strings.xml b/android/lib/resource/src/main/res/values-sv/strings.xml index 33f653e5f5..d4c976ffc5 100644 --- a/android/lib/resource/src/main/res/values-sv/strings.xml +++ b/android/lib/resource/src/main/res/values-sv/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Ange port</string> <string name="custom_port_dialog_remove">Ta bort anpassad port</string> <string name="custom_port_dialog_submit">Ställ in port</string> - <string name="custom_port_dialog_title">Anpassad WireGuard-port</string> <string name="custom_port_dialog_valid_ranges">Giltiga intervall: %1$s</string> <string name="custom_tunnel_host_resolution_error">Det går inte att lösa värd för anpassad tunnel. Försök att ändra inställningarna.</string> <string name="daita_info">%1$s (%2$s) döljer mönster i din krypterade VPN-trafik. Om någon övervakar din anslutning blir det mycket svårare för hen att identifiera vilka webbplatser du besöker. Den gör det genom att noggrant lägga till nätverksbrus och se till så att alla nätverkspaket har samma storlek.</string> diff --git a/android/lib/resource/src/main/res/values-th/strings.xml b/android/lib/resource/src/main/res/values-th/strings.xml index 71c424a4b3..c544a7f2f9 100644 --- a/android/lib/resource/src/main/res/values-th/strings.xml +++ b/android/lib/resource/src/main/res/values-th/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">ป้อนพอร์ต</string> <string name="custom_port_dialog_remove">นำพอร์ตแบบกำหนดเองออก</string> <string name="custom_port_dialog_submit">ตั้งค่าพอร์ต</string> - <string name="custom_port_dialog_title">พอร์ต WireGuard แบบกำหนดเอง</string> <string name="custom_port_dialog_valid_ranges">ช่วงที่ใช้ได้: %1$s</string> <string name="custom_tunnel_host_resolution_error">ไม่พบโฮสต์ของช่องทางแบบกำหนดเอง กรุณาลองเปลี่ยนการตั้งค่าของคุณ</string> <string name="daita_info">%1$s (%2$s) ซ่อนรูปแบบในการรับส่งข้อมูล VPN ที่เข้ารหัสของคุณ หากมีใครกำลังเฝ้าดูการเชื่อมต่อของคุณอยู่ สิ่งนี้จะทำให้การระบุเว็บไซต์ที่คุณกำลังเยี่ยมชมยากขึ้นอย่างมาก ซึ่งทำได้โดยการเพิ่มสัญญาณรบกวนเครือข่ายอย่างระมัดระวัง และทำให้แพ็กเก็ตเครือข่ายทั้งหมดมีขนาดเท่ากันหมด</string> diff --git a/android/lib/resource/src/main/res/values-tr/strings.xml b/android/lib/resource/src/main/res/values-tr/strings.xml index 3970cf50c6..185a7e263e 100644 --- a/android/lib/resource/src/main/res/values-tr/strings.xml +++ b/android/lib/resource/src/main/res/values-tr/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">Portu girin</string> <string name="custom_port_dialog_remove">Özel portu kaldır</string> <string name="custom_port_dialog_submit">Portu ayarla</string> - <string name="custom_port_dialog_title">WireGuard özel portu</string> <string name="custom_port_dialog_valid_ranges">Geçerli aralıklar: %1$s</string> <string name="custom_tunnel_host_resolution_error">Özel tünel ana bilgisayarı çözülemedi. Ayarlarınızı değiştirmeyi deneyin.</string> <string name="daita_info">%1$s (%2$s), şifrelenmiş VPN trafiğinizdeki kalıpları gizler. Bu sayede, başka biri bağlantınızı izliyorsa ziyaret ettiğiniz web sitelerini tespit etmesi çok daha zor olacaktır. Özellik, dikkatli bir şekilde ağ paraziti ekleyerek ve tüm ağ paketlerini aynı boyuta getirerek sizi izlenmekten korur.</string> diff --git a/android/lib/resource/src/main/res/values-zh-rCN/strings.xml b/android/lib/resource/src/main/res/values-zh-rCN/strings.xml index cceec5832e..fb990b02d9 100644 --- a/android/lib/resource/src/main/res/values-zh-rCN/strings.xml +++ b/android/lib/resource/src/main/res/values-zh-rCN/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">输入端口</string> <string name="custom_port_dialog_remove">移除自定义端口</string> <string name="custom_port_dialog_submit">设置端口</string> - <string name="custom_port_dialog_title">WireGuard 自定义端口</string> <string name="custom_port_dialog_valid_ranges">有效范围:%1$s</string> <string name="custom_tunnel_host_resolution_error">无法解析自定义隧道的主机。请尝试更改您的设置。</string> <string name="daita_info">%1$s(%2$s)会在您的加密 VPN 流量中隐藏模式。如果有人在监视您的连接,这可以让他们很难识别您正在访问的网站。它的实现方法是小心地添加网络噪声并使所有网络数据包的大小都相同。</string> diff --git a/android/lib/resource/src/main/res/values-zh-rTW/strings.xml b/android/lib/resource/src/main/res/values-zh-rTW/strings.xml index 026267db4a..11e90010fd 100644 --- a/android/lib/resource/src/main/res/values-zh-rTW/strings.xml +++ b/android/lib/resource/src/main/res/values-zh-rTW/strings.xml @@ -98,7 +98,6 @@ <string name="custom_port_dialog_placeholder">輸入連接埠</string> <string name="custom_port_dialog_remove">移除自訂連接埠</string> <string name="custom_port_dialog_submit">設定連接埠</string> - <string name="custom_port_dialog_title">WireGuard 自訂連接埠</string> <string name="custom_port_dialog_valid_ranges">有效範圍:%1$s</string> <string name="custom_tunnel_host_resolution_error">無法解析自訂通道的主機。請嘗試變更您的設定。</string> <string name="daita_info">%1$s (%2$s) 會在您的加密 VPN 流量中隱藏模式。如果有人正在監視您的連線,這能讓他們難以識別出您正在存取的網站。此實現方式係謹慎加入網路噪音,並使所有網路資料包大小皆相同。</string> diff --git a/android/lib/resource/src/main/res/values/strings.xml b/android/lib/resource/src/main/res/values/strings.xml index 7eaa3b8f3e..cf57f937c5 100644 --- a/android/lib/resource/src/main/res/values/strings.xml +++ b/android/lib/resource/src/main/res/values/strings.xml @@ -252,7 +252,7 @@ <string name="wireguard_port_info_port_range">The custom port can be any value inside the valid ranges: %s.</string> <string name="wireguard_custon_port_title">Custom</string> <string name="port">Port</string> - <string name="custom_port_dialog_title">WireGuard custom port</string> + <string name="custom_port_dialog_title">%s custom port</string> <string name="custom_port_dialog_submit">Set port</string> <string name="custom_port_dialog_remove">Remove custom port</string> <string name="custom_port_dialog_valid_ranges">Valid ranges: %s</string> @@ -391,4 +391,6 @@ <string name="setting_chip">Setting: %s</string> <string name="enable_anyway">Enable anyway</string> <string name="daita_relay_subset_warning">This feature isn’t available on all servers. You might need to change location after enabling.</string> + <string name="upd_over_tcp">UDP-over-TCP</string> + <string name="port_x">Port: %s</string> </resources> diff --git a/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt b/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt index 922e97073b..4ce5c8b57c 100644 --- a/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt +++ b/android/lib/theme/src/main/kotlin/net/mullvad/mullvadvpn/lib/theme/dimensions/Dimensions.kt @@ -62,6 +62,7 @@ data class Dimensions( val notificationBannerStartPadding: Dp = 16.dp, val notificationEndIconPadding: Dp = 4.dp, val notificationStatusIconSize: Dp = 10.dp, + val obfuscationNavigationPadding: Dp = 24.dp, val problemReportIconToTitlePadding: Dp = 60.dp, val progressIndicatorSize: Dp = 48.dp, val reconnectButtonMinInteractiveComponentSize: Dp = 40.dp, |
