summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--webclient/components/matrix/matrix-call.js37
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});