summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2019-09-04 16:30:55 +0100
committerEmīls Piņķis <emils@mullvad.net>2019-09-06 20:12:23 +0100
commit73c301b45273c8fe7ea9361e217c898834ebacac (patch)
tree019802bba0a830e50c49bc846e5f118cbcbd651b
parent1c911aeb895ec935b1951935116860f079492329 (diff)
downloadmullvadvpn-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.kt13
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/BlockReason.kt9
-rw-r--r--android/src/main/res/values/strings.xml3
-rw-r--r--mullvad-jni/src/into_java.rs38
-rw-r--r--mullvad-jni/src/lib.rs6
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",
+ &parameters,
+ )
+ .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",