summaryrefslogtreecommitdiffhomepage
path: root/mullvad-jni/src/from_java.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mullvad-jni/src/from_java.rs')
-rw-r--r--mullvad-jni/src/from_java.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/mullvad-jni/src/from_java.rs b/mullvad-jni/src/from_java.rs
index dde51cc74a..3acd9717ef 100644
--- a/mullvad-jni/src/from_java.rs
+++ b/mullvad-jni/src/from_java.rs
@@ -3,7 +3,9 @@ use jni::{
objects::{JObject, JString},
JNIEnv,
};
-use mullvad_types::relay_constraints::{Constraint, LocationConstraint, RelayConstraintsUpdate};
+use mullvad_types::relay_constraints::{
+ Constraint, LocationConstraint, RelayConstraintsUpdate, RelaySettingsUpdate,
+};
use std::fmt::Debug;
pub trait FromJava<'env> {
@@ -113,6 +115,25 @@ impl<'env> FromJava<'env> for RelayConstraintsUpdate {
}
}
+impl<'env> FromJava<'env> for RelaySettingsUpdate {
+ type JavaType = JObject<'env>;
+
+ fn from_java(env: &JNIEnv<'env>, source: Self::JavaType) -> Self {
+ let custom_tunnel_endpoint_class =
+ "net/mullvad/mullvadvpn/model/RelaySettingsUpdate$CustomTunnelEndpoint";
+ let relay_constraints_update_class =
+ "net/mullvad/mullvadvpn/model/RelaySettingsUpdate$RelayConstraintsUpdate";
+
+ if is_instance_of(env, source, custom_tunnel_endpoint_class) {
+ unimplemented!("Can't specify custom tunnels from Android app");
+ } else if is_instance_of(env, source, relay_constraints_update_class) {
+ RelaySettingsUpdate::Normal(RelayConstraintsUpdate::from_java(env, source))
+ } else {
+ panic!("Invalid RelaySettingsUpdate Java sub-class");
+ }
+ }
+}
+
fn is_instance_of<'env>(
env: &JNIEnv<'env>,
object: JObject<'env>,