diff options
| -rw-r--r-- | talpid-core/src/offline/mod.rs | 5 | ||||
| -rw-r--r-- | talpid-core/src/offline/windows.rs | 2 | ||||
| -rw-r--r-- | talpid-core/src/split_tunnel/windows/mod.rs | 79 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 6 | ||||
| -rw-r--r-- | talpid-core/src/window.rs | 2 |
5 files changed, 3 insertions, 91 deletions
diff --git a/talpid-core/src/offline/mod.rs b/talpid-core/src/offline/mod.rs index a227b5e102..e2df51e4e1 100644 --- a/talpid-core/src/offline/mod.rs +++ b/talpid-core/src/offline/mod.rs @@ -1,5 +1,3 @@ -#[cfg(target_os = "windows")] -use crate::window::PowerManagementListener; use futures::channel::mpsc::UnboundedSender; #[cfg(any(target_os = "linux", target_os = "windows"))] use talpid_routing::RouteManagerHandle; @@ -47,7 +45,6 @@ pub async fn spawn_monitor( #[cfg(any(target_os = "linux", target_os = "windows"))] route_manager: RouteManagerHandle, #[cfg(target_os = "linux")] fwmark: Option<u32>, #[cfg(target_os = "android")] android_context: AndroidContext, - #[cfg(target_os = "windows")] power_mgmt_rx: PowerManagementListener, ) -> Result<MonitorHandle, Error> { let monitor = if !*FORCE_DISABLE_OFFLINE_MONITOR { Some( @@ -59,8 +56,6 @@ pub async fn spawn_monitor( fwmark, #[cfg(target_os = "android")] android_context, - #[cfg(target_os = "windows")] - power_mgmt_rx, ) .await?, ) diff --git a/talpid-core/src/offline/windows.rs b/talpid-core/src/offline/windows.rs index 0709caa4ea..77e8fca968 100644 --- a/talpid-core/src/offline/windows.rs +++ b/talpid-core/src/offline/windows.rs @@ -205,8 +205,8 @@ pub type MonitorHandle = BroadcastListener; pub async fn spawn_monitor( sender: UnboundedSender<bool>, route_manager_handle: RouteManagerHandle, - power_mgmt_rx: PowerManagementListener, ) -> Result<MonitorHandle, Error> { + let power_mgmt_rx = crate::window::PowerManagementListener::new(); BroadcastListener::start(sender, route_manager_handle, power_mgmt_rx).await } diff --git a/talpid-core/src/split_tunnel/windows/mod.rs b/talpid-core/src/split_tunnel/windows/mod.rs index f10184ae74..83fb4727e7 100644 --- a/talpid-core/src/split_tunnel/windows/mod.rs +++ b/talpid-core/src/split_tunnel/windows/mod.rs @@ -4,11 +4,7 @@ mod service; mod volume_monitor; mod windows; -use crate::{ - tunnel::TunnelMetadata, - tunnel_state_machine::TunnelCommand, - window::{PowerManagementEvent, PowerManagementListener}, -}; +use crate::{tunnel::TunnelMetadata, tunnel_state_machine::TunnelCommand}; use futures::channel::{mpsc, oneshot}; use std::{ collections::HashMap, @@ -114,14 +110,12 @@ pub struct SplitTunnel { _route_change_callback: Option<CallbackHandle>, daemon_tx: Weak<mpsc::UnboundedSender<TunnelCommand>>, async_path_update_in_progress: Arc<AtomicBool>, - power_mgmt_handle: tokio::task::JoinHandle<()>, route_manager: RouteManagerHandle, } enum Request { SetPaths(Vec<OsString>), RegisterIps(InterfaceAddresses), - Restart, Stop, } type RequestResponseTx = sync_mpsc::Sender<Result<(), Error>>; @@ -182,7 +176,6 @@ impl SplitTunnel { resource_dir: PathBuf, daemon_tx: Weak<mpsc::UnboundedSender<TunnelCommand>>, volume_update_rx: mpsc::UnboundedReceiver<()>, - power_mgmt_rx: PowerManagementListener, route_manager: RouteManagerHandle, ) -> Result<Self, Error> { let excluded_processes = Arc::new(RwLock::new(HashMap::new())); @@ -193,9 +186,6 @@ impl SplitTunnel { let (event_thread, quit_event) = Self::spawn_event_listener(handle, excluded_processes.clone())?; - let power_mgmt_handle = - Self::spawn_power_management_monitor(request_tx.clone(), power_mgmt_rx); - Ok(SplitTunnel { runtime, request_tx, @@ -205,7 +195,6 @@ impl SplitTunnel { daemon_tx, async_path_update_in_progress: Arc::new(AtomicBool::new(false)), excluded_processes, - power_mgmt_handle, route_manager, }) } @@ -496,42 +485,6 @@ impl SplitTunnel { result } } - Request::Restart => { - let monitored_paths_guard = monitored_paths.lock().unwrap(); - (|| { - let state = handle.get_driver_state().map_err(Error::GetState)?; - if state == driver::DriverState::Engaged { - // Leaving the engaged state risks leaking traffic into the tunnel, - // so err on the safe side. - log::warn!( - "Not resetting driver state because it is currently engaged" - ); - return Err(Error::CannotResetEngaged); - } - - handle.reinitialize().map_err(Error::InitializationError)?; - - { - excluded_processes.write().unwrap().clear(); - } - - handle - .register_ips( - previous_addresses.tunnel_ipv4, - previous_addresses.tunnel_ipv6, - previous_addresses.internet_ipv4, - previous_addresses.internet_ipv6, - ) - .map_err(Error::RegisterIps)?; - - if monitored_paths_guard.len() > 0 { - handle - .set_config(&*monitored_paths_guard) - .map_err(Error::SetConfiguration)?; - } - Ok(()) - })() - } Request::Stop => { if let Err(error) = handle.reset().map_err(Error::ResetError) { let _ = response_tx.send(Err(error)); @@ -614,34 +567,6 @@ impl SplitTunnel { .map_err(|_| Error::RequestThreadStuck)? } - fn spawn_power_management_monitor( - request_tx: RequestTx, - mut power_mgmt_rx: PowerManagementListener, - ) -> tokio::task::JoinHandle<()> { - tokio::spawn(async move { - while let Some(event) = power_mgmt_rx.next().await { - match event { - PowerManagementEvent::ResumeAutomatic => { - let tx = request_tx.clone(); - tokio::task::spawn_blocking(move || { - std::thread::sleep(Duration::from_secs(1)); - if let Err(error) = - SplitTunnel::send_request_inner(&tx, Request::Restart) - { - log::error!( - "{}", - error - .display_chain_with_msg("Failed to reinitialize ST module") - ); - } - }); - } - _ => (), - } - } - }) - } - /// Set a list of applications to exclude from the tunnel. pub fn set_paths_sync<T: AsRef<OsStr>>(&self, paths: &[T]) -> Result<(), Error> { self.send_request(Request::SetPaths( @@ -753,8 +678,6 @@ impl SplitTunnel { impl Drop for SplitTunnel { fn drop(&mut self) { - self.power_mgmt_handle.abort(); - if let Some(_event_thread) = self.event_thread.take() { if let Err(error) = self.quit_event.set() { log::error!( diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index b0314cacc8..aa08f5d100 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -277,9 +277,6 @@ impl TunnelStateMachine { #[cfg(target_os = "macos")] let filtering_resolver = crate::resolver::start_resolver().await?; - #[cfg(target_os = "windows")] - let power_mgmt_rx = crate::window::PowerManagementListener::new(); - let route_manager = RouteManager::new( HashSet::new(), #[cfg(target_os = "linux")] @@ -296,7 +293,6 @@ impl TunnelStateMachine { args.resource_dir.clone(), args.command_tx.clone(), volume_update_rx, - power_mgmt_rx.clone(), route_manager .handle() .map_err(Error::InitRouteManagerError)?, @@ -353,8 +349,6 @@ impl TunnelStateMachine { android_context, #[cfg(target_os = "windows")] route_manager.handle()?, - #[cfg(target_os = "windows")] - power_mgmt_rx, ) .await .map_err(Error::OfflineMonitorError)?; diff --git a/talpid-core/src/window.rs b/talpid-core/src/window.rs index d3ba502dde..a9bf945eb1 100644 --- a/talpid-core/src/window.rs +++ b/talpid-core/src/window.rs @@ -162,7 +162,7 @@ impl PowerManagementListener { if message == WM_POWERBROADCAST { if let Some(event) = PowerManagementEvent::try_from_winevent(wparam) { if tx.send(event).is_err() { - log::debug!("Stopping power management event monitor"); + log::error!("Stopping power management event monitor"); unsafe { PostQuitMessage(0) }; return 0; } |
