Add preference forceRelay.

This may be useful to get around network blocks in some cases.
This commit is contained in:
Juliusz Chroboczek
2022-03-22 18:22:18 +01:00
parent 4053d9ca77
commit 34b21a2598
2 changed files with 42 additions and 2 deletions
+24 -2
View File
@@ -151,6 +151,14 @@ function ServerConnection() {
* @type{(this: ServerConnection, code: number, reason: string) => void}
*/
this.onclose = null;
/**
* onpeerconnection is called before we establish a new peer connection.
* It may either return null, or a new RTCConfiguration that overrides
* the value obtained from the server.
*
* @type{(this: ServerConnection, up: boolean) => RTCConfiguration}
*/
this.onpeerconnection = null;
/**
* onuser is called whenever a user in the group changes. The users
* array has already been updated.
@@ -512,6 +520,19 @@ ServerConnection.prototype.findByLocalId = function(localId) {
return null;
}
/**
* @param {boolean} up
* @returns {RTCConfiguration}
*/
ServerConnection.prototype.getRTCConfiguration = function(up) {
if(this.onpeerconnection) {
let conf = this.onpeerconnection.call(this, up);
if(conf !== null)
return conf;
}
return this.rtcConfiguration;
}
/**
* newUpStream requests the creation of a new up stream.
*
@@ -529,7 +550,8 @@ ServerConnection.prototype.newUpStream = function(localId) {
if(typeof RTCPeerConnection === 'undefined')
throw new Error("This browser doesn't support WebRTC");
let pc = new RTCPeerConnection(sc.rtcConfiguration);
let pc = new RTCPeerConnection(sc.getRTCConfiguration(true));
if(!pc)
throw new Error("Couldn't create peer connection");
@@ -685,7 +707,7 @@ ServerConnection.prototype.gotOffer = async function(id, label, source, username
if(!c) {
let pc;
try {
pc = new RTCPeerConnection(sc.rtcConfiguration);
pc = new RTCPeerConnection(sc.getRTCConfiguration(false));
} catch(e) {
console.error(e);
sc.send({