summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-13 12:00:24 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-13 12:00:24 -0300
commit8dabfcfc8950e9b249a10cf4ebd964f8685dc5dc (patch)
treed5ec667e71457bd2934584db5bbe26b0074d4877 /android
parentb73ab60bb5bf94409a0b49f91b355de43c62c06c (diff)
parent4ba5fcde44e30f2c59edb9457fdd4aa571a1feb0 (diff)
downloadmullvadvpn-8dabfcfc8950e9b249a10cf4ebd964f8685dc5dc.tar.xz
mullvadvpn-8dabfcfc8950e9b249a10cf4ebd964f8685dc5dc.zip
Merge branch 'restart-service-on-daemon-crash'
Diffstat (limited to 'android')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt5
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt26
2 files changed, 24 insertions, 7 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
index c3b1661907..a175efc5ca 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
@@ -20,6 +20,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
var onKeygenEvent: ((KeygenEvent) -> Unit)? = null
var onRelayListChange: ((RelayList) -> Unit)? = null
var onTunnelStateChange: ((TunnelState) -> Unit)? = null
+ var onDaemonStopped: (() -> Unit)? = null
init {
System.loadLibrary("mullvad_jni")
@@ -138,6 +139,10 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
onTunnelStateChange?.invoke(event)
}
+ private fun notifyDaemonStopped() {
+ onDaemonStopped?.invoke()
+ }
+
private fun finalize() {
deinitialize()
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
index f22094dfe9..6d8747f915 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -34,8 +34,7 @@ class MullvadVpnService : TalpidVpnService() {
override fun onRebind(intent: Intent) {
if (isStopping) {
- tearDown()
- setUp()
+ restart()
isStopping = false
}
}
@@ -46,7 +45,6 @@ class MullvadVpnService : TalpidVpnService() {
override fun onDestroy() {
tearDown()
- daemon.cancel()
super.onDestroy()
}
@@ -72,6 +70,12 @@ class MullvadVpnService : TalpidVpnService() {
onSettingsChange.subscribe { settings ->
notificationManager.loggedIn = settings?.accountToken != null
}
+
+ onDaemonStopped = {
+ if (!isStopping) {
+ restart()
+ }
+ }
}
serviceNotifier.notify(ServiceInstance(daemon, connectionProxy, connectivityListener))
@@ -88,20 +92,28 @@ class MullvadVpnService : TalpidVpnService() {
private fun stop() {
isStopping = true
+ stopDaemon()
+ stopSelf()
+ }
- serviceNotifier.notify(null)
-
+ private fun stopDaemon() {
if (daemon.isCompleted) {
runBlocking { daemon.await().shutdown() }
} else {
daemon.cancel()
}
-
- stopSelf()
}
private fun tearDown() {
+ serviceNotifier.notify(null)
+ stopDaemon()
+
connectionProxy.onDestroy()
notificationManager.onDestroy()
}
+
+ private fun restart() {
+ tearDown()
+ setUp()
+ }
}