diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-03-02 12:13:09 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-04-13 13:06:29 +0200 |
| commit | db2accf33367d37d71c907333af6885032329e68 (patch) | |
| tree | bc13fd570af52d3eb9608d4a8ea1ba55d28e661c | |
| parent | 415989085ecab89968761027327a0cc9648a56c1 (diff) | |
| download | mullvadvpn-db2accf33367d37d71c907333af6885032329e68.tar.xz mullvadvpn-db2accf33367d37d71c907333af6885032329e68.zip | |
Pass tokio runtime to WireguardMonitor
| -rw-r--r-- | talpid-core/src/tunnel/mod.rs | 4 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/mod.rs | 3 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 3 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 16 |
4 files changed, 18 insertions, 8 deletions
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs index a5b763cad1..769297b7c8 100644 --- a/talpid-core/src/tunnel/mod.rs +++ b/talpid-core/src/tunnel/mod.rs @@ -148,6 +148,7 @@ impl TunnelMonitor { /// on tunnel state changes. #[cfg_attr(any(target_os = "android", windows), allow(unused_variables))] pub fn start<L>( + runtime: tokio::runtime::Handle, tunnel_parameters: &TunnelParameters, log_dir: &Option<PathBuf>, resource_dir: &Path, @@ -170,6 +171,7 @@ impl TunnelMonitor { TunnelParameters::OpenVpn(_) => Err(Error::UnsupportedPlatform), TunnelParameters::Wireguard(config) => Self::start_wireguard_tunnel( + runtime, &config, log_file, on_event, @@ -200,6 +202,7 @@ impl TunnelMonitor { } fn start_wireguard_tunnel<L>( + runtime: tokio::runtime::Handle, params: &wireguard_types::TunnelParameters, log: Option<PathBuf>, on_event: L, @@ -211,6 +214,7 @@ impl TunnelMonitor { { let config = wireguard::config::Config::from_parameters(¶ms)?; let monitor = wireguard::WireguardMonitor::start( + runtime, &config, log.as_ref().map(|p| p.as_path()), on_event, diff --git a/talpid-core/src/tunnel/wireguard/mod.rs b/talpid-core/src/tunnel/wireguard/mod.rs index 9fe6bec4e7..a1ed3c692d 100644 --- a/talpid-core/src/tunnel/wireguard/mod.rs +++ b/talpid-core/src/tunnel/wireguard/mod.rs @@ -74,12 +74,15 @@ lazy_static! { impl WireguardMonitor { /// Starts a WireGuard tunnel with the given config pub fn start<F: Fn(TunnelEvent) + Send + Sync + Clone + 'static>( + runtime: tokio::runtime::Handle, config: &Config, log_path: Option<&Path>, on_event: F, tun_provider: &mut TunProvider, route_manager: &mut routing::RouteManager, ) -> Result<WireguardMonitor> { + // FIXME: Set up udp2tcp and use it for peer config here + let tunnel = Self::open_tunnel(&config, log_path, tun_provider, route_manager)?; let iface_name = tunnel.get_interface_name().to_string(); diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index f9f4a00764..5257475d63 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -89,6 +89,7 @@ impl ConnectingState { } fn start_tunnel( + runtime: tokio::runtime::Handle, parameters: TunnelParameters, log_dir: &Option<PathBuf>, resource_dir: &Path, @@ -102,6 +103,7 @@ impl ConnectingState { }; let monitor = TunnelMonitor::start( + runtime, ¶meters, log_dir, resource_dir, @@ -420,6 +422,7 @@ impl TunnelState for ConnectingState { } match Self::start_tunnel( + shared_values.runtime.clone(), tunnel_parameters, &shared_values.log_dir, &shared_values.resource_dir, diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index 90012a8296..509a1a0e43 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -139,7 +139,7 @@ pub async fn spawn( } }; - state_machine.run(runtime, state_change_listener); + state_machine.run(state_change_listener); if shutdown_tx.send(()).is_err() { log::error!("Can't send shutdown completion to daemon"); @@ -222,9 +222,10 @@ impl TunnelStateMachine { let firewall = Firewall::new(args).map_err(Error::InitFirewallError)?; let dns_monitor = DnsMonitor::new(cache_dir).map_err(Error::InitDnsMonitorError)?; - let route_manager = - RouteManager::new(runtime, HashSet::new()).map_err(Error::InitRouteManagerError)?; + let route_manager = RouteManager::new(runtime.clone(), HashSet::new()) + .map_err(Error::InitRouteManagerError)?; let mut shared_values = SharedTunnelStateValues { + runtime, firewall, dns_monitor, route_manager, @@ -250,13 +251,11 @@ impl TunnelStateMachine { }) } - fn run( - mut self, - runtime: tokio::runtime::Handle, - change_listener: impl Sender<TunnelStateTransition> + Send + 'static, - ) { + fn run(mut self, change_listener: impl Sender<TunnelStateTransition> + Send + 'static) { use EventConsequence::*; + let runtime = self.shared_values.runtime.clone(); + while let Some(state_wrapper) = self.current_state.take() { match state_wrapper.handle_event(&runtime, &mut self.commands, &mut self.shared_values) { @@ -295,6 +294,7 @@ pub trait TunnelParametersGenerator: Send + 'static { /// Values that are common to all tunnel states. struct SharedTunnelStateValues { + runtime: tokio::runtime::Handle, firewall: Firewall, dns_monitor: DnsMonitor, route_manager: RouteManager, |
