summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-12-18 14:34:51 +0000
committerAleksandr Granin <aleksandr@mullvad.net>2021-04-08 13:26:19 +0200
commit7135b23554cf45124c202e475525c6c8406b88e5 (patch)
treeb8a7f75225a32f2922e9677fcad28d68a250db19 /android/src
parent710aa4e8cb1ec7a8a454fea8b48be407618f325a (diff)
downloadmullvadvpn-7135b23554cf45124c202e475525c6c8406b88e5.tar.xz
mullvadvpn-7135b23554cf45124c202e475525c6c8406b88e5.zip
Move split tunneling initialization to main thread
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt38
2 files changed, 17 insertions, 22 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt
index a69715653b..23b127addf 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt
@@ -45,7 +45,6 @@ class DaemonInstance(val vpnService: MullvadVpnService) {
var isRunning = true
prepareFiles()
- vpnService.splitTunneling.join()
while (isRunning) {
if (!waitForCommand(channel, Command.START)) {
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 946568a83d..c798699e41 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadVpnService.kt
@@ -9,7 +9,6 @@ import android.os.IBinder
import android.os.Looper
import android.util.Log
import kotlin.properties.Delegates.observable
-import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
@@ -77,9 +76,13 @@ class MullvadVpnService : TalpidVpnService() {
private lateinit var tunnelStateUpdater: TunnelStateUpdater
private var pendingAction by observable<PendingAction?>(null) { _, _, _ ->
- instance?.let { activeInstance ->
- endpoint.settingsListener.settings?.let { currentSettings ->
- handlePendingAction(activeInstance.connectionProxy, currentSettings)
+ val connectionProxy = instance?.connectionProxy
+
+ // The service instance awaits the split tunneling initialization, which also starts the
+ // endpoint. So if the instance is not null, the endpoint has certainly been initialized.
+ if (connectionProxy != null) {
+ endpoint.settingsListener.settings?.let { settings ->
+ handlePendingAction(connectionProxy, settings)
}
}
}
@@ -92,18 +95,24 @@ class MullvadVpnService : TalpidVpnService() {
notificationManager.lockedToForeground = isUiVisible or isBound
}
- internal val splitTunneling = CompletableDeferred<SplitTunneling>()
+ internal lateinit var splitTunneling: SplitTunneling
+ private set
override fun onCreate() {
super.onCreate()
Log.d(TAG, "Initializing service")
- initializeSplitTunneling()
-
daemonInstance = DaemonInstance(this)
keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
tunnelStateUpdater = TunnelStateUpdater(this, serviceNotifier)
+ splitTunneling = SplitTunneling(this@MullvadVpnService).apply {
+ onChange = { excludedApps ->
+ disallowedApps = excludedApps
+ markTunAsStale()
+ }
+ }
+
endpoint = ServiceEndpoint(
Looper.getMainLooper(),
daemonInstance.intermittentDaemon,
@@ -113,6 +122,7 @@ class MullvadVpnService : TalpidVpnService() {
notificationManager =
ForegroundNotificationManager(this, serviceNotifier, keyguardManager).apply {
acknowledgeStartForegroundService()
+ accountNumberEvents = endpoint.settingsListener.accountNumberNotifier
}
daemonInstance.apply {
@@ -200,17 +210,6 @@ class MullvadVpnService : TalpidVpnService() {
set(value) { this@MullvadVpnService.isUiVisible = value }
}
- private fun initializeSplitTunneling() = GlobalScope.launch(Dispatchers.Default) {
- splitTunneling.complete(
- SplitTunneling(this@MullvadVpnService).apply {
- onChange = { excludedApps ->
- disallowedApps = excludedApps
- markTunAsStale()
- }
- }
- )
- }
-
private fun handleDaemonInstance(daemon: MullvadDaemon?) {
setUpDaemonJob?.cancel()
@@ -239,9 +238,6 @@ class MullvadVpnService : TalpidVpnService() {
private suspend fun setUpInstance(daemon: MullvadDaemon, settings: Settings) {
val connectionProxy = ConnectionProxy(this, daemon)
val customDns = CustomDns(daemon, endpoint.settingsListener)
- val splitTunneling = splitTunneling.await()
-
- notificationManager.accountNumberEvents = endpoint.settingsListener.accountNumberNotifier
splitTunneling.onChange = { excludedApps ->
disallowedApps = excludedApps