From 3c1a29e2b8717a20948773bbc21abdc723ce5dee Mon Sep 17 00:00:00 2001 From: pacien Date: Sat, 24 Feb 2018 01:37:36 +0100 Subject: Handle daemon startup failures --- .../main/java/org/pacien/tincapp/service/TincVpnService.kt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 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 dfdbb32..223763d 100644 --- a/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt +++ b/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt @@ -94,12 +94,18 @@ class TincVpnService : VpnService() { val daemon = Tincd.start(netName, deviceFd.fd, privateKeys.first?.fd, privateKeys.second?.fd) setState(netName, interfaceCfg, deviceFd, daemon) - waitForDaemonStartup().thenRun { + + waitForDaemonStartup().whenComplete { _, exception -> deviceFd.close() privateKeys.first?.close() privateKeys.second?.close() - Log.i(TAG, "tinc daemon started.") - broadcastEvent(Actions.EVENT_CONNECTED) + + if (exception != null) { + reportError(resources.getString(R.string.message_daemon_exited, exception.cause!!.message!!), exception) + } else { + Log.i(TAG, "tinc daemon started.") + broadcastEvent(Actions.EVENT_CONNECTED) + } } } @@ -132,7 +138,7 @@ class TincVpnService : VpnService() { private fun waitForDaemonStartup() = CompletableFuture .runAsync { Thread.sleep(SETUP_DELAY) } - .thenCompose { netName?.let { Tinc.pid(it) } ?: CompletableFuture.completedFuture(0) } + .thenCompose { if (daemon!!.isDone) daemon!! else CompletableFuture.runAsync { } } companion object { private const val SETUP_DELAY = 500L // ms -- cgit v1.2.3