diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-10-16 11:59:01 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-10-22 09:33:58 +0200 |
| commit | cb4a5587cac2ed3e051ec9b787230a02bf477990 (patch) | |
| tree | c4e6444be0b41be585ba39fdc666d7d753fe8f86 | |
| parent | c60f24ededf5371d25f70b5744d099c2c8ad0e52 (diff) | |
| download | mullvadvpn-cb4a5587cac2ed3e051ec9b787230a02bf477990.tar.xz mullvadvpn-cb4a5587cac2ed3e051ec9b787230a02bf477990.zip | |
Add daemon command for setting custom DNS
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index f100befc10..3acf4eb11d 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -48,6 +48,7 @@ use std::{ io, marker::PhantomData, mem, + net::IpAddr, path::PathBuf, sync::{mpsc as sync_mpsc, Arc, Weak}, time::Duration, @@ -192,6 +193,8 @@ pub enum DaemonCommand { SetBridgeState(oneshot::Sender<Result<(), settings::Error>>, BridgeState), /// Set if IPv6 should be enabled in the tunnel SetEnableIpv6(oneshot::Sender<()>, bool), + /// Set custom DNS servers to use instead of passing requests to the gateway + SetCustomDns(oneshot::Sender<()>, Option<Vec<IpAddr>>), /// Set MTU for wireguard tunnels SetWireguardMtu(oneshot::Sender<()>, Option<u16>), /// Set automatic key rotation interval for wireguard tunnels @@ -1040,6 +1043,7 @@ where } SetBridgeState(tx, bridge_state) => self.on_set_bridge_state(tx, bridge_state), SetEnableIpv6(tx, enable_ipv6) => self.on_set_enable_ipv6(tx, enable_ipv6), + SetCustomDns(tx, dns_servers) => self.on_set_custom_dns(tx, dns_servers), SetWireguardMtu(tx, mtu) => self.on_set_wireguard_mtu(tx, mtu), SetWireguardRotationInterval(tx, interval) => { self.on_set_wireguard_rotation_interval(tx, interval).await @@ -1678,6 +1682,21 @@ where } } + fn on_set_custom_dns(&mut self, tx: oneshot::Sender<()>, servers: Option<Vec<IpAddr>>) { + let save_result = self.settings.set_custom_dns(servers.clone()); + match save_result { + Ok(settings_changed) => { + Self::oneshot_send(tx, (), "set_custom_dns response"); + if settings_changed { + self.event_listener + .notify_settings(self.settings.to_settings()); + self.send_tunnel_command(TunnelCommand::CustomDns(servers)); + } + } + Err(e) => error!("{}", e.display_chain_with_msg("Unable to save settings")), + } + } + fn on_set_wireguard_mtu(&mut self, tx: oneshot::Sender<()>, mtu: Option<u16>) { let save_result = self.settings.set_wireguard_mtu(mtu); match save_result { |
