summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-14 19:15:34 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-15 13:13:11 +0000
commit935f1205aa2cf5bf2d349b88822494b9d5b6faef (patch)
tree75d8173fded1e75c6d3baed7bcf9e4bbd0b2db7d
parent0272f52f801f54e3a744c0d5976373be7f5d8191 (diff)
downloadmullvadvpn-935f1205aa2cf5bf2d349b88822494b9d5b6faef.tar.xz
mullvadvpn-935f1205aa2cf5bf2d349b88822494b9d5b6faef.zip
Implement `MullvadDaemon.reconnect()`
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt5
-rw-r--r--mullvad-jni/src/daemon_interface.rs13
-rw-r--r--mullvad-jni/src/lib.rs17
3 files changed, 28 insertions, 7 deletions
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 df608dab69..65d123e31a 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
@@ -81,6 +81,10 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
return getWireguardKey(daemonInterfaceAddress)
}
+ fun reconnect() {
+ reconnect(daemonInterfaceAddress)
+ }
+
fun setAccount(accountToken: String?) {
setAccount(daemonInterfaceAddress, accountToken)
}
@@ -124,6 +128,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
private external fun getState(daemonInterfaceAddress: Long): TunnelState
private external fun getVersionInfo(daemonInterfaceAddress: Long): AppVersionInfo?
private external fun getWireguardKey(daemonInterfaceAddress: Long): PublicKey?
+ private external fun reconnect(daemonInterfaceAddress: Long)
private external fun setAccount(daemonInterfaceAddress: Long, accountToken: String?)
private external fun setAllowLan(daemonInterfaceAddress: Long, allowLan: Boolean)
private external fun setAutoConnect(daemonInterfaceAddress: Long, alwaysOn: Boolean)
diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs
index a376fa6aa8..ceda7b5fd6 100644
--- a/mullvad-jni/src/daemon_interface.rs
+++ b/mullvad-jni/src/daemon_interface.rs
@@ -60,13 +60,6 @@ impl DaemonInterface {
Ok(())
}
- // TODO: Implement this all the way on Android. This method is currently unused.
- #[allow(dead_code)]
- pub fn reconnect(&self) -> Result<()> {
- self.send_command(ManagementCommand::Reconnect)?;
- Ok(())
- }
-
pub fn generate_wireguard_key(&self) -> Result<KeygenEvent> {
let (tx, rx) = oneshot::channel();
@@ -153,6 +146,12 @@ impl DaemonInterface {
rx.wait().map_err(|_| Error::NoResponse)
}
+ pub fn reconnect(&self) -> Result<()> {
+ self.send_command(ManagementCommand::Reconnect)?;
+
+ Ok(())
+ }
+
pub fn get_wireguard_key(&self) -> Result<Option<wireguard::PublicKey>> {
let (tx, rx) = oneshot::channel();
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index dd1fd939b8..3be27632b4 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -653,6 +653,23 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_getWire
#[no_mangle]
#[allow(non_snake_case)]
+pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_reconnect(
+ _: JNIEnv<'_>,
+ _: JObject<'_>,
+ daemon_interface_address: jlong,
+) {
+ if let Some(daemon_interface) = get_daemon_interface(daemon_interface_address) {
+ if let Err(error) = daemon_interface.reconnect() {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Failed to request daemon to reconnect")
+ );
+ }
+ }
+}
+
+#[no_mangle]
+#[allow(non_snake_case)]
pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setAccount(
env: JNIEnv<'_>,
_: JObject<'_>,