diff options
author | David Baker <dbkr@matrix.org> | 2014-09-24 17:57:34 +0100 |
---|---|---|
committer | David Baker <dbkr@matrix.org> | 2014-09-24 17:57:34 +0100 |
commit | 6806caffc7d10ed643a6bc80d53a0fe76becd6f5 (patch) | |
tree | 4959d0446f37804ab8c1a0a2bc8d17e8b6075ef6 /webclient | |
parent | The REST API spec only alows for returning a single server so name the (diff) | |
download | synapse-6806caffc7d10ed643a6bc80d53a0fe76becd6f5.tar.xz |
Refresh turn server before the ttl runs out. Support firefox.
Diffstat (limited to 'webclient')
-rw-r--r-- | webclient/components/matrix/matrix-call.js | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/webclient/components/matrix/matrix-call.js b/webclient/components/matrix/matrix-call.js index 888f853472..5c7902f874 100644 --- a/webclient/components/matrix/matrix-call.js +++ b/webclient/components/matrix/matrix-call.js @@ -49,15 +49,6 @@ angular.module('MatrixCall', []) .factory('MatrixCall', ['matrixService', 'matrixPhoneService', '$rootScope', '$timeout', function MatrixCallFactory(matrixService, matrixPhoneService, $rootScope, $timeout) { $rootScope.isWebRTCSupported = isWebRTCSupported(); - // FIXME: we should prevent any class from being placed or accepted before this has finished - matrixService.getTurnServer().then(function(response) { - console.log("Got TURN URIs: "+response.data.uris); - MatrixCall.turnServer = response.data; - }, function(error) { - console.log("Failed to get TURN URIs"); - MatrixCall.turnServer = {}; - }); - var MatrixCall = function(room_id) { this.room_id = room_id; this.call_id = "c" + new Date().getTime(); @@ -75,6 +66,22 @@ angular.module('MatrixCall', []) } + MatrixCall.getTurnServer = function() { + matrixService.getTurnServer().then(function(response) { + console.log("Got TURN URIs: "+response.data.uris); + MatrixCall.turnServer = response.data; + // re-fetch when we're about to reach the TTL + $timeout(MatrixCall.getTurnServer, MatrixCall.turnServer.ttl * 1000 * 0.9); + }, function(error) { + console.log("Failed to get TURN URIs"); + MatrixCall.turnServer = {}; + $timeout(MatrixCall.getTurnServer, 60000); + }); + } + + // FIXME: we should prevent any class from being placed or accepted before this has finished + MatrixCall.getTurnServer(); + MatrixCall.CALL_TIMEOUT = 60000; MatrixCall.prototype.createPeerConnection = function() { @@ -82,11 +89,13 @@ angular.module('MatrixCall', []) if (window.mozRTCPeerConnection) { var iceServers = []; if (MatrixCall.turnServer) { - iceServers.push({ - 'urls': MatrixCall.turnServer.uris, - 'username': MatrixCall.turnServer.username, - 'credential': MatrixCall.turnServer.password, - }); + for (var i = 0; i < MatrixCall.turnServer.uris.length; i++) { + iceServers.push({ + 'url': MatrixCall.turnServer.uris[i], + 'username': MatrixCall.turnServer.username, + 'credential': MatrixCall.turnServer.password, + }); + } } pc = new window.mozRTCPeerConnection({"iceServers":iceServers}); |