summaryrefslogtreecommitdiffhomepage
path: root/mullvad-jni/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-10 12:59:18 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-10 12:59:18 -0300
commitc9b3e7f007b0dd340ea810bca05abef36a325b7f (patch)
tree9f97bb036d5ffebb87151286605d338269a04e1f /mullvad-jni/src
parenta043900434227595f05002abf65a3684e1ceb27a (diff)
parent4b78acd9e140044b7faa46ec08d40ced06ad39df (diff)
downloadmullvadvpn-c9b3e7f007b0dd340ea810bca05abef36a325b7f.tar.xz
mullvadvpn-c9b3e7f007b0dd340ea810bca05abef36a325b7f.zip
Merge branch 'allow-lan-ui-setting'
Diffstat (limited to 'mullvad-jni/src')
-rw-r--r--mullvad-jni/src/daemon_interface.rs8
-rw-r--r--mullvad-jni/src/from_java.rs13
-rw-r--r--mullvad-jni/src/lib.rs22
3 files changed, 42 insertions, 1 deletions
diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs
index fdd03435bf..7071dee363 100644
--- a/mullvad-jni/src/daemon_interface.rs
+++ b/mullvad-jni/src/daemon_interface.rs
@@ -168,6 +168,14 @@ impl DaemonInterface {
rx.wait().map_err(|_| Error::NoResponse)
}
+ pub fn set_allow_lan(&self, allow_lan: bool) -> Result<()> {
+ let (tx, rx) = oneshot::channel();
+
+ self.send_command(ManagementCommand::SetAllowLan(tx, allow_lan))?;
+
+ rx.wait().map_err(|_| Error::NoResponse)
+ }
+
pub fn shutdown(&self) -> Result<()> {
self.send_command(ManagementCommand::Shutdown)
}
diff --git a/mullvad-jni/src/from_java.rs b/mullvad-jni/src/from_java.rs
index 9cccd738d7..3caf3fd523 100644
--- a/mullvad-jni/src/from_java.rs
+++ b/mullvad-jni/src/from_java.rs
@@ -1,6 +1,9 @@
use crate::is_null::IsNull;
use jnix::{
- jni::objects::{JObject, JString},
+ jni::{
+ objects::{JObject, JString},
+ sys::{jboolean, JNI_FALSE},
+ },
JnixEnv,
};
use mullvad_types::relay_constraints::{
@@ -14,6 +17,14 @@ pub trait FromJava<'env> {
fn from_java(env: &JnixEnv<'env>, source: Self::JavaType) -> Self;
}
+impl<'env> FromJava<'env> for bool {
+ type JavaType = jboolean;
+
+ fn from_java(_: &JnixEnv<'env>, source: Self::JavaType) -> Self {
+ source != JNI_FALSE
+ }
+}
+
impl<'env, T> FromJava<'env> for Option<T>
where
T: FromJava<'env>,
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index 89528da8c6..7e6dd7f99f 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -650,6 +650,28 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setAcco
#[no_mangle]
#[allow(non_snake_case)]
+pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setAllowLan(
+ env: JNIEnv<'_>,
+ _: JObject<'_>,
+ daemon_interface_address: jlong,
+ allow_lan: jboolean,
+) {
+ let env = JnixEnv::from(env);
+
+ if let Some(daemon_interface) = get_daemon_interface(daemon_interface_address) {
+ let allow_lan = bool::from_java(&env, allow_lan);
+
+ if let Err(error) = daemon_interface.set_allow_lan(allow_lan) {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Failed to set allow LAN")
+ );
+ }
+ }
+}
+
+#[no_mangle]
+#[allow(non_snake_case)]
pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_shutdown(
_: JNIEnv<'_>,
_: JObject<'_>,