diff --git a/dist/sockets.js b/dist/sockets.js index 01cc3ec6b21d313bc0efdcf0d8f4c1f69987370a..c92a8fde53f27ed7f593eaedb9064d531e07d83b 100755 --- a/dist/sockets.js +++ b/dist/sockets.js @@ -8,11 +8,15 @@ var _v = require('uuid/v4'); var _v2 = _interopRequireDefault(_v); -var _freeice = require('freeice'); +var _util = require('./util'); -var _freeice2 = _interopRequireDefault(_freeice); +var _crypto = require('crypto'); -var _util = require('./util'); +var _crypto2 = _interopRequireDefault(_crypto); + +var _normalice = require('normalice'); + +var _normalice2 = _interopRequireDefault(_normalice); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -125,12 +129,27 @@ function signalbuddy(server, config) { }); }); - // tell client about stun and turn servers and generate nonces - client.emit('stunservers', (0, _freeice2.default)({ stunCount: config.stunCount, turnCount: -1 }).map(function (server) { - return { urls: server.url }; - })); + function getStunServers() { + return [(0, _normalice2.default)('stun:' + config.ice.stun.username + ':' + config.ice.stun.password + '@' + config.ice.host + ':' + config.ice.port)]; + } + + function getTurnServers() { + // See https://github.com/coturn/coturn/wiki/turnserver#turn-rest-api for details + var acting_ice_turn_username = Math.floor(Date.now() / 1000) + config.ice.turn.timeout + "-" + config.ice.stun.username; + var acting_ice_turn_password = _crypto2.default.createHmac('sha1', config.ice.turn.secret).update(acting_ice_turn_username).digest('base64'); + + return [(0, _normalice2.default)('turn:' + acting_ice_turn_username + ':' + acting_ice_turn_password + '@' + config.ice.host + ':' + config.ice.port)]; + } + + client.on('stunservers', function (cb) { + (0, _util.safeCb)(cb)(null, getStunServers()); + }); + + client.on('turnservers', function (cb) { + (0, _util.safeCb)(cb)(null, getTurnServers()); + }); - client.emit('turnservers', (0, _freeice2.default)({ stunCount: -1, turnCount: config.turnCount })); + client.emit('stunservers', getStunServers()); }); function describeRoom(roomName) { diff --git a/package.json b/package.json index c635320a96220998c8c2c47491d10cbc9905d91e..6ed70371a07c4b28c75549c2eda6544f7f3d244c 100755 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "A scalable socket.io signaling solution for WebRTC using NodeJS cluster and Redis.", "version": "1.0.0", "dependencies": { - "freeice": "^2.2.2", + "normalice": "^1.0.1", "socket.io": "^2.3.0", "uuid": "^3.3.3" }, diff --git a/src/sockets.js b/src/sockets.js index cbd82633f0baf69de5bde5ad63873a10de18e2ec..826c61ac69c8ac0f1eff0b8d34e331c231260841 100755 --- a/src/sockets.js +++ b/src/sockets.js @@ -1,7 +1,8 @@ import socketIO from 'socket.io'; import uuidv4 from 'uuid/v4'; -import freeice from 'freeice'; import { safeCb } from './util'; +import crypto from 'crypto'; +import normalice from 'normalice'; function signalbuddy(server, config) { const io = socketIO.listen(server); @@ -110,12 +111,27 @@ function signalbuddy(server, config) { }); }); - // tell client about stun and turn servers and generate nonces - client.emit('stunservers', freeice({stunCount: config.stunCount, turnCount: -1}).map(server => { - return { urls: server.url } - })); + function getStunServers() { + return [normalice(`stun:${config.ice.stun.username}:${config.ice.stun.password}@${config.ice.host}:${config.ice.port}`)] + } + + function getTurnServers() { + // See https://github.com/coturn/coturn/wiki/turnserver#turn-rest-api for details + const acting_ice_turn_username = (Math.floor(Date.now() / 1000) + config.ice.turn.timeout) + "-" + config.ice.stun.username + const acting_ice_turn_password = crypto.createHmac('sha1', config.ice.turn.secret).update(acting_ice_turn_username).digest('base64') + + return [normalice(`turn:${acting_ice_turn_username}:${acting_ice_turn_password}@${config.ice.host}:${config.ice.port}`)] + } + + client.on('stunservers', (cb) => { + safeCb(cb)(null, getStunServers()) + }); + + client.on('turnservers', (cb) => { + safeCb(cb)(null, getTurnServers()) + }); - client.emit('turnservers', freeice({stunCount: -1, turnCount: config.turnCount})); + client.emit('stunservers', getStunServers()) }); function describeRoom(roomName) {