summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnected_state.rs11
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnecting_state.rs5
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs2
3 files changed, 8 insertions, 10 deletions
diff --git a/talpid-core/src/tunnel_state_machine/disconnected_state.rs b/talpid-core/src/tunnel_state_machine/disconnected_state.rs
index 00af35abd5..41d0b04ddf 100644
--- a/talpid-core/src/tunnel_state_machine/disconnected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/disconnected_state.rs
@@ -1,10 +1,10 @@
use super::{
- ConnectingState, ErrorState, EventConsequence, SharedTunnelStateValues, TunnelCommand,
+ ConnectingState, EventConsequence, SharedTunnelStateValues, TunnelCommand,
TunnelCommandReceiver, TunnelState, TunnelStateTransition,
};
-#[cfg(target_os = "macos")]
-use crate::dns;
use crate::firewall::FirewallPolicy;
+#[cfg(target_os = "macos")]
+use crate::{dns, tunnel_state_machine::ErrorState};
use futures::StreamExt;
#[cfg(target_os = "macos")]
use std::net::Ipv4Addr;
@@ -205,10 +205,7 @@ impl TunnelState for DisconnectedState {
SameState(self)
}
Some(TunnelCommand::Connect) => NewState(ConnectingState::enter(shared_values, 0)),
- Some(TunnelCommand::Block(reason)) => {
- Self::reset_dns(shared_values);
- NewState(ErrorState::enter(shared_values, reason))
- }
+ Some(TunnelCommand::Block(_reason)) => SameState(self),
#[cfg(target_os = "android")]
Some(TunnelCommand::BypassSocket(fd, done_tx)) => {
shared_values.bypass_socket(fd, done_tx);
diff --git a/talpid-core/src/tunnel_state_machine/disconnecting_state.rs b/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
index 22fbcd04a3..deecb3455b 100644
--- a/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/disconnecting_state.rs
@@ -68,8 +68,9 @@ impl DisconnectingState {
AfterDisconnect::Nothing
}
Some(TunnelCommand::Connect) => AfterDisconnect::Reconnect(0),
- Some(TunnelCommand::Disconnect) | None => AfterDisconnect::Nothing,
- Some(TunnelCommand::Block(reason)) => AfterDisconnect::Block(reason),
+ Some(TunnelCommand::Disconnect) | Some(TunnelCommand::Block(_)) | None => {
+ AfterDisconnect::Nothing
+ }
#[cfg(target_os = "android")]
Some(TunnelCommand::BypassSocket(fd, done_tx)) => {
shared_values.bypass_socket(fd, done_tx);
diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs
index 02bd2bdbff..49ec6674eb 100644
--- a/talpid-core/src/tunnel_state_machine/mod.rs
+++ b/talpid-core/src/tunnel_state_machine/mod.rs
@@ -204,7 +204,7 @@ pub enum TunnelCommand {
Connect,
/// Close tunnel connection.
Disconnect,
- /// Disconnect any open tunnel and block all network access
+ /// Block all network access unless tunnel is disconnecting or disconnected
Block(ErrorStateCause),
/// Bypass a socket, allowing traffic to flow through outside the tunnel.
#[cfg(target_os = "android")]