diff options
| -rw-r--r-- | mullvad-cli/src/cmds/status.rs | 2 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 42 | ||||
| -rw-r--r-- | mullvad-management-interface/proto/management_interface.proto | 2 | ||||
| -rw-r--r-- | talpid-types/src/tunnel.rs | 4 |
4 files changed, 28 insertions, 22 deletions
diff --git a/mullvad-cli/src/cmds/status.rs b/mullvad-cli/src/cmds/status.rs index 339439fffc..b0c4d40ad0 100644 --- a/mullvad-cli/src/cmds/status.rs +++ b/mullvad-cli/src/cmds/status.rs @@ -160,7 +160,7 @@ fn format_endpoint(endpoint: &TunnelEndpoint) -> String { } fn print_error_state(error_state: &ErrorState) { - if !error_state.is_blocking { + if error_state.blocking_error.is_some() { eprintln!("Mullvad daemon failed to setup firewall rules!"); eprintln!("Deamon cannot block traffic from flowing, non-local traffic will leak"); } diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 61df804d3e..c8ec8445d0 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -1335,6 +1335,26 @@ fn convert_state(state: TunnelState) -> types::TunnelState { }; use TunnelState::*; + let map_firewall_error = |firewall_error: &FirewallPolicyError| match firewall_error { + FirewallPolicyError::Generic => ProtoFirewallPolicyError { + r#type: i32::from(PolicyErrorType::Generic), + ..Default::default() + }, + #[cfg(windows)] + FirewallPolicyError::Locked(blocking_app) => { + let (lock_pid, lock_name) = match blocking_app { + Some(app) => (app.pid, app.name.clone()), + None => (0, "".to_string()), + }; + + ProtoFirewallPolicyError { + r#type: i32::from(PolicyErrorType::Locked), + lock_pid, + lock_name, + } + } + }; + let state = match state { Disconnected => ProtoState::Disconnected(tunnel_state::Disconnected {}), Connecting { endpoint, location } => ProtoState::Connecting(tunnel_state::Connecting { @@ -1380,7 +1400,7 @@ fn convert_state(state: TunnelState) -> types::TunnelState { i32::from(ProtoErrorCause::VpnPermissionDenied) } }, - is_blocking: error_state.is_blocking(), + blocking_error: error_state.block_failure().map(map_firewall_error), auth_fail_reason: if let ErrorStateCause::AuthFailed(reason) = error_state.cause() { reason.clone().unwrap_or_default() } else { @@ -1409,25 +1429,7 @@ fn convert_state(state: TunnelState) -> types::TunnelState { policy_error: if let ErrorStateCause::SetFirewallPolicyError(reason) = error_state.cause() { - match reason { - FirewallPolicyError::Generic => Some(ProtoFirewallPolicyError { - r#type: i32::from(PolicyErrorType::Generic), - ..Default::default() - }), - #[cfg(windows)] - FirewallPolicyError::Locked(blocking_app) => { - let (lock_pid, lock_name) = match blocking_app { - Some(app) => (app.pid, app.name.clone()), - None => (0, "".to_string()), - }; - - Some(ProtoFirewallPolicyError { - r#type: i32::from(PolicyErrorType::Locked), - lock_pid, - lock_name, - }) - } - } + Some(map_firewall_error(reason)) } else { None }, diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto index fa0190cbb2..8616163f50 100644 --- a/mullvad-management-interface/proto/management_interface.proto +++ b/mullvad-management-interface/proto/management_interface.proto @@ -119,7 +119,7 @@ message ErrorState { } Cause cause = 1; - bool is_blocking = 2; + FirewallPolicyError blocking_error = 2; // AUTH_FAILED string auth_fail_reason = 3; diff --git a/talpid-types/src/tunnel.rs b/talpid-types/src/tunnel.rs index 00e5bcad50..c803a489a7 100644 --- a/talpid-types/src/tunnel.rs +++ b/talpid-types/src/tunnel.rs @@ -68,6 +68,10 @@ impl ErrorState { pub fn cause(&self) -> &ErrorStateCause { &self.cause } + + pub fn block_failure(&self) -> Option<&FirewallPolicyError> { + self.block_failure.as_ref() + } } |
