diff options
| author | Linus Färnstrand <linus@mullvad.net> | 2017-07-18 14:23:35 +0200 |
|---|---|---|
| committer | Linus Färnstrand <linus@mullvad.net> | 2017-07-18 15:00:49 +0200 |
| commit | 535f9097ba24fd2060bf724dc7854b729d5c4d6d (patch) | |
| tree | 02fa2ab55f07faa2fa1482387a0da7e5a7506361 | |
| parent | d165d9abd8f9ee13992f02ed9d25e237ea1be2ac (diff) | |
| download | mullvadvpn-535f9097ba24fd2060bf724dc7854b729d5c4d6d.tar.xz mullvadvpn-535f9097ba24fd2060bf724dc7854b729d5c4d6d.zip | |
Make set_account call return error on save failure
| -rw-r--r-- | mullvad-daemon/src/main.rs | 15 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 18 |
2 files changed, 16 insertions, 17 deletions
diff --git a/mullvad-daemon/src/main.rs b/mullvad-daemon/src/main.rs index 680e5dbb90..3710adc087 100644 --- a/mullvad-daemon/src/main.rs +++ b/mullvad-daemon/src/main.rs @@ -271,9 +271,14 @@ impl Daemon { warn!("Unable to send current state to management interface client",); } } - SetAccount(account_token) => { + SetAccount(tx, account_token) => { let save_result = self.settings.set_account_token(account_token); - self.handle_settings_save(save_result); + match save_result.chain_err(|| "Unable to save settings") { + Ok(()) => if let Err(_) = tx.send(()) { + warn!("Unable to send response to management interface client"); + }, + Err(e) => error!("{}", e.display()), + } } GetAccount(tx) => { if let Err(_) = tx.send(self.settings.get_account_token()) { @@ -297,12 +302,6 @@ impl Daemon { self.set_target_state(TargetState::Unsecured) } - fn handle_settings_save(&self, save_result: settings::Result<()>) { - if let Err(e) = save_result.chain_err(|| "Unable to save settings") { - error!("{}", e.display()); - } - } - /// Update the state of the client. If it changed, notify the subscribers and trigger /// appropriate actions. fn set_state(&mut self, new_state: TunnelState) -> Result<()> { diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index ffba3dca0f..f78f991c0e 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -49,8 +49,8 @@ build_rpc_trait! { fn get_countries(&self) -> Result<HashMap<CountryCode, String>, Error>; /// Set which account to connect with. - #[rpc(name = "set_account")] - fn set_account(&self, Option<AccountToken>) -> Result<(), Error>; + #[rpc(async, name = "set_account")] + fn set_account(&self, Option<AccountToken>) -> BoxFuture<(), Error>; /// Get which account is configured. #[rpc(async, name = "get_account")] @@ -118,7 +118,7 @@ pub enum TunnelCommand { /// Request the current state. GetState(sync::oneshot::Sender<DaemonState>), /// Set which account token to use for subsequent connection attempts. - SetAccount(Option<AccountToken>), + SetAccount(sync::oneshot::Sender<()>, Option<AccountToken>), /// Request the current account token being used. GetAccount(sync::oneshot::Sender<Option<AccountToken>>), } @@ -260,13 +260,13 @@ impl<T: From<TunnelCommand> + 'static + Send> ManagementInterfaceApi for Managem Ok(HashMap::new()) } - fn set_account(&self, account_token: Option<AccountToken>) -> Result<(), Error> { + fn set_account(&self, account_token: Option<AccountToken>) -> BoxFuture<(), Error> { trace!("set_account"); - self.tx - .lock() - .unwrap() - .send(TunnelCommand::SetAccount(account_token)) - .map_err(|_| Error::internal_error()) + let (tx, rx) = sync::oneshot::channel(); + match self.tx.lock().unwrap().send(TunnelCommand::SetAccount(tx, account_token)) { + Ok(()) => rx.map_err(|_| Error::internal_error()).boxed(), + Err(_) => future::err(Error::internal_error()).boxed(), + } } fn get_account(&self) -> BoxFuture<Option<AccountToken>, Error> { |
