diff options
| author | Emīls Piņķis <emils@mullvad.net> | 2019-09-04 16:30:55 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2019-09-06 20:12:23 +0100 |
| commit | 73c301b45273c8fe7ea9361e217c898834ebacac (patch) | |
| tree | 019802bba0a830e50c49bc846e5f118cbcbd651b | |
| parent | 1c911aeb895ec935b1951935116860f079492329 (diff) | |
| download | mullvadvpn-73c301b45273c8fe7ea9361e217c898834ebacac.tar.xz mullvadvpn-73c301b45273c8fe7ea9361e217c898834ebacac.zip | |
Use new tunnel parameter error block reason in Android
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt | 13 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/model/BlockReason.kt | 9 | ||||
| -rw-r--r-- | android/src/main/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 38 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 6 |
5 files changed, 61 insertions, 8 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt index 5a8eb9c41a..acc11784fb 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/NotificationBanner.kt @@ -10,6 +10,7 @@ import android.view.View import net.mullvad.mullvadvpn.dataproxy.AppVersionInfoCache import net.mullvad.mullvadvpn.model.ActionAfterDisconnect import net.mullvad.mullvadvpn.model.BlockReason +import net.mullvad.mullvadvpn.model.ParameterGenerationError import net.mullvad.mullvadvpn.model.KeygenEvent import net.mullvad.mullvadvpn.model.TunnelState @@ -56,7 +57,7 @@ class NotificationBanner( private fun update() { externalLink = null - updateBasedOnTunnelState() || updateBasedOnKeyState() || updateBasedOnVersionInfo() + updateBasedOnTunnelState() || updateBasedOnKeyState() || updateBasedOnVersionInfo() } private fun updateBasedOnKeyState(): Boolean { @@ -132,11 +133,17 @@ class NotificationBanner( is BlockReason.SetFirewallPolicyError -> R.string.set_firewall_policy_error is BlockReason.SetDnsError -> R.string.set_dns_error is BlockReason.StartTunnelError -> R.string.start_tunnel_error - is BlockReason.NoMatchingRelay -> R.string.no_matching_relay is BlockReason.IsOffline -> R.string.is_offline is BlockReason.TapAdapterProblem -> R.string.tap_adapter_problem + is BlockReason.ParameterGeneration -> { + when (reason.error) { + is ParameterGenerationError.NoMatchingRelay -> R.string.no_matching_relay + is ParameterGenerationError.NoMatchingBridgeRelay -> R.string.no_matching_bridge_relay + is ParameterGenerationError.NoWireguardKey -> R.string.no_wireguard_key + is ParameterGenerationError.CustomTunnelHostResultionError -> R.string.custom_tunnel_host_resolution_error + } + } } - showError(R.string.blocking_internet, messageText) } diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/BlockReason.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/BlockReason.kt index 769a97b6fa..ae4d392fc2 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/BlockReason.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/BlockReason.kt @@ -6,7 +6,14 @@ sealed class BlockReason { class SetFirewallPolicyError : BlockReason() class SetDnsError : BlockReason() class StartTunnelError : BlockReason() - class NoMatchingRelay : BlockReason() + class ParameterGeneration(val error: ParameterGenerationError) : BlockReason() class IsOffline : BlockReason() class TapAdapterProblem : BlockReason() } + +sealed class ParameterGenerationError { + class NoMatchingRelay : ParameterGenerationError() + class NoMatchingBridgeRelay : ParameterGenerationError() + class NoWireguardKey : ParameterGenerationError() + class CustomTunnelHostResultionError : ParameterGenerationError() +} diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 44076d85ae..f03cef4181 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -85,6 +85,9 @@ <string name="set_dns_error">Failed to set system DNS server</string> <string name="start_tunnel_error">Failed to start tunnel connection</string> <string name="no_matching_relay">No relay server matches the current settings</string> + <string name="no_matching_bridge_relay">No bridge relay server matches the current settings</string> + <string name="no_wireguard_key">No WireGuard key set</string> + <string name="custom_tunnel_host_resolution_error">Failed to resolve the hostname of custom server</string> <string name="is_offline">This device is offline, no tunnels can be established</string> <string name="tap_adapter_problem">TAP adapter error</string> <string name="wireguard_error">WireGuard error</string> diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs index 28a45c3630..c99ed45113 100644 --- a/mullvad-jni/src/into_java.rs +++ b/mullvad-jni/src/into_java.rs @@ -24,7 +24,7 @@ use std::{ use talpid_core::tunnel::tun_provider::TunConfig; use talpid_types::{ net::{wireguard::PublicKey, Endpoint, TransportProtocol, TunnelEndpoint}, - tunnel::{ActionAfterDisconnect, BlockReason}, + tunnel::{ActionAfterDisconnect, BlockReason, ParameterGenerationError}, }; pub trait IntoJava<'env> { @@ -652,8 +652,18 @@ impl<'env> IntoJava<'env> for BlockReason { BlockReason::SetFirewallPolicyError => "SetFirewallPolicyError", BlockReason::SetDnsError => "SetDnsError", BlockReason::StartTunnelError => "StartTunnelError", - // TODO(emilsp): Fix Android code to handle new TunnelParameterError block reason - BlockReason::TunnelParameterError(_) => "NoMatchingRelay", + BlockReason::TunnelParameterError(reason) => { + let class = + get_class("net/mullvad/mullvadvpn/model/BlockReason$ParameterGeneration"); + let parameters = [JValue::Object(reason.into_java(env))]; + return env + .new_object( + &class, + "(Lnet/mullvad/mullvadvpn/model/ParameterGenerationError;)V", + ¶meters, + ) + .expect("Failed to create BlockReason.ParameterGeneration Java object"); + } BlockReason::IsOffline => "IsOffline", BlockReason::TapAdapterProblem => "TapAdapterProblem", }; @@ -665,6 +675,28 @@ impl<'env> IntoJava<'env> for BlockReason { } } +impl<'env> IntoJava<'env> for ParameterGenerationError { + type JavaType = JObject<'env>; + + fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType { + let class_variant = match self { + ParameterGenerationError::NoMatchingRelay => "NoMatchingRelay", + ParameterGenerationError::NoMatchingBridgeRelay => "NoMatchingBridgeRelay ", + ParameterGenerationError::NoWireguardKey => "NoWireguardKey", + ParameterGenerationError::CustomTunnelHostResultionError => { + "CustomTunnelHostResultionError" + } + }; + let class_name = format!( + "net/mullvad/mullvadvpn/model/ParameterGenerationError${}", + class_variant + ); + let class = get_class(&class_name); + env.new_object(&class, "()V", &[]) + .expect("Failed to create ParameterGenerationError sub-class variant Java object") + } +} + impl<'env> IntoJava<'env> for TunnelState { type JavaType = JObject<'env>; diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 91da16f484..0eaf92b795 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -44,7 +44,7 @@ const CLASSES_TO_LOAD: &[&str] = &[ "net/mullvad/mullvadvpn/model/BlockReason$SetFirewallPolicyError", "net/mullvad/mullvadvpn/model/BlockReason$SetDnsError", "net/mullvad/mullvadvpn/model/BlockReason$StartTunnelError", - "net/mullvad/mullvadvpn/model/BlockReason$NoMatchingRelay", + "net/mullvad/mullvadvpn/model/BlockReason$ParameterGeneration", "net/mullvad/mullvadvpn/model/BlockReason$IsOffline", "net/mullvad/mullvadvpn/model/BlockReason$TapAdapterProblem", "net/mullvad/mullvadvpn/model/AppVersionInfo", @@ -59,6 +59,10 @@ const CLASSES_TO_LOAD: &[&str] = &[ "net/mullvad/mullvadvpn/model/LocationConstraint$City", "net/mullvad/mullvadvpn/model/LocationConstraint$Country", "net/mullvad/mullvadvpn/model/LocationConstraint$Hostname", + "net/mullvad/mullvadvpn/model/ParameterGenerationError$NoMatchingRelay", + "net/mullvad/mullvadvpn/model/ParameterGenerationError$NoMatchingBridgeRelay", + "net/mullvad/mullvadvpn/model/ParameterGenerationError$NoWireguardKey", + "net/mullvad/mullvadvpn/model/ParameterGenerationError$CustomTunnelHostResultionError", "net/mullvad/mullvadvpn/model/PublicKey", "net/mullvad/mullvadvpn/model/Relay", "net/mullvad/mullvadvpn/model/RelayList", |
