summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gui/packages/desktop/src/renderer/errors.js8
-rw-r--r--gui/packages/desktop/src/renderer/lib/daemon-rpc.js5
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs13
-rw-r--r--talpid-types/src/tunnel.rs11
4 files changed, 27 insertions, 10 deletions
diff --git a/gui/packages/desktop/src/renderer/errors.js b/gui/packages/desktop/src/renderer/errors.js
index 15a7696f18..8651adfb97 100644
--- a/gui/packages/desktop/src/renderer/errors.js
+++ b/gui/packages/desktop/src/renderer/errors.js
@@ -4,7 +4,13 @@ import type { BlockReason } from './lib/daemon-rpc';
export class BlockedError extends Error {
constructor(reason: BlockReason) {
- super(reason);
+ switch (reason) {
+ case 'start_tunnel_error':
+ super('Failed to start tunnel connection');
+ break;
+ default:
+ super(`Unknown error: ${(reason: empty)}`);
+ }
}
}
diff --git a/gui/packages/desktop/src/renderer/lib/daemon-rpc.js b/gui/packages/desktop/src/renderer/lib/daemon-rpc.js
index 1578b04638..38450173fd 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 BlockReason = string;
+export type BlockReason = 'start_tunnel_error';
export type DisconnectedState = {
state: 'disconnected',
};
@@ -218,9 +218,10 @@ const AccountDataSchema = object({
expiry: string,
});
+const allBlockReasons: Array<BlockReason> = ['start_tunnel_error'];
const BlockedStateSchema = object({
state: enumeration('blocked'),
- details: string,
+ details: enumeration(...allBlockReasons),
});
const ConnectedStateSchema = object({ state: enumeration('connected') });
const ConnectingStateSchema = object({ state: enumeration('connecting') });
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs
index 8aee60fd69..41031faa34 100644
--- a/talpid-core/src/tunnel_state_machine/connecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs
@@ -10,11 +10,12 @@ use futures::sync::{mpsc, oneshot};
use futures::{Async, Future, Sink, Stream};
use talpid_types::net::{TunnelEndpoint, TunnelEndpointData};
+use talpid_types::tunnel::BlockReason;
use super::{
- AfterDisconnect, ConnectedState, ConnectedStateBootstrap, DisconnectedState,
- DisconnectingState, EventConsequence, Result, ResultExt, SharedTunnelStateValues,
- TunnelCommand, TunnelParameters, TunnelState, TunnelStateTransition, TunnelStateWrapper,
+ AfterDisconnect, BlockedState, ConnectedState, ConnectedStateBootstrap, DisconnectingState,
+ EventConsequence, Result, ResultExt, SharedTunnelStateValues, TunnelCommand, TunnelParameters,
+ TunnelState, TunnelStateTransition, TunnelStateWrapper,
};
use logging;
use security::{NetworkSecurity, SecurityPolicy};
@@ -278,8 +279,10 @@ impl TunnelState for ConnectingState {
TunnelStateTransition::Connecting,
),
Err(error) => {
- error!("{}", error.chain_err(|| "Failed to start tunnel"));
- DisconnectedState::enter(shared_values, ())
+ let chained_error = error.chain_err(|| "Failed to start tunnel");
+ error!("{}", chained_error.display_chain());
+
+ BlockedState::enter(shared_values, BlockReason::StartTunnelError)
}
}
}
diff --git a/talpid-types/src/tunnel.rs b/talpid-types/src/tunnel.rs
index 59ee2499cd..70b81fca36 100644
--- a/talpid-types/src/tunnel.rs
+++ b/talpid-types/src/tunnel.rs
@@ -20,10 +20,17 @@ pub enum TunnelStateTransition {
/// Reason for entering the blocked state.
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
-pub enum BlockReason {}
+pub enum BlockReason {
+ /// Failed to start connection to remote server
+ StartTunnelError,
+}
impl fmt::Display for BlockReason {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
- Ok(())
+ let description = match *self {
+ BlockReason::StartTunnelError => "Failed to start connection to remote server",
+ };
+
+ write!(formatter, "{}", description)
}
}