summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt4
-rw-r--r--mullvad-jni/src/lib.rs28
2 files changed, 23 insertions, 9 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 60dce6ff10..494dac3276 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
@@ -24,7 +24,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
init {
System.loadLibrary("mullvad_jni")
- initialize(vpnService)
+ initialize(vpnService, vpnService.cacheDir.absolutePath)
onSettingsChange.notify(getSettings())
}
@@ -113,7 +113,7 @@ class MullvadDaemon(val vpnService: MullvadVpnService) {
return verifyWireguardKey(daemonInterfaceAddress)
}
- private external fun initialize(vpnService: MullvadVpnService)
+ private external fun initialize(vpnService: MullvadVpnService, cacheDirectory: String)
private external fun deinitialize()
private external fun connect(daemonInterfaceAddress: Long)
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index a95b4ae308..a1078710a8 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -42,9 +42,6 @@ pub enum Error {
#[error(display = "Failed to create global reference to Java object")]
CreateGlobalReference(#[error(cause)] jnix::jni::errors::Error),
- #[error(display = "Failed to get cache directory path")]
- GetCacheDir(#[error(source)] mullvad_paths::Error),
-
#[error(display = "Failed to get Java VM instance")]
GetJvmInstance(#[error(cause)] jnix::jni::errors::Error),
@@ -95,14 +92,16 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_initial
env: JNIEnv<'_>,
this: JObject<'_>,
vpnService: JObject<'_>,
+ cacheDirectory: JObject<'_>,
) {
let env = JnixEnv::from(env);
+ let cache_dir = PathBuf::from(String::from_java(&env, cacheDirectory));
match *LOG_INIT_RESULT {
Ok(ref log_dir) => {
LOAD_CLASSES.call_once(|| env.preload_classes(classes::CLASSES.iter().cloned()));
- if let Err(error) = initialize(&env, &this, &vpnService, log_dir.clone()) {
+ if let Err(error) = initialize(&env, &this, &vpnService, cache_dir, log_dir.clone()) {
log::error!("{}", error.display_chain());
}
}
@@ -129,13 +128,21 @@ fn initialize(
env: &JnixEnv<'_>,
this: &JObject<'_>,
vpn_service: &JObject<'_>,
+ cache_dir: PathBuf,
log_dir: PathBuf,
) -> Result<(), Error> {
let android_context = create_android_context(env, *vpn_service)?;
let daemon_command_channel = DaemonCommandChannel::new();
let daemon_interface = Box::new(DaemonInterface::new(daemon_command_channel.sender()));
- spawn_daemon(env, this, log_dir, daemon_command_channel, android_context)?;
+ spawn_daemon(
+ env,
+ this,
+ cache_dir,
+ log_dir,
+ daemon_command_channel,
+ android_context,
+ )?;
set_daemon_interface_address(env, this, Box::into_raw(daemon_interface) as jlong);
@@ -157,6 +164,7 @@ fn create_android_context(
fn spawn_daemon(
env: &JnixEnv<'_>,
this: &JObject<'_>,
+ cache_dir: PathBuf,
log_dir: PathBuf,
command_channel: DaemonCommandChannel,
android_context: AndroidContext,
@@ -170,7 +178,13 @@ fn spawn_daemon(
thread::spawn(move || {
let jvm = android_context.jvm.clone();
- match create_daemon(listener, log_dir, command_channel, android_context) {
+ match create_daemon(
+ listener,
+ cache_dir,
+ log_dir,
+ command_channel,
+ android_context,
+ ) {
Ok(daemon) => {
let _ = tx.send(Ok(()));
match daemon.run() {
@@ -191,12 +205,12 @@ fn spawn_daemon(
fn create_daemon(
listener: JniEventListener,
+ cache_dir: PathBuf,
log_dir: PathBuf,
command_channel: DaemonCommandChannel,
android_context: AndroidContext,
) -> Result<Daemon<JniEventListener>, Error> {
let resource_dir = mullvad_paths::get_resource_dir();
- let cache_dir = mullvad_paths::cache_dir().map_err(Error::GetCacheDir)?;
Daemon::start(
Some(log_dir),