diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-08-06 10:27:48 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-08-06 10:27:48 +0200 |
| commit | 199af3a70cef8deaa025b413b00c6d6e5c18c6b5 (patch) | |
| tree | 11408af4249f4523121ef8d72a4c909c315cbb1d | |
| parent | b4656f82e7030d86601e1a9fa047f5f087793dde (diff) | |
| parent | aade03ffb92dfe9b82d8cc7b2da823bb767dc41e (diff) | |
| download | mullvadvpn-199af3a70cef8deaa025b413b00c6d6e5c18c6b5.tar.xz mullvadvpn-199af3a70cef8deaa025b413b00c6d6e5c18c6b5.zip | |
Merge branch 'quick-fix-reset-settings'
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 19a9a2e949..db86abda54 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -2638,9 +2638,57 @@ impl Daemon { } async fn on_reset_settings(&mut self, tx: ResponseTx<(), settings::Error>) { - self.disconnect_tunnel(); let result = self.settings.reset().await; Self::oneshot_send(tx, result, "reset_settings response"); + + // TODO: All of the functions below should probably be handled by settings observers + // whenever settings are updated. For instance, changing "allow_lan" should probably + // cause a tunnel command to be sent. + + #[cfg(any(target_os = "windows", target_os = "macos", target_os = "android"))] + { + let (tx, _rx) = oneshot::channel(); + self.send_tunnel_command(TunnelCommand::SetExcludedApps(tx, vec![])); + } + + let (tx, _rx) = oneshot::channel(); + self.send_tunnel_command(TunnelCommand::BlockWhenDisconnected( + self.settings.block_when_disconnected, + tx, + )); + + let (tx, _rx) = oneshot::channel(); + self.send_tunnel_command(TunnelCommand::AllowLan(self.settings.allow_lan, tx)); + + let (tx, _rx) = oneshot::channel(); + let dns = dns::addresses_from_options(&self.settings.tunnel_options.dns_options); + self.send_tunnel_command(TunnelCommand::Dns(dns, tx)); + + self.version_updater_handle + .set_show_beta_releases(self.settings.show_beta_releases) + .await; + let access_mode_handler = self.access_mode_handler.clone(); + tokio::spawn(async move { + if let Err(error) = access_mode_handler.rotate().await { + log::error!("Failed to rotate API endpoint: {error}"); + } + }); + + let interval = self.settings.tunnel_options.wireguard.rotation_interval; + let account_manager = self.account_manager.clone(); + tokio::spawn(async move { + if let Err(error) = account_manager + .set_rotation_interval(interval.unwrap_or_default()) + .await + { + log::error!( + "{}", + error.display_chain_with_msg("Failed to update rotation interval") + ); + } + }); + + self.reconnect_tunnel(); } fn oneshot_send<T>(tx: oneshot::Sender<T>, t: T, msg: &'static str) { |
