summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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"));
}
}