diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-31 07:45:23 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-07-31 11:55:29 +0000 |
| commit | 36e9e1c08204be1ffad5c618ffd59d0a61062e14 (patch) | |
| tree | 68a68cbb7166670fcbcabfa60ebed56ff48889d1 | |
| parent | 7bc93ab22dd7ea88084a1467bb6090c647aacc60 (diff) | |
| download | mullvadvpn-36e9e1c08204be1ffad5c618ffd59d0a61062e14.tar.xz mullvadvpn-36e9e1c08204be1ffad5c618ffd59d0a61062e14.zip | |
Implement `IntoJava` for `BlockReason`
| -rw-r--r-- | mullvad-jni/src/into_java.rs | 35 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 8 |
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", ¶meters) + .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", |
