diff --git a/src/main/index.ts b/src/main/index.ts index 2f4c399a4..0c81512a4 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -158,3 +158,15 @@ app.on("open-url", (_, url) => { app.on("window-all-closed", () => { if (process.platform !== "darwin") app.quit(); }); + +// Sets the WebRTC IP handling policy for all current and future windows. +// Switching to "default_public_and_private_interfaces" may fix calls stuck at "DTLS Connecting" when using VPNs, Tailscale, etc. +// https://github.com/Vencord/Vesktop/issues/876 +app.on("web-contents-created", (_event, contents) => { + contents.setWebRTCIPHandlingPolicy(Settings.store.webRTCIPHandlingPolicy ?? "default"); +}); +Settings.addChangeListener("webRTCIPHandlingPolicy", () => { + for (const win of BrowserWindow.getAllWindows()) { + win.webContents.setWebRTCIPHandlingPolicy(Settings.store.webRTCIPHandlingPolicy ?? "default"); + } +}); diff --git a/src/shared/settings.d.ts b/src/shared/settings.d.ts index 5b8fd6fff..b127f6def 100644 --- a/src/shared/settings.d.ts +++ b/src/shared/settings.d.ts @@ -9,6 +9,11 @@ import type { Rectangle } from "electron"; export interface Settings { discordBranch?: "stable" | "canary" | "ptb"; transparencyOption?: "none" | "mica" | "tabbed" | "acrylic"; + webRTCIPHandlingPolicy?: + | "default" + | "default_public_interface_only" + | "default_public_and_private_interfaces" + | "disable_non_proxied_udp"; tray?: boolean; minimizeToTray?: boolean; autoStartMinimized?: boolean;