summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2017-10-18 13:49:14 +0200
committerLinus Färnstrand <linus@mullvad.net>2017-10-18 14:38:56 +0200
commit7468c729f28d03ac036a533dae80ab764b23d688 (patch)
treeefcf134faa28928b98b4b52cf32812cea93d883c
parent64d54367508d297e58c11bbcde573165c658b614 (diff)
downloadmullvadvpn-7468c729f28d03ac036a533dae80ab764b23d688.tar.xz
mullvadvpn-7468c729f28d03ac036a533dae80ab764b23d688.zip
Add shutdown RPC call to daemon
-rw-r--r--mullvad-daemon/src/main.rs2
-rw-r--r--mullvad-daemon/src/management_interface.rs12
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,