Add stun server fallback and I-told-you-so message if we get no TURN server and the connection fails.

pull/10/head
David Baker 2014-09-25 11:13:32 +01:00
parent a31bf77776
commit c0936b103c
2 changed files with 34 additions and 18 deletions

View File

@ -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});

View File

@ -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>