diff --git a/src/RTCSession/RTCMediaHandler.js b/src/RTCSession/RTCMediaHandler.js index 564f0fc2d..23b3155da 100644 --- a/src/RTCSession/RTCMediaHandler.js +++ b/src/RTCSession/RTCMediaHandler.js @@ -105,24 +105,19 @@ RTCMediaHandler.prototype = { * @param {Function} onSuccess Fired when there are no more ICE candidates */ init: function(constraints) { - var idx, length, server, scheme, url, + var idx, length, server, self = this, servers = [], config = this.session.ua.configuration; - length = config.stun_servers.length; - for (idx = 0; idx < length; idx++) { - server = config.stun_servers[idx]; - servers.push({'url': server}); - } + servers.push({'url': config.stun_servers}); length = config.turn_servers.length; for (idx = 0; idx < length; idx++) { server = config.turn_servers[idx]; - url = server.server; - scheme = url.substr(0, url.indexOf(':')); servers.push({ - 'url': scheme + ':' + server.username + '@' + url.substr(scheme.length+1), + 'url': server.urls, + 'username': server.username, 'credential': server.password }); } diff --git a/src/UA.js b/src/UA.js index b2b9eaea9..4f524cd54 100644 --- a/src/UA.js +++ b/src/UA.js @@ -1088,7 +1088,7 @@ UA.configuration_check = { }, turn_servers: function(turn_servers) { - var idx, length, turn_server; + var idx, length, turn_server, url; if (turn_servers instanceof Array) { // Do nothing @@ -1099,14 +1099,32 @@ UA.configuration_check = { length = turn_servers.length; for (idx = 0; idx < length; idx++) { turn_server = turn_servers[idx]; - if (!turn_server.server || !turn_server.username || !turn_server.password) { + + // Backward compatibility: + //Allow defining the turn_server url with the 'server' property. + if (turn_server.server) { + turn_server.urls = [turn_server.server]; + } + + if (!turn_server.urls || !turn_server.username || !turn_server.password) { return; - } else if (!(/^turns?:/.test(turn_server.server))) { - turn_server.server = 'turn:' + turn_server.server; } + + if (!turn_server.urls instanceof Array) { + turn_server.urls = [turn_server.urls]; + } + + length = turn_server.urls.length; + for (idx = 0; idx < length; idx++) { + url = turn_server.urls[idx]; + + if (!(/^turns?:/.test(url))) { + url = 'turn:' + url; + } - if(JsSIP.Grammar.parse(turn_server.server, 'turn_URI') === -1) { - return; + if(JsSIP.Grammar.parse(url, 'turn_URI') === -1) { + return; + } } } return turn_servers;