aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt
diff options
context:
space:
mode:
authorpacien2018-02-24 01:37:36 +0100
committerpacien2018-02-24 01:37:36 +0100
commit3c1a29e2b8717a20948773bbc21abdc723ce5dee (patch)
treed802e31724a27ac8d9a1c9e0d2ab730a225d5031 /app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt
parentc29970d29bd3c4831fc2f80077d1d8548ed0fc15 (diff)
downloadtincapp-3c1a29e2b8717a20948773bbc21abdc723ce5dee.tar.gz
Handle daemon startup failures
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt')
-rw-r--r--app/src/main/java/org/pacien/tincapp/service/TincVpnService.kt14
1 files changed, 10 insertions, 4 deletions
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() {
94 94
95 val daemon = Tincd.start(netName, deviceFd.fd, privateKeys.first?.fd, privateKeys.second?.fd) 95 val daemon = Tincd.start(netName, deviceFd.fd, privateKeys.first?.fd, privateKeys.second?.fd)
96 setState(netName, interfaceCfg, deviceFd, daemon) 96 setState(netName, interfaceCfg, deviceFd, daemon)
97 waitForDaemonStartup().thenRun { 97
98 waitForDaemonStartup().whenComplete { _, exception ->
98 deviceFd.close() 99 deviceFd.close()
99 privateKeys.first?.close() 100 privateKeys.first?.close()
100 privateKeys.second?.close() 101 privateKeys.second?.close()
101 Log.i(TAG, "tinc daemon started.") 102
102 broadcastEvent(Actions.EVENT_CONNECTED) 103 if (exception != null) {
104 reportError(resources.getString(R.string.message_daemon_exited, exception.cause!!.message!!), exception)
105 } else {
106 Log.i(TAG, "tinc daemon started.")
107 broadcastEvent(Actions.EVENT_CONNECTED)
108 }
103 } 109 }
104 } 110 }
105 111
@@ -132,7 +138,7 @@ class TincVpnService : VpnService() {
132 private fun waitForDaemonStartup() = 138 private fun waitForDaemonStartup() =
133 CompletableFuture 139 CompletableFuture
134 .runAsync { Thread.sleep(SETUP_DELAY) } 140 .runAsync { Thread.sleep(SETUP_DELAY) }
135 .thenCompose { netName?.let { Tinc.pid(it) } ?: CompletableFuture.completedFuture(0) } 141 .thenCompose { if (daemon!!.isDone) daemon!! else CompletableFuture.runAsync { } }
136 142
137 companion object { 143 companion object {
138 private const val SETUP_DELAY = 500L // ms 144 private const val SETUP_DELAY = 500L // ms