summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-11-21 22:55:05 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-11-23 13:05:40 +0000
commit66631ae9cfdaa8e6faba3abb3f3a40a18310fe04 (patch)
tree9371d4e6948e8aa8ca5a442f6e0147163056c961
parent1e514b22e961f8f29941fdd8188e0874cc9b8e11 (diff)
downloadmullvadvpn-66631ae9cfdaa8e6faba3abb3f3a40a18310fe04.tar.xz
mullvadvpn-66631ae9cfdaa8e6faba3abb3f3a40a18310fe04.zip
Return boolean to indicate if tunnel is up
Allows the tunnel state machine to determine if it is blocking connections when entering the error state.
-rw-r--r--android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt4
-rw-r--r--talpid-core/src/tunnel/tun_provider/android/mod.rs8
2 files changed, 8 insertions, 4 deletions
diff --git a/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt b/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt
index 93c7f32c36..a0dfd029f2 100644
--- a/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/talpid/TalpidVpnService.kt
@@ -55,11 +55,13 @@ open class TalpidVpnService : VpnService() {
}
}
- fun createTunIfClosed() {
+ fun createTunIfClosed(): Boolean {
synchronized(this) {
if (activeTunDevice == null) {
activeTunDevice = createTun(currentTunConfig)
}
+
+ return activeTunDevice?.let { tunFd -> tunFd > 0 } ?: false
}
}
diff --git a/talpid-core/src/tunnel/tun_provider/android/mod.rs b/talpid-core/src/tunnel/tun_provider/android/mod.rs
index e4e8f4fbac..c744ca96fa 100644
--- a/talpid-core/src/tunnel/tun_provider/android/mod.rs
+++ b/talpid-core/src/tunnel/tun_provider/android/mod.rs
@@ -7,6 +7,7 @@ use jnix::{
jni::{
objects::{GlobalRef, JValue},
signature::{JavaType, Primitive},
+ sys::JNI_FALSE,
JavaVM,
},
IntoJava, JnixEnv,
@@ -133,13 +134,14 @@ impl AndroidTunProvider {
pub fn create_tun_if_closed(&mut self) -> Result<(), Error> {
let result = self.call_method(
"createTunIfClosed",
- "()V",
- JavaType::Primitive(Primitive::Void),
+ "()Z",
+ JavaType::Primitive(Primitive::Boolean),
&[],
)?;
match result {
- JValue::Void => Ok(()),
+ JValue::Bool(JNI_FALSE) => Err(Error::TunnelDeviceError),
+ JValue::Bool(_) => Ok(()),
value => Err(Error::InvalidMethodResult(
"createTunIfClosed",
format!("{:?}", value),