summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt3
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt5
-rw-r--r--mullvad-jni/src/daemon_interface.rs8
-rw-r--r--mullvad-jni/src/lib.rs22
-rw-r--r--mullvad-types/src/settings/mod.rs1
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.