diff options
author | David Baker <dbkr@matrix.org> | 2014-09-25 11:13:32 +0100 |
---|---|---|
committer | David Baker <dbkr@matrix.org> | 2014-09-25 11:14:29 +0100 |
commit | c0936b103c215aef12d64fbb490d8daef07903c4 (patch) | |
tree | 3449ba1a25ffce7c2ce21503305fa0949c24f500 | |
parent | Make turn server endpoint return an empty object if no turn servers to (diff) | |
download | synapse-c0936b103c215aef12d64fbb490d8daef07903c4.tar.xz |
Add stun server fallback and I-told-you-so message if we get no TURN server and the connection fails.
-rw-r--r-- | webclient/components/matrix/matrix-call.js | 50 | ||||
-rw-r--r-- | webclient/index.html | 2 |
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> |