diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-05-24 13:50:11 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-05-29 12:55:01 +0200 |
| commit | 461bb179af039b2ab9622f8df2c2bffd09a21b77 (patch) | |
| tree | 38f67fdda816084a54d888d3f4df0a5d3754e85a /talpid-core/src | |
| parent | 2b04fed8d6a486d97af47f1add45b0eeb1071db8 (diff) | |
| download | mullvadvpn-461bb179af039b2ab9622f8df2c2bffd09a21b77.tar.xz mullvadvpn-461bb179af039b2ab9622f8df2c2bffd09a21b77.zip | |
Add error state cause for full disk permissions error
Diffstat (limited to 'talpid-core/src')
| -rw-r--r-- | talpid-core/src/split_tunnel/macos/mod.rs | 17 | ||||
| -rw-r--r-- | talpid-core/src/split_tunnel/macos/process.rs | 10 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connected_state.rs | 6 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 6 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 8 |
5 files changed, 30 insertions, 17 deletions
diff --git a/talpid-core/src/split_tunnel/macos/mod.rs b/talpid-core/src/split_tunnel/macos/mod.rs index 980097d94b..d43c124043 100644 --- a/talpid-core/src/split_tunnel/macos/mod.rs +++ b/talpid-core/src/split_tunnel/macos/mod.rs @@ -42,6 +42,16 @@ impl Error { } } +impl From<&Error> for ErrorStateCause { + fn from(value: &Error) -> Self { + match value { + Error::Process(error) => ErrorStateCause::from(error), + _v if _v.is_offline() => ErrorStateCause::IsOffline, + _ => ErrorStateCause::SplitTunnelError, + } + } +} + /// Split tunneling actor pub struct SplitTunnel { state: State, @@ -171,6 +181,10 @@ impl SplitTunnel { /// Handle process monitor unexpectedly stopping fn handle_process_monitor_shutdown(&mut self, result: Result<(), process::Error>) { + let cause = match result { + Ok(_) => ErrorStateCause::SplitTunnelError, + Err(ref error) => ErrorStateCause::from(error), + }; match result { Ok(()) => log::error!("Process monitor stopped unexpectedly with no error"), Err(error) => { @@ -185,8 +199,7 @@ impl SplitTunnel { // decisions for new processes if self.state.active() { if let Some(tunnel_tx) = self.tunnel_tx.upgrade() { - let _ = tunnel_tx - .unbounded_send(TunnelCommand::Block(ErrorStateCause::SplitTunnelError)); + let _ = tunnel_tx.unbounded_send(TunnelCommand::Block(cause)); } } diff --git a/talpid-core/src/split_tunnel/macos/process.rs b/talpid-core/src/split_tunnel/macos/process.rs index f913b9bb49..013aca34e4 100644 --- a/talpid-core/src/split_tunnel/macos/process.rs +++ b/talpid-core/src/split_tunnel/macos/process.rs @@ -21,6 +21,7 @@ use std::{ time::Duration, }; use talpid_platform_metadata::MacosVersion; +use talpid_types::tunnel::ErrorStateCause; use tokio::io::{AsyncBufReadExt, BufReader}; const SHUTDOWN_TIMEOUT: Duration = Duration::from_secs(3); @@ -56,6 +57,15 @@ pub enum Error { FindProcessPath(#[source] io::Error, u32), } +impl From<&Error> for ErrorStateCause { + fn from(value: &Error) -> Self { + match value { + Error::NeedFullDiskPermissions => ErrorStateCause::NeedFullDiskPermissions, + _ => ErrorStateCause::SplitTunnelError, + } + } +} + pub struct ProcessMonitor(()); #[derive(Debug)] diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs index 80ca26ec56..395a67a057 100644 --- a/talpid-core/src/tunnel_state_machine/connected_state.rs +++ b/talpid-core/src/tunnel_state_machine/connected_state.rs @@ -353,11 +353,9 @@ impl ConnectedState { } } Err(error) => { + let cause = ErrorStateCause::from(&error); let _ = result_tx.send(Err(error)); - return self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::SplitTunnelError), - ); + return self.disconnect(shared_values, AfterDisconnect::Block(cause)); } } SameState(self) diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index 5df58a6adf..a4267d0d56 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -498,11 +498,9 @@ impl ConnectingState { } } Err(error) => { + let cause = ErrorStateCause::from(&error); let _ = result_tx.send(Err(error)); - return self.disconnect( - shared_values, - AfterDisconnect::Block(ErrorStateCause::SplitTunnelError), - ); + return self.disconnect(shared_values, AfterDisconnect::Block(cause)); } } SameState(self) diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index e31dec3624..a74d7e39b5 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -540,13 +540,7 @@ impl SharedTunnelStateValues { error.display_chain_with_msg("Failed to set VPN interface for split tunnel") ) }) - .map_err(|error| { - if error.is_offline() { - ErrorStateCause::IsOffline - } else { - ErrorStateCause::SplitTunnelError - } - }) + .map_err(|error| ErrorStateCause::from(&error)) } pub fn set_allow_lan(&mut self, allow_lan: bool) -> Result<(), ErrorStateCause> { |
