diff options
| author | Albin <albin@mullvad.net> | 2023-09-26 12:12:25 +0200 |
|---|---|---|
| committer | Albin <albin@mullvad.net> | 2023-09-26 12:12:25 +0200 |
| commit | c9deafba75ec38f7bc4631d99417767002980b8e (patch) | |
| tree | 5c001e9173a9efa8ba37db0817cd70a61cb8de3d /android | |
| parent | 29bb3f728840f3766728000da5122f07ff3f0fdb (diff) | |
| parent | b9c814f858429b20dd640b786f8c586ea79ec08a (diff) | |
| download | mullvadvpn-c9deafba75ec38f7bc4631d99417767002980b8e.tar.xz mullvadvpn-c9deafba75ec38f7bc4631d99417767002980b8e.zip | |
Merge branch 'fix-unused-bundled-relay-list-droid-363'
Diffstat (limited to 'android')
| -rw-r--r-- | android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt | 16 | ||||
| -rw-r--r-- | android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt | 23 |
2 files changed, 39 insertions, 0 deletions
diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt index 236cdeb84a..8cc292fb95 100644 --- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/DaemonInstance.kt @@ -1,5 +1,6 @@ package net.mullvad.mullvadvpn.service +import java.io.File import kotlin.properties.Delegates.observable import kotlin.reflect.KClass import kotlin.reflect.safeCast @@ -13,6 +14,8 @@ import kotlinx.coroutines.channels.trySendBlocking import net.mullvad.mullvadvpn.lib.common.util.Intermittent import net.mullvad.mullvadvpn.lib.endpoint.ApiEndpointConfiguration +private const val RELAYS_FILE = "relays.json" + class DaemonInstance(private val vpnService: MullvadVpnService) { sealed class Command { data class Start(val apiEndpointConfiguration: ApiEndpointConfiguration) : Command() @@ -44,6 +47,8 @@ class DaemonInstance(private val vpnService: MullvadVpnService) { GlobalScope.actor(Dispatchers.Default, Channel.UNLIMITED) { var isRunning = true + prepareFiles() + while (isRunning) { val startCommand = waitForCommand(channel, Command.Start::class) ?: break startDaemon(startCommand.apiEndpointConfiguration) @@ -67,6 +72,13 @@ class DaemonInstance(private val vpnService: MullvadVpnService) { } } + private fun prepareFiles() { + val shouldOverwriteRelayList = + lastUpdatedTime() > File(vpnService.filesDir, RELAYS_FILE).lastModified() + + FileResourceExtractor(vpnService).apply { extract(RELAYS_FILE, shouldOverwriteRelayList) } + } + private suspend fun startDaemon(apiEndpointConfiguration: ApiEndpointConfiguration) { val newDaemon = MullvadDaemon(vpnService, apiEndpointConfiguration).apply { @@ -83,4 +95,8 @@ class DaemonInstance(private val vpnService: MullvadVpnService) { private fun stopDaemon() { daemon?.shutdown() } + + private fun lastUpdatedTime(): Long { + return vpnService.run { packageManager.getPackageInfo(packageName, 0).lastUpdateTime } + } } diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt new file mode 100644 index 0000000000..71a05e6743 --- /dev/null +++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt @@ -0,0 +1,23 @@ +package net.mullvad.mullvadvpn.service + +import android.content.Context +import java.io.File +import java.io.FileOutputStream + +class FileResourceExtractor(val context: Context) { + fun extract(asset: String, force: Boolean = false) { + val destination = File(context.filesDir, asset) + + if (!destination.exists() || force) { + extractFile(asset, destination) + } + } + + private fun extractFile(asset: String, destination: File) { + val destinationStream = FileOutputStream(destination) + + context.assets.open(asset).copyTo(destinationStream) + + destinationStream.close() + } +} |
