diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-02-27 11:41:09 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-02-28 10:07:53 +0100 |
| commit | a56982b262aa88d1ee6d87f6857556f9a602a5b9 (patch) | |
| tree | fb38ed5a208f1964a6b23c67955e00609cae66e3 | |
| parent | 5a74b9bc46961c65e1623d45449dc6414cfc51c2 (diff) | |
| download | mullvadvpn-a56982b262aa88d1ee6d87f6857556f9a602a5b9.tar.xz mullvadvpn-a56982b262aa88d1ee6d87f6857556f9a602a5b9.zip | |
Initialize obfuscation correctly
| -rw-r--r-- | talpid-wireguard/src/lib.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/talpid-wireguard/src/lib.rs b/talpid-wireguard/src/lib.rs index 1dffe191fd..e81d7bf4b6 100644 --- a/talpid-wireguard/src/lib.rs +++ b/talpid-wireguard/src/lib.rs @@ -9,12 +9,13 @@ use futures::future::{abortable, AbortHandle as FutureAbortHandle, BoxFuture, Fu use futures::{channel::mpsc, StreamExt}; #[cfg(target_os = "linux")] use lazy_static::lazy_static; +#[cfg(target_os = "android")] +use std::borrow::Cow; #[cfg(target_os = "linux")] use std::env; #[cfg(windows)] use std::io; use std::{ - borrow::Cow, convert::Infallible, net::IpAddr, path::Path, @@ -245,11 +246,20 @@ impl WireguardMonitor { let endpoint_addrs: Vec<IpAddr> = config.peers.iter().map(|peer| peer.endpoint.ip()).collect(); + let (close_obfs_sender, close_obfs_listener) = sync_mpsc::channel(); + let obfuscator = args.runtime.block_on(maybe_create_obfuscator( + &mut config, + close_obfs_sender.clone(), + ))?; + #[cfg(target_os = "windows")] let (setup_done_tx, setup_done_rx) = mpsc::channel(0); let tunnel = Self::open_tunnel( args.runtime.clone(), + #[cfg(target_os = "android")] &Self::patch_allowed_ips(&config, psk_negotiation), + #[cfg(not(target_os = "android"))] + &config, log_path, args.resource_dir, args.tun_provider.clone(), @@ -260,12 +270,6 @@ impl WireguardMonitor { )?; let iface_name = tunnel.get_interface_name(); - let (close_obfs_sender, close_obfs_listener) = sync_mpsc::channel(); - - let obfuscator = Arc::new(AsyncMutex::new(args.runtime.block_on( - maybe_create_obfuscator(&mut config, close_obfs_sender.clone()), - )?)); - #[cfg(target_os = "android")] if let Some(remote_socket_fd) = obfuscator.as_ref().map(|obfs| obfs.remote_socket_fd()) { // Exclude remote obfuscation socket or bridge @@ -275,6 +279,8 @@ impl WireguardMonitor { } } + let obfuscator = Arc::new(AsyncMutex::new(obfuscator)); + let event_callback = Box::new(on_event.clone()); let (pinger_tx, pinger_rx) = sync_mpsc::channel(); let monitor = WireguardMonitor { @@ -543,6 +549,7 @@ impl WireguardMonitor { /// Replace `0.0.0.0/0`/`::/0` with the gateway IPs when `gateway_only` is true. /// Used to block traffic to other destinations while connecting on Android. + #[cfg(target_os = "android")] fn patch_allowed_ips(config: &Config, gateway_only: bool) -> Cow<'_, Config> { if gateway_only { let mut patched_config = config.clone(); |
