summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 14:17:37 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-22 21:18:39 +0000
commit0f30db4f56f65cb9b18fa0661f2a871bc316228c (patch)
tree1f1f68fd44b2347750c5220aeafa85fbaf3c7e3f
parent777d3a25922cf8df6b3a26a0ae23f47cb2bf15c2 (diff)
downloadmullvadvpn-0f30db4f56f65cb9b18fa0661f2a871bc316228c.tar.xz
mullvadvpn-0f30db4f56f65cb9b18fa0661f2a871bc316228c.zip
Implement `IntoJava` for relay list types
-rw-r--r--mullvad-jni/src/into_java.rs78
-rw-r--r--mullvad-jni/src/lib.rs4
2 files changed, 81 insertions, 1 deletions
diff --git a/mullvad-jni/src/into_java.rs b/mullvad-jni/src/into_java.rs
index 471ff22c3d..22b582bc1b 100644
--- a/mullvad-jni/src/into_java.rs
+++ b/mullvad-jni/src/into_java.rs
@@ -4,7 +4,11 @@ use jni::{
sys::jint,
JNIEnv,
};
-use mullvad_types::{account::AccountData, settings::Settings};
+use mullvad_types::{
+ account::AccountData,
+ relay_list::{Relay, RelayList, RelayListCity, RelayListCountry},
+ settings::Settings,
+};
pub trait IntoJava<'env> {
type JavaType;
@@ -78,6 +82,78 @@ impl<'env> IntoJava<'env> for AccountData {
}
}
+impl<'env> IntoJava<'env> for RelayList {
+ type JavaType = JObject<'env>;
+
+ fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
+ let class = get_class("net/mullvad/mullvadvpn/model/RelayList");
+ let relay_countries = env.auto_local(self.countries.into_java(env));
+ let parameters = [JValue::Object(relay_countries.as_obj())];
+
+ env.new_object(&class, "(Ljava/util/List;)V", &parameters)
+ .expect("Failed to create RelayList Java object")
+ }
+}
+
+impl<'env> IntoJava<'env> for RelayListCountry {
+ type JavaType = JObject<'env>;
+
+ fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
+ let class = get_class("net/mullvad/mullvadvpn/model/RelayListCountry");
+ let name = env.auto_local(JObject::from(self.name.into_java(env)));
+ let code = env.auto_local(JObject::from(self.code.into_java(env)));
+ let relay_cities = env.auto_local(self.cities.into_java(env));
+ let parameters = [
+ JValue::Object(name.as_obj()),
+ JValue::Object(code.as_obj()),
+ JValue::Object(relay_cities.as_obj()),
+ ];
+
+ env.new_object(
+ &class,
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V",
+ &parameters,
+ )
+ .expect("Failed to create RelayListCountry Java object")
+ }
+}
+
+impl<'env> IntoJava<'env> for RelayListCity {
+ type JavaType = JObject<'env>;
+
+ fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
+ let class = get_class("net/mullvad/mullvadvpn/model/RelayListCity");
+ let name = env.auto_local(JObject::from(self.name.into_java(env)));
+ let code = env.auto_local(JObject::from(self.code.into_java(env)));
+ let relays = env.auto_local(self.relays.into_java(env));
+ let parameters = [
+ JValue::Object(name.as_obj()),
+ JValue::Object(code.as_obj()),
+ JValue::Object(relays.as_obj()),
+ ];
+
+ env.new_object(
+ &class,
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V",
+ &parameters,
+ )
+ .expect("Failed to create RelayListCity Java object")
+ }
+}
+
+impl<'env> IntoJava<'env> for Relay {
+ type JavaType = JObject<'env>;
+
+ fn into_java(self, env: &JNIEnv<'env>) -> Self::JavaType {
+ let class = get_class("net/mullvad/mullvadvpn/model/Relay");
+ let hostname = env.auto_local(JObject::from(self.hostname.into_java(env)));
+ let parameters = [JValue::Object(hostname.as_obj())];
+
+ env.new_object(&class, "(Ljava/lang/String;)V", &parameters)
+ .expect("Failed to create Relay Java object")
+ }
+}
+
impl<'env> IntoJava<'env> for Settings {
type JavaType = JObject<'env>;
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 61a0d602bf..9e9f055a6a 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -21,6 +21,10 @@ const LOG_FILENAME: &str = "daemon.log";
const CLASSES_TO_LOAD: &[&str] = &[
"java/util/ArrayList",
"net/mullvad/mullvadvpn/model/AccountData",
+ "net/mullvad/mullvadvpn/model/Relay",
+ "net/mullvad/mullvadvpn/model/RelayList",
+ "net/mullvad/mullvadvpn/model/RelayListCity",
+ "net/mullvad/mullvadvpn/model/RelayListCountry",
"net/mullvad/mullvadvpn/model/Settings",
];