From a40b10f53ca7cb7bb75182caff4ae074ce918dc5 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 12 Jun 2017 20:16:29 +0100 Subject: [PATCH] allow setting iceTransportPolicy to relay through forceTURN option Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/webrtc/call.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/webrtc/call.js b/src/webrtc/call.js index 6ae945e5fc1..a44e18ad63a 100644 --- a/src/webrtc/call.js +++ b/src/webrtc/call.js @@ -71,6 +71,7 @@ const DEBUG = true; // set true to enable console logging. * @param {Object} opts Config options. * @param {string} opts.roomId The room ID for this call. * @param {Object} opts.webRtc The WebRTC globals from the browser. + * @param {boolean} opts.forceTURN whether relay through TURN should be forced. * @param {Object} opts.URL The URL global. * @param {Array} opts.turnServers Optional. A list of TURN servers. * @param {MatrixClient} opts.client The Matrix Client instance to send events to. @@ -79,6 +80,7 @@ function MatrixCall(opts) { this.roomId = opts.roomId; this.client = opts.client; this.webRtc = opts.webRtc; + this.forceTURN = opts.forceTURN; this.URL = opts.URL; // Array of Objects with urls, username, credential keys this.turnServers = opts.turnServers || []; @@ -1184,6 +1186,7 @@ const _createPeerConnection = function(self) { } const pc = new self.webRtc.RtcPeerConnection({ + iceTransportPolicy: self.forceTURN ? 'relay' : undefined, iceServers: servers, }); pc.oniceconnectionstatechange = hookCallback(self, self._onIceConnectionStateChanged); @@ -1293,9 +1296,11 @@ module.exports.setVideoInput = function(deviceId) { videoInput = deviceId; }; * Create a new Matrix call for the browser. * @param {MatrixClient} client The client instance to use. * @param {string} roomId The room the call is in. + * @param {Object?} options optional options map. + * @param {boolean} options.forceTURN whether relay through TURN should be forced. * @return {MatrixCall} the call or null if the browser doesn't support calling. */ -module.exports.createNewMatrixCall = function(client, roomId) { +module.exports.createNewMatrixCall = function(client, roomId, options) { const w = global.window; const doc = global.document; if (!w || !doc) { @@ -1351,6 +1356,8 @@ module.exports.createNewMatrixCall = function(client, roomId) { URL: w.URL, roomId: roomId, turnServers: client.getTurnServers(), + // call level options + forceTURN: options ? options.forceTURN : false, }; return new MatrixCall(opts); };