summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2024-08-06 10:27:48 +0200
committerDavid Lönnhager <david.l@mullvad.net>2024-08-06 10:27:48 +0200
commit199af3a70cef8deaa025b413b00c6d6e5c18c6b5 (patch)
tree11408af4249f4523121ef8d72a4c909c315cbb1d
parentb4656f82e7030d86601e1a9fa047f5f087793dde (diff)
parentaade03ffb92dfe9b82d8cc7b2da823bb767dc41e (diff)
downloadmullvadvpn-199af3a70cef8deaa025b413b00c6d6e5c18c6b5.tar.xz
mullvadvpn-199af3a70cef8deaa025b413b00c6d6e5c18c6b5.zip
Merge branch 'quick-fix-reset-settings'
-rw-r--r--mullvad-daemon/src/lib.rs50
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) {