diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2017-10-18 13:49:14 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2017-10-18 14:38:56 +0200 |
| commit | 7468c729f28d03ac036a533dae80ab764b23d688 (patch) | |
| tree | efcf134faa28928b98b4b52cf32812cea93d883c | |
| parent | 64d54367508d297e58c11bbcde573165c658b614 (diff) | |
| download | mullvadvpn-7468c729f28d03ac036a533dae80ab764b23d688.tar.xz mullvadvpn-7468c729f28d03ac036a533dae80ab764b23d688.zip | |
Add shutdown RPC call to daemon
| -rw-r--r-- | mullvad-daemon/src/main.rs | 2 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/mullvad-daemon/src/main.rs b/mullvad-daemon/src/main.rs index c427c252bb..e804dcace8 100644 --- a/mullvad-daemon/src/main.rs +++ b/mullvad-daemon/src/main.rs @@ -320,6 +320,7 @@ impl Daemon { SetAccount(tx, account_token) => self.on_set_account(tx, account_token), GetAccount(tx) => Ok(self.on_get_account(tx)), SetCustomRelay(tx, relay_endpoint) => self.on_set_custom_relay(tx, relay_endpoint), + Shutdown => self.handle_trigger_shutdown_event(), } } @@ -635,6 +636,7 @@ fn run() -> Result<()> { daemon.run()?; debug!("Mullvad daemon is quitting"); + thread::sleep(Duration::from_millis(500)); Ok(()) } diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index e2fb6f33f7..829f843fca 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -91,6 +91,10 @@ build_rpc_trait! { #[rpc(name = "get_location")] fn get_location(&self) -> Result<Location, Error>; + /// Makes the daemon exit its main loop and quit. + #[rpc(meta, name = "shutdown")] + fn shutdown(&self, Self::Metadata) -> BoxFuture<(), Error>; + #[pubsub(name = "new_state")] { /// Subscribes to the `new_state` event notifications. #[rpc(name = "new_state_subscribe")] @@ -131,6 +135,8 @@ pub enum TunnelCommand { GetAccount(OneshotSender<Option<AccountToken>>), /// Set a custom relay instead of the default list of relays SetCustomRelay(OneshotSender<()>, Option<RelayEndpoint>), + /// Makes the daemon exit the main loop and quit. + Shutdown, } #[derive(Default)] @@ -441,6 +447,12 @@ impl<T: From<TunnelCommand> + 'static + Send> ManagementInterfaceApi for Managem }) } + fn shutdown(&self, meta: Self::Metadata) -> BoxFuture<(), Error> { + trace!("shutdown"); + try_future!(self.check_auth(&meta)); + self.send_command_to_daemon(TunnelCommand::Shutdown) + } + fn new_state_subscribe( &self, meta: Self::Metadata, |
