summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-01-24 12:01:19 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-02-06 12:05:57 +0000
commitdc9219f7bd232492e63bf502fbcf14abdb3da04b (patch)
tree1f7a880e4a75b09ed489a98a53c71904e1baf947
parentdcb1e24bc30e0ae724374950a7a082b5548f2b41 (diff)
downloadmullvadvpn-dc9219f7bd232492e63bf502fbcf14abdb3da04b.tar.xz
mullvadvpn-dc9219f7bd232492e63bf502fbcf14abdb3da04b.zip
Refactor to add `ConnectingState::disconnect`
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs84
1 files changed, 31 insertions, 53 deletions
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs
index 720e2d3729..2aec258503 100644
--- a/talpid-core/src/tunnel_state_machine/connecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs
@@ -162,6 +162,17 @@ impl ConnectingState {
}
}
+ fn disconnect(
+ self,
+ shared_values: &mut SharedTunnelStateValues,
+ after_disconnect: AfterDisconnect,
+ ) -> EventConsequence<Self> {
+ EventConsequence::NewState(DisconnectingState::enter(
+ shared_values,
+ (self.close_handle, self.tunnel_close_event, after_disconnect),
+ ))
+ }
+
fn handle_commands(
self,
commands: &mut mpsc::UnboundedReceiver<TunnelCommand>,
@@ -182,14 +193,10 @@ impl ConnectingState {
)
);
- NewState(DisconnectingState::enter(
+ self.disconnect(
shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Block(ErrorStateCause::SetFirewallPolicyError),
- ),
- ))
+ AfterDisconnect::Block(ErrorStateCause::SetFirewallPolicyError),
+ )
}
}
}
@@ -200,42 +207,23 @@ impl ConnectingState {
Ok(TunnelCommand::IsOffline(is_offline)) => {
shared_values.is_offline = is_offline;
if is_offline {
- NewState(DisconnectingState::enter(
+ self.disconnect(
shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Block(ErrorStateCause::IsOffline),
- ),
- ))
+ AfterDisconnect::Block(ErrorStateCause::IsOffline),
+ )
} else {
SameState(self)
}
}
- Ok(TunnelCommand::Connect) => NewState(DisconnectingState::enter(
- shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Reconnect(0),
- ),
- )),
- Ok(TunnelCommand::Disconnect) | Err(_) => NewState(DisconnectingState::enter(
- shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Nothing,
- ),
- )),
- Ok(TunnelCommand::Block(reason)) => NewState(DisconnectingState::enter(
- shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Block(reason),
- ),
- )),
+ Ok(TunnelCommand::Connect) => {
+ self.disconnect(shared_values, AfterDisconnect::Reconnect(0))
+ }
+ Ok(TunnelCommand::Disconnect) | Err(_) => {
+ self.disconnect(shared_values, AfterDisconnect::Nothing)
+ }
+ Ok(TunnelCommand::Block(reason)) => {
+ self.disconnect(shared_values, AfterDisconnect::Block(reason))
+ }
}
}
@@ -247,14 +235,10 @@ impl ConnectingState {
use self::EventConsequence::*;
match try_handle_event!(self, self.tunnel_events.poll()) {
- Ok(TunnelEvent::AuthFailed(reason)) => NewState(DisconnectingState::enter(
+ Ok(TunnelEvent::AuthFailed(reason)) => self.disconnect(
shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Block(ErrorStateCause::AuthFailed(reason)),
- ),
- )),
+ AfterDisconnect::Block(ErrorStateCause::AuthFailed(reason)),
+ ),
Ok(TunnelEvent::Up(metadata)) => NewState(ConnectedState::enter(
shared_values,
self.into_connected_state_bootstrap(metadata),
@@ -262,14 +246,8 @@ impl ConnectingState {
Ok(_) => SameState(self),
Err(_) => {
debug!("The tunnel disconnected unexpectedly");
- NewState(DisconnectingState::enter(
- shared_values,
- (
- self.close_handle,
- self.tunnel_close_event,
- AfterDisconnect::Reconnect(self.retry_attempt + 1),
- ),
- ))
+ let retry_attempt = self.retry_attempt + 1;
+ self.disconnect(shared_values, AfterDisconnect::Reconnect(retry_attempt))
}
}
}