summaryrefslogtreecommitdiffhomepage
path: root/gui/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'gui/src/main')
-rw-r--r--gui/src/main/daemon-rpc.ts64
-rw-r--r--gui/src/main/index.ts10
2 files changed, 73 insertions, 1 deletions
diff --git a/gui/src/main/daemon-rpc.ts b/gui/src/main/daemon-rpc.ts
index 310a9a5c83..646a09a9c7 100644
--- a/gui/src/main/daemon-rpc.ts
+++ b/gui/src/main/daemon-rpc.ts
@@ -17,6 +17,7 @@ import {
DaemonEvent,
DeviceEvent,
DeviceState,
+ EndpointObfuscationType,
ErrorStateCause,
FirewallPolicyError,
IAccountData,
@@ -40,6 +41,7 @@ import {
IWireguardConstraints,
LoggedInDeviceState,
LoggedOutDeviceState,
+ ObfuscationSettings,
ObfuscationType,
Ownership,
ProxySettings,
@@ -378,6 +380,42 @@ export class DaemonRpc {
);
}
+ public async setObfuscationSettings(obfuscationSettings: ObfuscationSettings): Promise<void> {
+ const grpcObfuscationSettings = new grpcTypes.ObfuscationSettings();
+ switch (obfuscationSettings.selectedObfuscation) {
+ case ObfuscationType.auto:
+ grpcObfuscationSettings.setSelectedObfuscation(
+ grpcTypes.ObfuscationSettings.SelectedObfuscation.AUTO,
+ );
+ break;
+ case ObfuscationType.off:
+ grpcObfuscationSettings.setSelectedObfuscation(
+ grpcTypes.ObfuscationSettings.SelectedObfuscation.OFF,
+ );
+ break;
+ case ObfuscationType.udp2tcp:
+ grpcObfuscationSettings.setSelectedObfuscation(
+ grpcTypes.ObfuscationSettings.SelectedObfuscation.UDP2TCP,
+ );
+ break;
+ }
+
+ if (obfuscationSettings.udp2tcpSettings) {
+ const grpcUdp2tcpSettings = new grpcTypes.Udp2TcpObfuscationSettings();
+ grpcUdp2tcpSettings.setPort(
+ obfuscationSettings.udp2tcpSettings.port === 'any'
+ ? 0
+ : obfuscationSettings.udp2tcpSettings.port.only,
+ );
+ grpcObfuscationSettings.setUdp2tcp(grpcUdp2tcpSettings);
+ }
+
+ await this.call<grpcTypes.ObfuscationSettings, Empty>(
+ this.client.setObfuscationSettings,
+ grpcObfuscationSettings,
+ );
+ }
+
public async setOpenVpnMssfix(mssfix?: number): Promise<void> {
await this.callNumber(this.client.setOpenvpnMssfix, mssfix);
}
@@ -922,7 +960,7 @@ function convertFromProxyEndpoint(proxyEndpoint: grpcTypes.ProxyEndpoint.AsObjec
function convertFromObfuscationEndpoint(
obfuscationEndpoint: grpcTypes.ObfuscationEndpoint.AsObject,
): IObfuscationEndpoint {
- const obfuscationTypes: Record<grpcTypes.ObfuscationType, ObfuscationType> = {
+ const obfuscationTypes: Record<grpcTypes.ObfuscationType, EndpointObfuscationType> = {
[grpcTypes.ObfuscationType.UDP2TCP]: 'udp2tcp',
};
@@ -947,6 +985,7 @@ function convertFromSettings(settings: grpcTypes.Settings): ISettings | undefine
const bridgeSettings = convertFromBridgeSettings(settingsObject.bridgeSettings!);
const tunnelOptions = convertFromTunnelOptions(settingsObject.tunnelOptions!);
const splitTunnel = settingsObject.splitTunnel ?? { enableExclusions: false, appsList: [] };
+ const obfuscationSettings = convertFromObfuscationSettings(settingsObject.obfuscationSettings);
return {
...settings.toObject(),
bridgeState,
@@ -954,6 +993,7 @@ function convertFromSettings(settings: grpcTypes.Settings): ISettings | undefine
bridgeSettings,
tunnelOptions,
splitTunnel,
+ obfuscationSettings,
};
}
@@ -1150,6 +1190,28 @@ function convertFromTunnelOptions(tunnelOptions: grpcTypes.TunnelOptions.AsObjec
};
}
+function convertFromObfuscationSettings(
+ obfuscationSettings?: grpcTypes.ObfuscationSettings.AsObject,
+): ObfuscationSettings {
+ let selectedObfuscationType = ObfuscationType.auto;
+ switch (obfuscationSettings?.selectedObfuscation) {
+ case grpcTypes.ObfuscationSettings.SelectedObfuscation.OFF:
+ selectedObfuscationType = ObfuscationType.off;
+ break;
+ case grpcTypes.ObfuscationSettings.SelectedObfuscation.UDP2TCP:
+ selectedObfuscationType = ObfuscationType.udp2tcp;
+ break;
+ }
+
+ return {
+ selectedObfuscation: selectedObfuscationType,
+ udp2tcpSettings:
+ obfuscationSettings?.udp2tcp && obfuscationSettings.udp2tcp.port !== 0
+ ? { port: { only: obfuscationSettings.udp2tcp.port } }
+ : { port: 'any' },
+ };
+}
+
function convertFromDaemonEvent(data: grpcTypes.DaemonEvent): DaemonEvent {
const tunnelState = data.getTunnelState();
if (tunnelState !== undefined) {
diff --git a/gui/src/main/index.ts b/gui/src/main/index.ts
index 461cac3214..669f406c19 100644
--- a/gui/src/main/index.ts
+++ b/gui/src/main/index.ts
@@ -36,6 +36,7 @@ import {
IRelayList,
ISettings,
liftConstraint,
+ ObfuscationType,
Ownership,
RelaySettings,
RelaySettingsUpdate,
@@ -212,6 +213,12 @@ class ApplicationMain {
},
},
},
+ obfuscationSettings: {
+ selectedObfuscation: ObfuscationType.auto,
+ udp2tcpSettings: {
+ port: 'any',
+ },
+ },
};
private deviceState?: DeviceState;
private guiSettings = new GuiSettings();
@@ -1340,6 +1347,9 @@ class ApplicationMain {
IpcMainEventChannel.autoStart.handleSet((autoStart: boolean) => {
return this.setAutoStart(autoStart);
});
+ IpcMainEventChannel.settings.handleSetObfuscationSettings((obfuscationSettings) => {
+ return this.daemonRpc.setObfuscationSettings(obfuscationSettings);
+ });
IpcMainEventChannel.location.handleGet(() => this.daemonRpc.getLocation());