diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-02-21 12:46:08 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-02-24 12:45:12 +0000 |
| commit | 5cfb94874a30dd67252898ab6f647a5942709d45 (patch) | |
| tree | 3cb6e54a4e98414538b9c2af1d931524f3f913d0 | |
| parent | 829d519bb3abca8dd92c2182b55f8487e872e251 (diff) | |
| download | mullvadvpn-5cfb94874a30dd67252898ab6f647a5942709d45.tar.xz mullvadvpn-5cfb94874a30dd67252898ab6f647a5942709d45.zip | |
Create `DaemonCommandChannel` in `mullvad-jni`
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 13 | ||||
| -rw-r--r-- | mullvad-jni/src/lib.rs | 21 |
2 files changed, 18 insertions, 16 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 6752005a55..5fc605d990 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -505,13 +505,12 @@ where log_dir: Option<PathBuf>, resource_dir: PathBuf, cache_dir: PathBuf, + command_channel: DaemonCommandChannel, #[cfg(target_os = "android")] android_context: AndroidContext, - ) -> Result<(Self, DaemonCommandSender), Error> { - let (tx, rx) = futures::sync::mpsc::unbounded(); - let command_sender = Arc::new(tx); - let event_sender = DaemonEventSender::new(Arc::downgrade(&command_sender)); + ) -> Result<Self, Error> { + let (event_sender, rx) = command_channel.destructure(); - let daemon = Self::start_internal( + Self::start_internal( event_sender, rx, event_listener, @@ -520,9 +519,7 @@ where cache_dir, #[cfg(target_os = "android")] android_context, - )?; - - Ok((daemon, DaemonCommandSender(command_sender))) + ) } fn start_internal( diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index 30b443b434..846614b22f 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -17,7 +17,7 @@ use jnix::{ FromJava, IntoJava, JnixEnv, }; use lazy_static::lazy_static; -use mullvad_daemon::{logging, version, Daemon, DaemonCommandSender}; +use mullvad_daemon::{logging, version, Daemon, DaemonCommandChannel}; use mullvad_types::account::AccountData; use std::{ path::{Path, PathBuf}, @@ -131,8 +131,10 @@ fn initialize( log_dir: PathBuf, ) -> Result<(), Error> { let android_context = create_android_context(env, *vpn_service)?; - let daemon_command_sender = spawn_daemon(env, this, log_dir, android_context)?; - let daemon_interface = Box::new(DaemonInterface::new(daemon_command_sender)); + 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)?; set_daemon_interface_address(env, this, Box::into_raw(daemon_interface) as jlong); @@ -155,8 +157,9 @@ fn spawn_daemon( env: &JnixEnv<'_>, this: &JObject<'_>, log_dir: PathBuf, + command_channel: DaemonCommandChannel, android_context: AndroidContext, -) -> Result<DaemonCommandSender, Error> { +) -> Result<(), Error> { let listener = JniEventListener::spawn(env, this).map_err(Error::SpawnJniEventListener)?; let daemon_object = env .new_global_ref(*this) @@ -166,9 +169,9 @@ fn spawn_daemon( thread::spawn(move || { let jvm = android_context.jvm.clone(); - match create_daemon(listener, log_dir, android_context) { - Ok((daemon, command_sender)) => { - let _ = tx.send(Ok(command_sender)); + match create_daemon(listener, log_dir, command_channel, android_context) { + Ok(daemon) => { + let _ = tx.send(Ok(())); match daemon.run() { Ok(()) => log::info!("Mullvad daemon has stopped"), Err(error) => log::error!("{}", error.display_chain()), @@ -188,8 +191,9 @@ fn spawn_daemon( fn create_daemon( listener: JniEventListener, log_dir: PathBuf, + command_channel: DaemonCommandChannel, android_context: AndroidContext, -) -> Result<(Daemon<JniEventListener>, DaemonCommandSender), Error> { +) -> Result<Daemon<JniEventListener>, Error> { let resource_dir = mullvad_paths::get_resource_dir(); let cache_dir = mullvad_paths::cache_dir().map_err(Error::GetCacheDir)?; @@ -198,6 +202,7 @@ fn create_daemon( Some(log_dir), resource_dir, cache_dir, + command_channel, android_context, ) .map_err(Error::InitializeDaemon) |
