diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-11-22 14:40:32 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-12-03 12:30:32 +0000 |
| commit | a3ecc32e80a92ef582a84563695f0036d6021478 (patch) | |
| tree | 3dac17788aadd940bed0fab7bfbf93e950f0685f | |
| parent | c28bf78f2d5f018e9fe3d594160e77d39f4f47e5 (diff) | |
| download | mullvadvpn-a3ecc32e80a92ef582a84563695f0036d6021478.tar.xz mullvadvpn-a3ecc32e80a92ef582a84563695f0036d6021478.zip | |
Create `AndroidContext` in `mullvad-jni`
| -rw-r--r-- | mullvad-jni/src/lib.rs | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 0e00decd04..c8503e6e8a 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -27,7 +27,7 @@ use std::{ sync::{mpsc, Once}, thread, }; -use talpid_types::ErrorExt; +use talpid_types::{android::AndroidContext, ErrorExt}; const LOG_FILENAME: &str = "daemon.log"; @@ -42,12 +42,18 @@ static LOAD_CLASSES: Once = Once::new(); #[derive(Debug, err_derive::Error)] #[error(no_from)] pub enum Error { + #[error(display = "Failed to create global reference to Java object")] + CreateGlobalReference(#[error(cause)] jnix::jni::errors::Error), + #[error(display = "Failed to create VpnService tunnel provider")] CreateVpnServiceTunProvider(#[error(source)] vpn_service_tun_provider::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), + #[error(display = "Failed to get log directory path")] GetLogDir(#[error(source)] mullvad_paths::Error), @@ -130,6 +136,7 @@ fn initialize( vpn_service: &JObject, log_dir: PathBuf, ) -> Result<(), Error> { + let android_context = create_android_context(env, *vpn_service)?; let tun_provider = VpnServiceTunProvider::new(env, vpn_service).map_err(Error::CreateVpnServiceTunProvider)?; let daemon_command_sender = spawn_daemon(env, this, tun_provider, log_dir)?; @@ -139,6 +146,15 @@ fn initialize( Ok(()) } +fn create_android_context(env: &JnixEnv, vpn_service: JObject) -> Result<AndroidContext, Error> { + Ok(AndroidContext { + jvm: env.get_java_vm().map_err(Error::GetJvmInstance)?, + vpn_service: env + .new_global_ref(vpn_service) + .map_err(Error::CreateGlobalReference)?, + }) +} + fn spawn_daemon( env: &JnixEnv, this: &JObject, |
