diff options
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.kt | 14 |
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 |