calling: add setTurnServerOverride to SignalDebug to allow choosing ice server
Co-authored-by: Adel Lahlou <adel@signal.com>
This commit is contained in:
parent
2497d0d8a1
commit
61710eb8e3
3 changed files with 44 additions and 16 deletions
|
@ -156,6 +156,8 @@ const RINGRTC_HTTP_METHOD_TO_OUR_HTTP_METHOD: Map<
|
||||||
|
|
||||||
const CLEAN_EXPIRED_GROUP_CALL_RINGS_INTERVAL = 10 * durations.MINUTE;
|
const CLEAN_EXPIRED_GROUP_CALL_RINGS_INTERVAL = 10 * durations.MINUTE;
|
||||||
|
|
||||||
|
const ICE_SERVER_IS_IP_LIKE = /(turn|turns|stun):[.\d]+/;
|
||||||
|
|
||||||
// We send group call update messages to tell other clients to peek, which triggers
|
// We send group call update messages to tell other clients to peek, which triggers
|
||||||
// notifications, timeline messages, big green "Join" buttons, and so on. This enum
|
// notifications, timeline messages, big green "Join" buttons, and so on. This enum
|
||||||
// represents the three possible states we can be in. This helps ensure that we don't
|
// represents the three possible states we can be in. This helps ensure that we don't
|
||||||
|
@ -315,6 +317,8 @@ export class CallingClass {
|
||||||
|
|
||||||
public _sfuUrl?: string;
|
public _sfuUrl?: string;
|
||||||
|
|
||||||
|
public _iceServerOverride?: string;
|
||||||
|
|
||||||
private lastMediaDeviceSettings?: MediaDeviceSettings;
|
private lastMediaDeviceSettings?: MediaDeviceSettings;
|
||||||
|
|
||||||
private deviceReselectionTimer?: NodeJS.Timeout;
|
private deviceReselectionTimer?: NodeJS.Timeout;
|
||||||
|
@ -2598,23 +2602,36 @@ export class CallingClass {
|
||||||
// If the peer is not in the user's system contacts, force IP hiding.
|
// If the peer is not in the user's system contacts, force IP hiding.
|
||||||
const isContactUntrusted = !isInSystemContacts(conversation.attributes);
|
const isContactUntrusted = !isInSystemContacts(conversation.attributes);
|
||||||
|
|
||||||
|
// only include hostname with urlsWithIps
|
||||||
|
const iceServers = this._iceServerOverride
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
hostname: ICE_SERVER_IS_IP_LIKE.test(this._iceServerOverride)
|
||||||
|
? iceServer.hostname
|
||||||
|
: '',
|
||||||
|
username: iceServer.username,
|
||||||
|
password: iceServer.password,
|
||||||
|
urls: [this._iceServerOverride.toString()],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
: // proritize ice servers with IPs to avoid DNS
|
||||||
|
[
|
||||||
|
{
|
||||||
|
hostname: iceServer.hostname,
|
||||||
|
username: iceServer.username,
|
||||||
|
password: iceServer.password,
|
||||||
|
urls: (iceServer.urlsWithIps ?? []).slice(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
hostname: '',
|
||||||
|
username: iceServer.username,
|
||||||
|
password: iceServer.password,
|
||||||
|
urls: (iceServer.urls ?? []).slice(),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
const callSettings = {
|
const callSettings = {
|
||||||
// only include hostname with urlsWithIps
|
iceServers,
|
||||||
// proritize ice servers with IPs to avoid DNS
|
|
||||||
iceServers: [
|
|
||||||
{
|
|
||||||
hostname: iceServer.hostname,
|
|
||||||
username: iceServer.username,
|
|
||||||
password: iceServer.password,
|
|
||||||
urls: (iceServer.urlsWithIps ?? []).slice(),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
hostname: '',
|
|
||||||
username: iceServer.username,
|
|
||||||
password: iceServer.password,
|
|
||||||
urls: (iceServer.urls ?? []).slice(),
|
|
||||||
},
|
|
||||||
],
|
|
||||||
hideIp: shouldRelayCalls || isContactUntrusted,
|
hideIp: shouldRelayCalls || isContactUntrusted,
|
||||||
dataMode: DataMode.Normal,
|
dataMode: DataMode.Normal,
|
||||||
// TODO: DESKTOP-3101
|
// TODO: DESKTOP-3101
|
||||||
|
|
1
ts/window.d.ts
vendored
1
ts/window.d.ts
vendored
|
@ -195,6 +195,7 @@ declare global {
|
||||||
getServerPublicParams: () => string;
|
getServerPublicParams: () => string;
|
||||||
getGenericServerPublicParams: () => string;
|
getGenericServerPublicParams: () => string;
|
||||||
getSfuUrl: () => string;
|
getSfuUrl: () => string;
|
||||||
|
getIceServerOverride: () => string;
|
||||||
getSocketStatus: () => SocketStatus;
|
getSocketStatus: () => SocketStatus;
|
||||||
getSyncRequest: (timeoutMillis?: number) => SyncRequest;
|
getSyncRequest: (timeoutMillis?: number) => SyncRequest;
|
||||||
getTitle: () => string;
|
getTitle: () => string;
|
||||||
|
|
|
@ -55,6 +55,8 @@ if (!isProduction(window.SignalContext.getVersion())) {
|
||||||
window.MessageCache.__DEPRECATED$getById(id),
|
window.MessageCache.__DEPRECATED$getById(id),
|
||||||
getReduxState: () => window.reduxStore.getState(),
|
getReduxState: () => window.reduxStore.getState(),
|
||||||
getSfuUrl: () => window.Signal.Services.calling._sfuUrl,
|
getSfuUrl: () => window.Signal.Services.calling._sfuUrl,
|
||||||
|
getIceServerOverride: () =>
|
||||||
|
window.Signal.Services.calling._iceServerOverride,
|
||||||
getStorageItem: (name: keyof StorageAccessType) => window.storage.get(name),
|
getStorageItem: (name: keyof StorageAccessType) => window.storage.get(name),
|
||||||
putStorageItem: <K extends keyof StorageAccessType>(
|
putStorageItem: <K extends keyof StorageAccessType>(
|
||||||
name: K,
|
name: K,
|
||||||
|
@ -69,6 +71,14 @@ if (!isProduction(window.SignalContext.getVersion())) {
|
||||||
setSfuUrl: (url: string) => {
|
setSfuUrl: (url: string) => {
|
||||||
window.Signal.Services.calling._sfuUrl = url;
|
window.Signal.Services.calling._sfuUrl = url;
|
||||||
},
|
},
|
||||||
|
setIceServerOverride: (url: string) => {
|
||||||
|
if (!/(turn|turns|stun):.*]/.test(url)) {
|
||||||
|
log.warn(
|
||||||
|
'Override url should be prefixed with `turn:`, `turns:`, or `stun:` else override may not work'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
window.Signal.Services.calling._iceServerOverride = url;
|
||||||
|
},
|
||||||
sqlCall: (name: string, ...args: ReadonlyArray<unknown>) =>
|
sqlCall: (name: string, ...args: ReadonlyArray<unknown>) =>
|
||||||
ipcInvoke(name, args),
|
ipcInvoke(name, args),
|
||||||
...(window.SignalContext.config.ciMode === 'benchmark'
|
...(window.SignalContext.config.ciMode === 'benchmark'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue