summaryrefslogtreecommitdiffhomepage
path: root/gui/src
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-02-06 15:39:41 +0100
committerOskar Nyberg <oskar@mullvad.net>2020-02-06 15:45:39 +0100
commit8c7bc4426f7f97975356cbfa71d4014fae00c859 (patch)
treeda1b6f2161379a0f593709725dcdffcb8e242721 /gui/src
parent033e58637a99a84a7ace29ff1c23bf7c3b456d48 (diff)
downloadmullvadvpn-8c7bc4426f7f97975356cbfa71d4014fae00c859.tar.xz
mullvadvpn-8c7bc4426f7f97975356cbfa71d4014fae00c859.zip
Pass function for reconnecting to TunnelControl
Diffstat (limited to 'gui/src')
-rw-r--r--gui/src/main/daemon-rpc.ts4
-rw-r--r--gui/src/main/index.ts1
-rw-r--r--gui/src/renderer/app.tsx4
-rw-r--r--gui/src/renderer/components/Connect.tsx2
-rw-r--r--gui/src/renderer/components/TunnelControl.tsx1
-rw-r--r--gui/src/renderer/containers/ConnectPage.tsx7
-rw-r--r--gui/src/shared/ipc-event-channel.ts5
7 files changed, 24 insertions, 0 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts
index 78748b70ab..7491b20901 100644
--- a/gui/src/main/daemon-rpc.ts
+++ b/gui/src/main/daemon-rpc.ts
@@ -496,6 +496,10 @@ export class DaemonRpc {
await this.transport.send('disconnect');
}
+ public async reconnectTunnel(): Promise<void> {
+ await this.transport.send('reconnect');
+ }
+
public async getLocation(): Promise<ILocation | undefined> {
const response = await this.transport.send('get_current_location', [], NETWORK_CALL_TIMEOUT);
try {
diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts
index a335a9f372..6663a5574e 100644
--- a/gui/src/main/index.ts
+++ b/gui/src/main/index.ts
@@ -943,6 +943,7 @@ class ApplicationMain {
IpcMainEventChannel.tunnel.handleConnect(() => this.daemonRpc.connectTunnel());
IpcMainEventChannel.tunnel.handleDisconnect(() => this.daemonRpc.disconnectTunnel());
+ IpcMainEventChannel.tunnel.handleReconnect(() => this.daemonRpc.reconnectTunnel());
IpcMainEventChannel.guiSettings.handleEnableSystemNotifications((flag: boolean) => {
this.guiSettings.enableSystemNotifications = flag;
diff --git a/gui/src/renderer/app.tsx b/gui/src/renderer/app.tsx
index 5fb48f701f..58243ce22a 100644
--- a/gui/src/renderer/app.tsx
+++ b/gui/src/renderer/app.tsx
@@ -276,6 +276,10 @@ export default class AppRenderer {
return IpcRendererEventChannel.tunnel.disconnect();
}
+ public reconnectTunnel(): Promise<void> {
+ return IpcRendererEventChannel.tunnel.reconnect();
+ }
+
public updateRelaySettings(relaySettings: RelaySettingsUpdate) {
return IpcRendererEventChannel.settings.updateRelaySettings(relaySettings);
}
diff --git a/gui/src/renderer/components/Connect.tsx b/gui/src/renderer/components/Connect.tsx
index 7f73fb7ea0..4cb63c6a5b 100644
--- a/gui/src/renderer/components/Connect.tsx
+++ b/gui/src/renderer/components/Connect.tsx
@@ -23,6 +23,7 @@ interface IProps {
onSelectLocation: () => void;
onConnect: () => void;
onDisconnect: () => void;
+ onReconnect: () => void;
onExternalLinkWithAuth: (url: string) => Promise<void>;
}
@@ -163,6 +164,7 @@ export default class Connect extends Component<IProps, IState> {
country={this.props.connection.country}
onConnect={this.props.onConnect}
onDisconnect={this.props.onDisconnect}
+ onReconnect={this.props.onReconnect}
onSelectLocation={this.props.onSelectLocation}
/>
diff --git a/gui/src/renderer/components/TunnelControl.tsx b/gui/src/renderer/components/TunnelControl.tsx
index 700603bd2e..aa7c762d17 100644
--- a/gui/src/renderer/components/TunnelControl.tsx
+++ b/gui/src/renderer/components/TunnelControl.tsx
@@ -14,6 +14,7 @@ interface ITunnelControlProps {
country?: string;
onConnect: () => void;
onDisconnect: () => void;
+ onReconnect: () => void;
onSelectLocation: () => void;
}
diff --git a/gui/src/renderer/containers/ConnectPage.tsx b/gui/src/renderer/containers/ConnectPage.tsx
index e5261a161a..e4c37f19cc 100644
--- a/gui/src/renderer/containers/ConnectPage.tsx
+++ b/gui/src/renderer/containers/ConnectPage.tsx
@@ -99,6 +99,13 @@ const mapDispatchToProps = (dispatch: ReduxDispatch, props: IAppContext) => {
log.error(`Failed to disconnect the tunnel: ${error.message}`);
}
},
+ onReconnect: async () => {
+ try {
+ await props.app.reconnectTunnel();
+ } catch (error) {
+ log.error(`Failed to reconnect the tunnel: ${error.message}`);
+ }
+ },
onExternalLinkWithAuth: (url: string) => props.app.openLinkWithAuth(url),
};
};
diff --git a/gui/src/shared/ipc-event-channel.ts b/gui/src/shared/ipc-event-channel.ts
index a612660c99..5502a6698a 100644
--- a/gui/src/shared/ipc-event-channel.ts
+++ b/gui/src/shared/ipc-event-channel.ts
@@ -56,11 +56,13 @@ interface IReceiver<T> {
interface ITunnelMethods extends IReceiver<TunnelState> {
connect(): Promise<void>;
disconnect(): Promise<void>;
+ reconnect(): Promise<void>;
}
interface ITunnelHandlers extends ISender<TunnelState> {
handleConnect(fn: () => Promise<void>): void;
handleDisconnect(fn: () => Promise<void>): void;
+ handleReconnect(fn: () => Promise<void>): void;
}
interface ISettingsMethods extends IReceiver<ISettings> {
@@ -150,6 +152,7 @@ const DAEMON_DISCONNECTED = 'daemon-disconnected';
const TUNNEL_STATE_CHANGED = 'tunnel-state-changed';
const CONNECT_TUNNEL = 'connect-tunnel';
const DISCONNECT_TUNNEL = 'disconnect-tunnel';
+const RECONNECT_TUNNEL = 'reconnect-tunnel';
const SETTINGS_CHANGED = 'settings-changed';
const SET_ALLOW_LAN = 'set-allow-lan';
@@ -223,6 +226,7 @@ export class IpcRendererEventChannel {
listen: listen(TUNNEL_STATE_CHANGED),
connect: requestSender(CONNECT_TUNNEL),
disconnect: requestSender(DISCONNECT_TUNNEL),
+ reconnect: requestSender(RECONNECT_TUNNEL),
};
public static settings: ISettingsMethods = {
@@ -315,6 +319,7 @@ export class IpcMainEventChannel {
notify: sender(TUNNEL_STATE_CHANGED),
handleConnect: requestHandler(CONNECT_TUNNEL),
handleDisconnect: requestHandler(DISCONNECT_TUNNEL),
+ handleReconnect: requestHandler(RECONNECT_TUNNEL),
};
public static location: ISender<ILocation> = {