summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-26 11:13:17 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-07-29 09:29:53 +0000
commitdec65fe1757e94e39de9c9476da46a1431fd5a1e (patch)
tree62c2445506ceeb87268ef1a42fc4eeff8a96fe65
parent928bd2cf769103929bb3f92e66d8142a58d7c192 (diff)
downloadmullvadvpn-dec65fe1757e94e39de9c9476da46a1431fd5a1e.tar.xz
mullvadvpn-dec65fe1757e94e39de9c9476da46a1431fd5a1e.zip
Retry to generate WireGuard keys when app resumes
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt5
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt15
2 files changed, 20 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
index f5fbab1526..d16e36a1b6 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/MainActivity.kt
@@ -87,6 +87,11 @@ class MainActivity : FragmentActivity() {
}
}
+ override fun onResume() {
+ super.onResume()
+ keyStatusListener.onResume()
+ }
+
override fun onStop() {
unbindService(serviceConnection)
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt
index 1279f59567..66b7a96e44 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/KeyStatusListener.kt
@@ -4,12 +4,14 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.Job
import net.mullvad.mullvadvpn.MullvadDaemon
import net.mullvad.mullvadvpn.model.KeygenEvent
class KeyStatusListener(val asyncDaemon: Deferred<MullvadDaemon>) {
private var daemon: MullvadDaemon? = null
+ private var retryJob: Job? = null
private val setUpJob = setUp()
@@ -38,8 +40,21 @@ class KeyStatusListener(val asyncDaemon: Deferred<MullvadDaemon>) {
daemon?.onKeygenEvent = { event -> keyStatus = event }
}
+ fun onResume() {
+ if (keyStatus is KeygenEvent.TooManyKeys || keyStatus is KeygenEvent.GenerationFailure) {
+ retryJob?.cancel()
+ retryJob = retryKeyGeneration()
+ }
+ }
+
fun onDestroy() {
setUpJob.cancel()
+ retryJob?.cancel()
daemon?.onKeygenEvent = null
}
+
+ private fun retryKeyGeneration() = GlobalScope.launch(Dispatchers.Default) {
+ setUpJob.join()
+ keyStatus = daemon?.generateWireguardKey()
+ }
}