diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-02-21 20:15:14 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2020-02-24 12:45:12 +0000 |
| commit | 2d5fea04f0ef00b416ebee5cd50baefab55a6a32 (patch) | |
| tree | 188601a08d46407d45b0f077ad3339cf8d2aa215 | |
| parent | e2510e946ae280eaf9fe456268f6817cd9949d4a (diff) | |
| download | mullvadvpn-2d5fea04f0ef00b416ebee5cd50baefab55a6a32.tar.xz mullvadvpn-2d5fea04f0ef00b416ebee5cd50baefab55a6a32.zip | |
Spawn management interface outside daemon
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 2 | ||||
| -rw-r--r-- | mullvad-daemon/src/main.rs | 39 |
2 files changed, 36 insertions, 5 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 2eb97c16f5..98371ab9b5 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -7,7 +7,7 @@ extern crate serde; mod account_history; mod geoip; pub mod logging; -mod management_interface; +pub mod management_interface; mod relays; pub mod rpc_uniqueness_check; mod settings; diff --git a/mullvad-daemon/src/main.rs b/mullvad-daemon/src/main.rs index 2f567b27d1..21feb3c4dd 100644 --- a/mullvad-daemon/src/main.rs +++ b/mullvad-daemon/src/main.rs @@ -1,7 +1,11 @@ #![deny(rust_2018_idioms)] use log::{debug, error, info, warn}; -use mullvad_daemon::{logging, rpc_uniqueness_check, version, Daemon, DaemonCommandChannel}; +use mullvad_daemon::{ + logging, + management_interface::{ManagementInterfaceEventBroadcaster, ManagementInterfaceServer}, + rpc_uniqueness_check, version, Daemon, DaemonCommandChannel, DaemonCommandSender, +}; use std::{path::PathBuf, thread, time::Duration}; use talpid_types::ErrorExt; @@ -105,15 +109,42 @@ fn run_standalone(log_dir: Option<PathBuf>) -> Result<(), String> { Ok(()) } -fn create_daemon(log_dir: Option<PathBuf>) -> Result<Daemon, String> { +fn create_daemon( + log_dir: Option<PathBuf>, +) -> Result<Daemon<ManagementInterfaceEventBroadcaster>, String> { let resource_dir = mullvad_paths::get_resource_dir(); let cache_dir = mullvad_paths::cache_dir() .map_err(|e| e.display_chain_with_msg("Unable to get cache dir"))?; let command_channel = DaemonCommandChannel::new(); + let event_listener = spawn_management_interface(command_channel.sender())?; - Daemon::start(log_dir, resource_dir, cache_dir, command_channel) - .map_err(|e| e.display_chain_with_msg("Unable to initialize daemon")) + Daemon::start_with_event_listener( + event_listener, + log_dir, + resource_dir, + cache_dir, + command_channel, + ) + .map_err(|e| e.display_chain_with_msg("Unable to initialize daemon")) +} + +fn spawn_management_interface( + command_sender: DaemonCommandSender, +) -> Result<ManagementInterfaceEventBroadcaster, String> { + let server = ManagementInterfaceServer::start(command_sender).map_err(|error| { + error.display_chain_with_msg("Unable to start management interface server") + })?; + let event_broadcaster = server.event_broadcaster(); + + info!("Management interface listening on {}", server.socket_path()); + + thread::spawn(|| { + server.wait(); + info!("Management interface shut down"); + }); + + Ok(event_broadcaster) } #[cfg(unix)] |
