summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2019-03-29 09:39:52 +0100
committerLinus Färnstrand <linus@mullvad.net>2019-03-29 12:44:39 +0100
commitb03e207b211f46eee6aaf7398b8963bc8ac2c9a9 (patch)
treec61093f6be1a41983c33250a3a14db1db7943879
parentb12d64484cf02b2df8f62c582d917c774176759e (diff)
downloadmullvadvpn-b03e207b211f46eee6aaf7398b8963bc8ac2c9a9.tar.xz
mullvadvpn-b03e207b211f46eee6aaf7398b8963bc8ac2c9a9.zip
Get rid of error-chain in windows firewall module
-rw-r--r--talpid-core/src/firewall/mod.rs10
-rw-r--r--talpid-core/src/firewall/windows.rs90
2 files changed, 44 insertions, 56 deletions
diff --git a/talpid-core/src/firewall/mod.rs b/talpid-core/src/firewall/mod.rs
index 865226ae4d..e7b388245f 100644
--- a/talpid-core/src/firewall/mod.rs
+++ b/talpid-core/src/firewall/mod.rs
@@ -77,7 +77,7 @@ pub enum FirewallPolicy {
}
impl fmt::Display for FirewallPolicy {
- fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
FirewallPolicy::Connecting {
peer_endpoint,
@@ -154,15 +154,15 @@ impl Firewall {
/// Abstract firewall interaction trait. Used by the OS specific implementations.
trait FirewallT: Sized {
/// The error type thrown by the implementer of this trait
- type Error: ::std::error::Error;
+ type Error: std::error::Error;
/// Create new instance
- fn new() -> ::std::result::Result<Self, Self::Error>;
+ fn new() -> Result<Self, Self::Error>;
/// Enable the given FirewallPolicy
- fn apply_policy(&mut self, policy: FirewallPolicy) -> ::std::result::Result<(), Self::Error>;
+ fn apply_policy(&mut self, policy: FirewallPolicy) -> Result<(), Self::Error>;
/// Revert the system firewall state to what it was before this instance started
/// modifying the system.
- fn reset_policy(&mut self) -> ::std::result::Result<(), Self::Error>;
+ fn reset_policy(&mut self) -> Result<(), Self::Error>;
}
diff --git a/talpid-core/src/firewall/windows.rs b/talpid-core/src/firewall/windows.rs
index f84d01dc98..2ab290005f 100644
--- a/talpid-core/src/firewall/windows.rs
+++ b/talpid-core/src/firewall/windows.rs
@@ -7,43 +7,37 @@ use log::{debug, error, trace};
use talpid_types::net::Endpoint;
use widestring::WideCString;
-error_chain! {
- errors {
- /// Failure to initialize windows firewall module
- Initialization {
- description("Failed to initialise windows firewall module")
- }
- /// Failure to deinitialize windows firewall module
- Deinitialization {
- description("Failed to deinitialize windows firewall module")
- }
+/// Errors that can happen when configuring the Windows firewall.
+#[derive(err_derive::Error, Debug)]
+pub enum Error {
+ /// Failure to initialize windows firewall module
+ #[error(display = "Failed to initialize windows firewall module")]
+ Initialization,
- /// Failure to apply a firewall _connecting_ policy
- ApplyingConnectingPolicy {
- description("Failed to apply firewall policy for when the daemon is connecting to a tunnel")
- }
+ /// Failure to deinitialize windows firewall module
+ #[error(display = "Failed to deinitialize windows firewall module")]
+ Deinitialization,
- /// Failure to apply a firewall _connected_ policy
- ApplyingConnectedPolicy {
- description("Failed to apply firewall policy for when the daemon is connected to a tunnel")
- }
+ /// Failure to apply a firewall _connecting_ policy
+ #[error(display = "Failed to apply connecting firewall policy")]
+ ApplyingConnectingPolicy,
- /// Failure to apply firewall _blocked_ policy
- ApplyingBlockedPolicy {
- description("Failed to apply blocked firewall policy")
- }
+ /// Failure to apply a firewall _connected_ policy
+ #[error(display = "Failed to apply connected firewall policy")]
+ ApplyingConnectedPolicy,
- /// Failure to reset firewall policies
- ResettingPolicy {
- description("Failed to reset firewall policies")
- }
+ /// Failure to apply firewall _blocked_ policy
+ #[error(display = "Failed to apply blocked firewall policy")]
+ ApplyingBlockedPolicy,
- /// Failure to set TAP adapter metric
- SetTapMetric {
- description("Unable to set TAP adapter metric")
- }
- }
+ /// Failure to reset firewall policies
+ #[error(display = "Failed to reset firewall policies")]
+ ResettingPolicy,
+
+ /// Failure to set TAP adapter metric
+ #[error(display = "Unable to set TAP adapter metric")]
+ SetTapMetric(#[error(cause)] crate::winnet::Error),
}
const WINFW_TIMEOUT_SECONDS: u32 = 2;
@@ -54,7 +48,7 @@ pub struct Firewall(());
impl FirewallT for Firewall {
type Error = Error;
- fn new() -> Result<Self> {
+ fn new() -> Result<Self, Self::Error> {
unsafe {
WinFw_Initialize(
WINFW_TIMEOUT_SECONDS,
@@ -67,7 +61,7 @@ impl FirewallT for Firewall {
Ok(Firewall(()))
}
- fn apply_policy(&mut self, policy: FirewallPolicy) -> Result<()> {
+ fn apply_policy(&mut self, policy: FirewallPolicy) -> Result<(), Self::Error> {
match policy {
FirewallPolicy::Connecting {
peer_endpoint,
@@ -93,7 +87,7 @@ impl FirewallT for Firewall {
}
}
- fn reset_policy(&mut self) -> Result<()> {
+ fn reset_policy(&mut self) -> Result<(), Self::Error> {
unsafe { WinFw_Reset().into_result() }?;
Ok(())
}
@@ -114,7 +108,7 @@ impl Firewall {
&mut self,
endpoint: &Endpoint,
winfw_settings: &WinFwSettings,
- ) -> Result<()> {
+ ) -> Result<(), Error> {
trace!("Applying 'connecting' firewall policy");
let ip_str = Self::widestring_ip(endpoint.address.ip());
@@ -138,7 +132,7 @@ impl Firewall {
endpoint: &Endpoint,
winfw_settings: &WinFwSettings,
tunnel_metadata: &crate::tunnel::TunnelMetadata,
- ) -> Result<()> {
+ ) -> Result<(), Error> {
trace!("Applying 'connected' firewall policy");
let ip_str = Self::widestring_ip(endpoint.address.ip());
let v4_gateway = Self::widestring_ip(tunnel_metadata.ipv4_gateway.into());
@@ -157,7 +151,7 @@ impl Firewall {
};
let metrics_set = winnet::ensure_top_metric_for_interface(&tunnel_metadata.interface)
- .chain_err(|| ErrorKind::SetTapMetric)?;
+ .map_err(Error::SetTapMetric)?;
if metrics_set {
debug!("Network interface metrics were changed");
@@ -182,7 +176,7 @@ impl Firewall {
}
}
- fn set_blocked_state(&mut self, winfw_settings: &WinFwSettings) -> Result<()> {
+ fn set_blocked_state(&mut self, winfw_settings: &WinFwSettings) -> Result<(), Error> {
trace!("Applying 'blocked' firewall policy");
unsafe { WinFw_ApplyPolicyBlocked(winfw_settings).into_result() }
}
@@ -191,7 +185,7 @@ impl Firewall {
#[allow(non_snake_case)]
mod winfw {
- use super::{ErrorKind, Result};
+ use super::Error;
use crate::winnet;
use libc;
use talpid_types::net::TransportProtocol;
@@ -234,18 +228,12 @@ mod winfw {
}
}
- ffi_error!(InitializationResult, ErrorKind::Initialization.into());
- ffi_error!(DeinitializationResult, ErrorKind::Deinitialization.into());
- ffi_error!(
- ApplyConnectingResult,
- ErrorKind::ApplyingConnectingPolicy.into()
- );
- ffi_error!(
- ApplyConnectedResult,
- ErrorKind::ApplyingConnectedPolicy.into()
- );
- ffi_error!(ApplyBlockedResult, ErrorKind::ApplyingBlockedPolicy.into());
- ffi_error!(ResettingPolicyResult, ErrorKind::ResettingPolicy.into());
+ ffi_error!(InitializationResult, Error::Initialization);
+ ffi_error!(DeinitializationResult, Error::Deinitialization);
+ ffi_error!(ApplyConnectingResult, Error::ApplyingConnectingPolicy);
+ ffi_error!(ApplyConnectedResult, Error::ApplyingConnectedPolicy);
+ ffi_error!(ApplyBlockedResult, Error::ApplyingBlockedPolicy);
+ ffi_error!(ResettingPolicyResult, Error::ResettingPolicy);
extern "system" {
#[link_name = "WinFw_Initialize"]