summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-cli/src/cmds/status.rs2
-rw-r--r--mullvad-daemon/src/management_interface.rs42
-rw-r--r--mullvad-management-interface/proto/management_interface.proto2
-rw-r--r--talpid-types/src/tunnel.rs4
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()
+ }
}