diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2018-08-21 10:55:38 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2018-09-03 08:05:18 -0300 |
| commit | b4243f64c38796b21930bae90aae24dcf97d7f0c (patch) | |
| tree | dadc666cfee2cd7fd272178943d3da333895c838 | |
| parent | 5ad7d5cad6bce0346e242065250271428f52d58f (diff) | |
| download | mullvadvpn-b4243f64c38796b21930bae90aae24dcf97d7f0c.tar.xz mullvadvpn-b4243f64c38796b21930bae90aae24dcf97d7f0c.zip | |
Create `BlockedState` type
| -rw-r--r-- | gui/packages/desktop/src/renderer/app.js | 2 | ||||
| -rw-r--r-- | gui/packages/desktop/src/renderer/lib/daemon-rpc.js | 3 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/status.rs | 1 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/blocked_state.rs | 42 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 6 | ||||
| -rw-r--r-- | talpid-types/src/tunnel.rs | 2 |
6 files changed, 55 insertions, 1 deletions
diff --git a/gui/packages/desktop/src/renderer/app.js b/gui/packages/desktop/src/renderer/app.js index e88d3d619c..d0048950d5 100644 --- a/gui/packages/desktop/src/renderer/app.js +++ b/gui/packages/desktop/src/renderer/app.js @@ -547,6 +547,8 @@ export default class AppRenderer { _tunnelStateToConnectionState(tunnelState: TunnelState): ConnectionState { if (tunnelState === 'disconnected' || tunnelState === 'disconnecting') { return 'disconnected'; + } else if (tunnelState === 'blocked') { + return 'connecting'; } else if (tunnelState === 'connected' || tunnelState === 'connecting') { return tunnelState; } diff --git a/gui/packages/desktop/src/renderer/lib/daemon-rpc.js b/gui/packages/desktop/src/renderer/lib/daemon-rpc.js index e590534d69..5dcf041dcd 100644 --- a/gui/packages/desktop/src/renderer/lib/daemon-rpc.js +++ b/gui/packages/desktop/src/renderer/lib/daemon-rpc.js @@ -41,7 +41,7 @@ const LocationSchema = object({ mullvad_exit_ip: boolean, }); -export type TunnelState = 'disconnected' | 'connecting' | 'connected' | 'disconnecting'; +export type TunnelState = 'disconnected' | 'connecting' | 'connected' | 'disconnecting' | 'blocked'; export type RelayProtocol = 'tcp' | 'udp'; export type RelayLocation = {| city: [string, string] |} | {| country: string |}; @@ -201,6 +201,7 @@ const allTunnelStates: Array<TunnelState> = [ 'connecting', 'connected', 'disconnecting', + 'blocked', ]; const TunnelStateSchema = enumeration(...allTunnelStates); diff --git a/mullvad-cli/src/cmds/status.rs b/mullvad-cli/src/cmds/status.rs index 7ebf8cd36b..bdc308892e 100644 --- a/mullvad-cli/src/cmds/status.rs +++ b/mullvad-cli/src/cmds/status.rs @@ -43,6 +43,7 @@ impl Command for Status { fn print_state(state: TunnelStateTransition) { print!("Tunnel status: "); match state { + Blocked => println!("Blocked"), Connected => println!("Connected"), Connecting => println!("Connecting..."), Disconnected => println!("Disconnected"), diff --git a/talpid-core/src/tunnel_state_machine/blocked_state.rs b/talpid-core/src/tunnel_state_machine/blocked_state.rs new file mode 100644 index 0000000000..f4499c7b58 --- /dev/null +++ b/talpid-core/src/tunnel_state_machine/blocked_state.rs @@ -0,0 +1,42 @@ +use futures::sync::mpsc; +use futures::Stream; + +use super::{ + ConnectingState, DisconnectedState, EventConsequence, SharedTunnelStateValues, TunnelCommand, + TunnelState, TunnelStateTransition, TunnelStateWrapper, +}; + +/// No tunnel is running and all network connections are blocked. +pub struct BlockedState; + +impl TunnelState for BlockedState { + type Bootstrap = (); + + fn enter( + _: &mut SharedTunnelStateValues, + _: Self::Bootstrap, + ) -> (TunnelStateWrapper, TunnelStateTransition) { + ( + TunnelStateWrapper::from(BlockedState), + TunnelStateTransition::Blocked, + ) + } + + fn handle_event( + self, + commands: &mut mpsc::UnboundedReceiver<TunnelCommand>, + shared_values: &mut SharedTunnelStateValues, + ) -> EventConsequence<Self> { + use self::EventConsequence::*; + + match try_handle_event!(self, commands.poll()) { + Ok(TunnelCommand::Connect(parameters)) => { + NewState(ConnectingState::enter(shared_values, parameters)) + } + Ok(TunnelCommand::Disconnect) | Err(_) => { + NewState(DisconnectedState::enter(shared_values, ())) + } + _ => SameState(self), + } + } +} diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index 700f082146..20f1529b01 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -1,6 +1,7 @@ #[macro_use] mod macros; +mod blocked_state; mod connected_state; mod connecting_state; mod disconnected_state; @@ -19,6 +20,7 @@ use tokio_core::reactor::Core; use talpid_types::net::{TunnelEndpoint, TunnelOptions}; use talpid_types::tunnel::TunnelStateTransition; +use self::blocked_state::BlockedState; use self::connected_state::{ConnectedState, ConnectedStateBootstrap}; use self::connecting_state::ConnectingState; use self::disconnected_state::DisconnectedState; @@ -286,6 +288,7 @@ enum TunnelStateWrapper { Connecting(ConnectingState), Connected(ConnectedState), Disconnecting(DisconnectingState), + Blocked(BlockedState), } impl TunnelStateWrapper { @@ -321,6 +324,7 @@ impl TunnelStateWrapper { Connecting, Connected, Disconnecting, + Blocked, } } } @@ -339,6 +343,7 @@ impl_from_for_tunnel_state!(Disconnected(DisconnectedState)); impl_from_for_tunnel_state!(Connecting(ConnectingState)); impl_from_for_tunnel_state!(Connected(ConnectedState)); impl_from_for_tunnel_state!(Disconnecting(DisconnectingState)); +impl_from_for_tunnel_state!(Blocked(BlockedState)); impl Debug for TunnelStateWrapper { fn fmt(&self, formatter: &mut Formatter) -> FmtResult { @@ -349,6 +354,7 @@ impl Debug for TunnelStateWrapper { Connecting(_) => write!(formatter, "TunnelStateWrapper::Connecting(_)"), Connected(_) => write!(formatter, "TunnelStateWrapper::Connected(_)"), Disconnecting(_) => write!(formatter, "TunnelStateWrapper::Disconnecting(_)"), + Blocked(_) => write!(formatter, "TunnelStateWrapper::Blocked(_)"), } } } diff --git a/talpid-types/src/tunnel.rs b/talpid-types/src/tunnel.rs index f547cc24cf..ce94b43685 100644 --- a/talpid-types/src/tunnel.rs +++ b/talpid-types/src/tunnel.rs @@ -10,4 +10,6 @@ pub enum TunnelStateTransition { Connected, /// Disconnecting tunnel. Disconnecting, + /// Tunnel is disconnected but secured by blocking all connections. + Blocked, } |
