mirror of
https://github.com/jech/galene.git
synced 2024-11-10 02:35:58 +01:00
Add preference forceRelay.
This may be useful to get around network blocks in some cases.
This commit is contained in:
parent
4053d9ca77
commit
34b21a2598
2 changed files with 42 additions and 2 deletions
|
@ -47,6 +47,7 @@ let token = null;
|
|||
* @property {string} [filter]
|
||||
* @property {boolean} [preprocessing]
|
||||
* @property {boolean} [hqaudio]
|
||||
* @property {boolean} [forceRelay]
|
||||
*/
|
||||
|
||||
/** @type{settings} */
|
||||
|
@ -324,6 +325,22 @@ async function gotConnected(username) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @this {ServerConnection}
|
||||
* @param {boolean} up
|
||||
*/
|
||||
function onPeerConnection(up) {
|
||||
if(!getSettings().forceRelay)
|
||||
return null;
|
||||
let old = this.rtcConfiguration;
|
||||
/** @type {RTCConfiguration} */
|
||||
let conf = {};
|
||||
for(let key in old)
|
||||
conf[key] = old[key];
|
||||
conf.iceTransportPolicy = 'relay';
|
||||
return conf;
|
||||
}
|
||||
|
||||
/**
|
||||
* @this {ServerConnection}
|
||||
* @param {number} code
|
||||
|
@ -3827,6 +3844,7 @@ async function serverConnect() {
|
|||
serverConnection.close();
|
||||
serverConnection = new ServerConnection();
|
||||
serverConnection.onconnected = gotConnected;
|
||||
serverConnection.onpeerconnection = onPeerConnection;
|
||||
serverConnection.onclose = gotClose;
|
||||
serverConnection.ondownstream = gotDownStream;
|
||||
serverConnection.onuser = gotUser;
|
||||
|
|
|
@ -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({
|
||||
|
|
Loading…
Reference in a new issue