summary refs log tree commit diff
path: root/webclient
diff options
context:
space:
mode:
authorDavid Baker <dbkr@matrix.org>2014-09-25 11:13:32 +0100
committerDavid Baker <dbkr@matrix.org>2014-09-25 11:14:29 +0100
commitc0936b103c215aef12d64fbb490d8daef07903c4 (patch)
tree3449ba1a25ffce7c2ce21503305fa0949c24f500 /webclient
parentMake turn server endpoint return an empty object if no turn servers to (diff)
downloadsynapse-c0936b103c215aef12d64fbb490d8daef07903c4.tar.xz
Add stun server fallback and I-told-you-so message if we get no TURN server and the connection fails.
Diffstat (limited to 'webclient')
-rw-r--r--webclient/components/matrix/matrix-call.js50
-rw-r--r--webclient/index.html2
2 files changed, 34 insertions, 18 deletions
diff --git a/webclient/components/matrix/matrix-call.js b/webclient/components/matrix/matrix-call.js
index 5c7902f874..3e8811e5fc 100644
--- a/webclient/components/matrix/matrix-call.js
+++ b/webclient/components/matrix/matrix-call.js
@@ -68,10 +68,16 @@ 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);
+            if (response.data.uris) {
+                console.log("Got TURN URIs: "+response.data.uris);
+                MatrixCall.turnServer = response.data;
+                $rootScope.haveTurn = true;
+                // re-fetch when we're about to reach the TTL
+                $timeout(MatrixCall.getTurnServer, MatrixCall.turnServer.ttl * 1000 * 0.9);
+            } else {
+                console.log("Got no TURN URIs from HS");
+                $rootScope.haveTurn = false;
+            }
         }, function(error) {
             console.log("Failed to get TURN URIs");
             MatrixCall.turnServer = {};
@@ -83,31 +89,41 @@ angular.module('MatrixCall', [])
     MatrixCall.getTurnServer();
 
     MatrixCall.CALL_TIMEOUT = 60000;
+    MatrixCall.FALLBACK_STUN_SERVER = 'stun:stun.l.google.com:19302';
 
     MatrixCall.prototype.createPeerConnection = function() {
         var pc;
         if (window.mozRTCPeerConnection) {
             var iceServers = [];
             if (MatrixCall.turnServer) {
-                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,
-                    });
-               }
+                if (MatrixCall.turnServer.uris) {
+                    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,
+                        });
+                    }
+                } else {
+                    console.log("No TURN server: using fallback STUN server");
+                    iceServers.push({ 'url' : MatrixCall.FALLBACK_STUN_SERVER });
+                }
             }
           
             pc = new window.mozRTCPeerConnection({"iceServers":iceServers});
-            //pc = new window.mozRTCPeerConnection({'url': stunServer});
         } else {
             var iceServers = [];
             if (MatrixCall.turnServer) {
-                iceServers.push({
-                    'urls': MatrixCall.turnServer.uris,
-                    'username': MatrixCall.turnServer.username,
-                    'credential': MatrixCall.turnServer.password,
-                });
+                if (MatrixCall.turnServer.uris) {
+                    iceServers.push({
+                        'urls': MatrixCall.turnServer.uris,
+                        'username': MatrixCall.turnServer.username,
+                        'credential': MatrixCall.turnServer.password,
+                    });
+                } else {
+                    console.log("No TURN server: using fallback STUN server");
+                    iceServers.push({ 'urls' : MatrixCall.FALLBACK_STUN_SERVER });
+                }
             }
           
             pc = new window.RTCPeerConnection({"iceServers":iceServers});
diff --git a/webclient/index.html b/webclient/index.html
index 411c2762d3..f233919e3d 100644
--- a/webclient/index.html
+++ b/webclient/index.html
@@ -69,7 +69,7 @@
                         <span ng-show="currentCall.state == 'ringing' && currentCall && currentCall.type == 'voice'">Incoming Voice Call</span>
                         <span ng-show="currentCall.state == 'connecting'">Call Connecting...</span>
                         <span ng-show="currentCall.state == 'connected'">Call Connected</span>
-                        <span ng-show="currentCall.state == 'ended' && currentCall.hangupReason == 'ice_failed'">Media Connection Failed</span>
+                        <span ng-show="currentCall.state == 'ended' && currentCall.hangupReason == 'ice_failed'">Media Connection Failed{{ haveTurn ? "" : " (VoIP relaying unsupported by Home Server)" }}</span>
                         <span ng-show="currentCall.state == 'ended' && !currentCall.hangupReason && !currentCall.didConnect && currentCall.direction == 'outbound' && currentCall.hangupParty == 'remote'">Call Rejected</span>
                         <span ng-show="currentCall.state == 'ended' && !currentCall.hangupReason && !currentCall.didConnect && currentCall.direction == 'outbound' && currentCall.hangupParty == 'local'">Call Canceled</span>
                         <span ng-show="currentCall.state == 'ended' && currentCall.hangupReason == 'invite_timeout' && !currentCall.didConnect && currentCall.direction == 'outbound' && currentCall.hangupParty == 'local'">User Not Responding</span>