summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-12-15 10:44:19 +0100
committerDavid Lönnhager <david.l@mullvad.net>2023-01-10 11:58:51 +0100
commitf7ad580f5e72d12a63014d0ca295fa1b6cff10bd (patch)
treefe6778bf01b8275eb8f611a887e54d0d3289ab0a
parentc72be74adbde77f3e6f33a038e5b870108a52196 (diff)
downloadmullvadvpn-f7ad580f5e72d12a63014d0ca295fa1b6cff10bd.tar.xz
mullvadvpn-f7ad580f5e72d12a63014d0ca295fa1b6cff10bd.zip
Add no-op reset method to the DNS monitor
-rw-r--r--talpid-core/src/dns/mod.rs12
-rw-r--r--talpid-core/src/dns/windows.rs6
-rw-r--r--talpid-core/src/tunnel_state_machine/connected_state.rs2
3 files changed, 19 insertions, 1 deletions
diff --git a/talpid-core/src/dns/mod.rs b/talpid-core/src/dns/mod.rs
index ae902da09e..1a08ec265c 100644
--- a/talpid-core/src/dns/mod.rs
+++ b/talpid-core/src/dns/mod.rs
@@ -79,6 +79,14 @@ impl DnsMonitor {
log::info!("Resetting DNS");
self.inner.reset()
}
+
+ /// Reset DNS settings to what they were before being set by this instance.
+ /// If the settings only affect a specific interface, this can be a no-op,
+ /// as the interface will be destroyed.
+ pub fn reset_before_interface_removal(&mut self) -> Result<(), Error> {
+ log::info!("Resetting DNS");
+ self.inner.reset_before_interface_removal()
+ }
}
trait DnsMonitorT: Sized {
@@ -93,4 +101,8 @@ trait DnsMonitorT: Sized {
fn set(&mut self, interface: &str, servers: &[IpAddr]) -> Result<(), Self::Error>;
fn reset(&mut self) -> Result<(), Self::Error>;
+
+ fn reset_before_interface_removal(&mut self) -> Result<(), Self::Error> {
+ self.reset()
+ }
}
diff --git a/talpid-core/src/dns/windows.rs b/talpid-core/src/dns/windows.rs
index adfe3e01e9..68742b9266 100644
--- a/talpid-core/src/dns/windows.rs
+++ b/talpid-core/src/dns/windows.rs
@@ -123,6 +123,12 @@ impl super::DnsMonitorT for DnsMonitor {
}
Ok(())
}
+
+ fn reset_before_interface_removal(&mut self) -> Result<(), Self::Error> {
+ // do nothing since the tunnel interface goes away
+ let _ = self.current_index.take();
+ Ok(())
+ }
}
fn run_netsh_with_timeout(netsh_input: String, timeout: Duration) -> Result<(), Error> {
diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs
index 5fc02d1052..de9f43335e 100644
--- a/talpid-core/src/tunnel_state_machine/connected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connected_state.rs
@@ -141,7 +141,7 @@ impl ConnectedState {
}
fn reset_dns(shared_values: &mut SharedTunnelStateValues) {
- if let Err(error) = shared_values.dns_monitor.reset() {
+ if let Err(error) = shared_values.dns_monitor.reset_before_interface_removal() {
log::error!("{}", error.display_chain_with_msg("Unable to reset DNS"));
}
}