diff options
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt | 3 | ||||
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt | 5 | ||||
| -rw-r--r-- | mullvad-jni/src/daemon_interface.rs | 8 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 22 | ||||
| -rw-r--r-- | mullvad-types/src/settings/mod.rs | 1 |
5 files changed, 37 insertions, 2 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt index 6cc83b157f..77a45e03a8 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt @@ -3,5 +3,6 @@ package net.mullvad.mullvadvpn.model data class Settings( var accountToken: String?, var relaySettings: RelaySettings, - var allowLan: Boolean + var allowLan: Boolean, + var autoConnect: Boolean ) diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt index a0dabf1a53..df608dab69 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt @@ -89,6 +89,10 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { setAllowLan(daemonInterfaceAddress, allowLan) } + fun setAutoConnect(autoConnect: Boolean) { + setAutoConnect(daemonInterfaceAddress, autoConnect) + } + fun shutdown() { shutdown(daemonInterfaceAddress) } @@ -122,6 +126,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) { private external fun getWireguardKey(daemonInterfaceAddress: Long): PublicKey? private external fun setAccount(daemonInterfaceAddress: Long, accountToken: String?) private external fun setAllowLan(daemonInterfaceAddress: Long, allowLan: Boolean) + private external fun setAutoConnect(daemonInterfaceAddress: Long, alwaysOn: Boolean) private external fun shutdown(daemonInterfaceAddress: Long) private external fun updateRelaySettings( daemonInterfaceAddress: Long, diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs index 5515668e08..a376fa6aa8 100644 --- a/mullvad-jni/src/daemon_interface.rs +++ b/mullvad-jni/src/daemon_interface.rs @@ -184,6 +184,14 @@ impl DaemonInterface { rx.wait().map_err(|_| Error::NoResponse) } + pub fn set_auto_connect(&self, auto_connect: bool) -> Result<()> { + let (tx, rx) = oneshot::channel(); + + self.send_command(ManagementCommand::SetAutoConnect(tx, auto_connect))?; + + rx.wait().map_err(|_| Error::NoResponse) + } + pub fn shutdown(&self) -> Result<()> { self.send_command(ManagementCommand::Shutdown) } diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 5f4cae6e1c..dd1fd939b8 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -694,6 +694,28 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setAllo #[no_mangle] #[allow(non_snake_case)] +pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setAutoConnect( + env: JNIEnv<'_>, + _: JObject<'_>, + daemon_interface_address: jlong, + auto_connect: jboolean, +) { + let env = JnixEnv::from(env); + + if let Some(daemon_interface) = get_daemon_interface(daemon_interface_address) { + let auto_connect = bool::from_java(&env, auto_connect); + + if let Err(error) = daemon_interface.set_auto_connect(auto_connect) { + log::error!( + "{}", + error.display_chain_with_msg("Failed to set auto-connect") + ); + } + } +} + +#[no_mangle] +#[allow(non_snake_case)] pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_shutdown( _: JNIEnv<'_>, _: JObject<'_>, diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs index 19f350b7f7..ed7080f67d 100644 --- a/mullvad-types/src/settings/mod.rs +++ b/mullvad-types/src/settings/mod.rs @@ -71,7 +71,6 @@ pub struct Settings { #[cfg_attr(target_os = "android", jnix(skip))] block_when_disconnected: bool, /// If the daemon should connect the VPN tunnel directly on start or not. - #[cfg_attr(target_os = "android", jnix(skip))] auto_connect: bool, /// Options that should be applied to tunnels of a specific type regardless of where the relays /// might be located. |
