summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnecting_state.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/talpid-core/src/tunnel_state_machine/disconnecting_state.rs b/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
index 0f65818257..6fbdacffe2 100644
--- a/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
@@ -4,9 +4,12 @@ use error_chain::ChainedError;
use futures::sync::{mpsc, oneshot};
use futures::{Async, Future, Stream};
+use talpid_types::tunnel::BlockReason;
+
use super::{
- ConnectingState, DisconnectedState, EventConsequence, ResultExt, SharedTunnelStateValues,
- TunnelCommand, TunnelParameters, TunnelState, TunnelStateTransition, TunnelStateWrapper,
+ BlockedState, ConnectingState, DisconnectedState, EventConsequence, ResultExt,
+ SharedTunnelStateValues, TunnelCommand, TunnelParameters, TunnelState, TunnelStateTransition,
+ TunnelStateWrapper,
};
use tunnel::CloseHandle;
@@ -32,6 +35,11 @@ impl DisconnectingState {
Ok(TunnelCommand::Connect(parameters)) => Reconnect(parameters),
_ => Nothing,
},
+ AfterDisconnect::Block(reason) => match event {
+ Ok(TunnelCommand::Connect(parameters)) => Reconnect(parameters),
+ Ok(TunnelCommand::Disconnect) => Nothing,
+ _ => AfterDisconnect::Block(reason),
+ },
AfterDisconnect::Reconnect(mut tunnel_parameters) => match event {
Ok(TunnelCommand::Connect(parameters)) => Reconnect(parameters),
Ok(TunnelCommand::AllowLan(allow_lan)) => {
@@ -63,6 +71,7 @@ impl DisconnectingState {
) -> (TunnelStateWrapper, TunnelStateTransition) {
match self.after_disconnect {
AfterDisconnect::Nothing => DisconnectedState::enter(shared_values, ()),
+ AfterDisconnect::Block(reason) => BlockedState::enter(shared_values, reason),
AfterDisconnect::Reconnect(tunnel_parameters) => {
ConnectingState::enter(shared_values, tunnel_parameters)
}
@@ -109,5 +118,6 @@ impl TunnelState for DisconnectingState {
/// Which state should be transitioned to after disconnection is complete.
pub enum AfterDisconnect {
Nothing,
+ Block(BlockReason),
Reconnect(TunnelParameters),
}