From 680fe07b6ea000ee29ac28e2f48665433e7011df Mon Sep 17 00:00:00 2001 From: pacien Date: Wed, 14 Feb 2018 01:25:48 +0100 Subject: Properly get daemon state --- .../java/org/pacien/tincapp/service/TincVpnService.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt') diff --git a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt index 278d20a..ec0512a 100644 --- a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt +++ b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt @@ -6,6 +6,7 @@ import android.net.Uri import android.net.VpnService import android.os.ParcelFileDescriptor import android.util.Log +import java8.util.concurrent.CompletableFuture import org.apache.commons.configuration2.ex.ConversionException import org.bouncycastle.openssl.PEMException import org.pacien.tincapp.BuildConfig @@ -82,8 +83,8 @@ class TincVpnService : VpnService() { return reportError(resources.getString(R.string.message_could_not_decrypt_private_keys_format, e.message)) } - Tincd.start(netName, deviceFd!!.fd, privateKeys.first?.fd, privateKeys.second?.fd) - setState(true, netName, interfaceCfg, deviceFd) + val daemon = Tincd.start(netName, deviceFd!!.fd, privateKeys.first?.fd, privateKeys.second?.fd) + setState(netName, interfaceCfg, deviceFd, daemon) Log.i(TAG, "tinc daemon started.") } @@ -111,16 +112,17 @@ class TincVpnService : VpnService() { val TAG = this::class.java.canonicalName!! - private var connected: Boolean = false private var netName: String? = null private var interfaceCfg: VpnInterfaceConfiguration? = null private var fd: ParcelFileDescriptor? = null + private var daemon: CompletableFuture? = null - private fun setState(connected: Boolean, netName: String?, interfaceCfg: VpnInterfaceConfiguration?, fd: ParcelFileDescriptor?) { - TincVpnService.connected = connected + private fun setState(netName: String?, interfaceCfg: VpnInterfaceConfiguration?, + fd: ParcelFileDescriptor?, daemon: CompletableFuture?) { TincVpnService.netName = netName TincVpnService.interfaceCfg = interfaceCfg TincVpnService.fd = fd + TincVpnService.daemon = daemon } fun startVpn(netName: String, passphrase: String? = null) { @@ -132,18 +134,19 @@ class TincVpnService : VpnService() { try { Log.i(TAG, "Stopping any running tinc daemon.") if (netName != null) Tinc.stop(netName!!) + daemon?.get() fd?.close() Log.i(TAG, "All tinc daemons stopped.") } catch (e: IOException) { Log.wtf(TAG, e) } finally { - setState(false, null, null, null) + setState(null, null, null, null) } } fun getCurrentNetName() = netName fun getCurrentInterfaceCfg() = interfaceCfg - fun isConnected() = connected + fun isConnected() = !(daemon?.isDone ?: true) } -- cgit v1.2.3