summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-31 07:45:23 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-31 11:55:29 +0000
commit36e9e1c08204be1ffad5c618ffd59d0a61062e14 (patch)
tree68a68cbb7166670fcbcabfa60ebed56ff48889d1
parent7bc93ab22dd7ea88084a1467bb6090c647aacc60 (diff)
downloadmullvadvpn-36e9e1c08204be1ffad5c618ffd59d0a61062e14.tar.xz
mullvadvpn-36e9e1c08204be1ffad5c618ffd59d0a61062e14.zip
Implement `IntoJava` for `BlockReason`
-rw-r--r--mullvad-jni/src/into_java.rs35
-rw-r--r--mullvad-jni/src/lib.rs8
2 files changed, 42 insertions, 1 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs
index 52aa9e2f7c..0731cf5ce6 100644
--- a/mullvad-jni/src/into_java.rs
+++ b/mullvad-jni/src/into_java.rs
@@ -19,7 +19,10 @@ use mullvad_types::{
};
use std::{fmt::Debug, net::IpAddr};
use talpid_core::tunnel::tun_provider::TunConfig;
-use talpid_types::{net::wireguard::PublicKey, tunnel::ActionAfterDisconnect};
+use talpid_types::{
+ net::wireguard::PublicKey,
+ tunnel::{ActionAfterDisconnect, BlockReason},
+};
pub trait IntoJava<'env> {
type JavaType;
@@ -539,6 +542,36 @@ impl<'env> IntoJava<'env> for ActionAfterDisconnect {
}
}
+impl<'env> IntoJava<'env> for BlockReason {
+ type JavaType = JObject<'env>;
+
+ fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
+ let variant = match self {
+ BlockReason::AuthFailed(reason) => {
+ let class = get_class("net/mullvad/mullvadvpn/model/BlockReason$AuthFailed");
+ let reason = env.auto_local(JObject::from(reason.into_java(env)));
+ let parameters = [JValue::Object(reason.as_obj())];
+
+ return env
+ .new_object(&class, "(Ljava/lang/String;)V", &parameters)
+ .expect("Failed to create BlockReason.AuthFailed Java object");
+ }
+ BlockReason::Ipv6Unavailable => "Ipv6Unavailable",
+ BlockReason::SetFirewallPolicyError => "SetFirewallPolicyError",
+ BlockReason::SetDnsError => "SetDnsError",
+ BlockReason::StartTunnelError => "StartTunnelError",
+ BlockReason::NoMatchingRelay => "NoMatchingRelay",
+ BlockReason::IsOffline => "IsOffline",
+ BlockReason::TapAdapterProblem => "TapAdapterProblem",
+ };
+ let class_name = format!("net/mullvad/mullvadvpn/model/BlockReason${}", variant);
+ let class = get_class(&class_name);
+
+ env.new_object(&class, "()V", &[])
+ .expect("Failed to create BlockReason 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 31d9cdf670..cd1d0a47e4 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -37,6 +37,14 @@ const CLASSES_TO_LOAD: &[&str] = &[
"net/mullvad/mullvadvpn/model/ActionAfterDisconnect$Block",
"net/mullvad/mullvadvpn/model/ActionAfterDisconnect$Nothing",
"net/mullvad/mullvadvpn/model/ActionAfterDisconnect$Reconnect",
+ "net/mullvad/mullvadvpn/model/BlockReason$AuthFailed",
+ "net/mullvad/mullvadvpn/model/BlockReason$Ipv6Unavailable",
+ "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$IsOffline",
+ "net/mullvad/mullvadvpn/model/BlockReason$TapAdapterProblem",
"net/mullvad/mullvadvpn/model/AppVersionInfo",
"net/mullvad/mullvadvpn/model/Constraint$Any",
"net/mullvad/mullvadvpn/model/Constraint$Only",