summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/offline/mod.rs5
-rw-r--r--talpid-core/src/offline/windows.rs2
-rw-r--r--talpid-core/src/split_tunnel/windows/mod.rs79
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs6
-rw-r--r--talpid-core/src/window.rs2
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;
}