summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-21 12:46:08 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-24 12:45:12 +0000
commit5cfb94874a30dd67252898ab6f647a5942709d45 (patch)
tree3cb6e54a4e98414538b9c2af1d931524f3f913d0
parent829d519bb3abca8dd92c2182b55f8487e872e251 (diff)
downloadmullvadvpn-5cfb94874a30dd67252898ab6f647a5942709d45.tar.xz
mullvadvpn-5cfb94874a30dd67252898ab6f647a5942709d45.zip
Create `DaemonCommandChannel` in `mullvad-jni`
-rw-r--r--mullvad-daemon/src/lib.rs13
-rw-r--r--mullvad-jni/src/lib.rs21
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)