summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2023-09-26 12:12:25 +0200
committerAlbin <albin@mullvad.net>2023-09-26 12:12:25 +0200
commitc9deafba75ec38f7bc4631d99417767002980b8e (patch)
tree5c001e9173a9efa8ba37db0817cd70a61cb8de3d /android
parent29bb3f728840f3766728000da5122f07ff3f0fdb (diff)
parentb9c814f858429b20dd640b786f8c586ea79ec08a (diff)
downloadmullvadvpn-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.kt16
-rw-r--r--android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/FileResourceExtractor.kt23
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()
+ }
+}