Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • sweng-group-15/signalbuddy
1 result
Show changes
Commits on Source (4)
...@@ -8,11 +8,15 @@ var _v = require('uuid/v4'); ...@@ -8,11 +8,15 @@ var _v = require('uuid/v4');
var _v2 = _interopRequireDefault(_v); 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 }; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
...@@ -20,11 +24,17 @@ function signalbuddy(server, config) { ...@@ -20,11 +24,17 @@ function signalbuddy(server, config) {
var _arguments = arguments; var _arguments = arguments;
var io = _socket2.default.listen(server); var io = _socket2.default.listen(server);
io.engine.generateId = function () /*req, callback*/{
return (0, _v2.default)();
};
io.on('connection', function (client) { io.on('connection', function (client) {
client.resources = { client.resources = {
screen: false, screen: false,
video: true, video: false,
audio: false audio: false,
data: true
}; };
// pass a message to another id // pass a message to another id
...@@ -33,6 +43,9 @@ function signalbuddy(server, config) { ...@@ -33,6 +43,9 @@ function signalbuddy(server, config) {
var otherClient = io.to(details.to); var otherClient = io.to(details.to);
if (!otherClient) return; if (!otherClient) return;
details.from = client.id; details.from = client.id;
if (details.type === 'offer') {
details.turnservers = getTurnServers(details.to + ".." + client.id);
}
otherClient.emit('message', details); otherClient.emit('message', details);
}); });
...@@ -78,7 +91,7 @@ function signalbuddy(server, config) { ...@@ -78,7 +91,7 @@ function signalbuddy(server, config) {
describeRoom(roomName).then(function (description) { describeRoom(roomName).then(function (description) {
var obj = { clients: {} }; var obj = { clients: {} };
description.forEach(function (k) { description.forEach(function (k) {
obj.clients[k] = client.resources; obj.clients[k] = Object.assign({}, client.resources, { turnservers: getTurnServers(client.id + ".." + k) });
}); });
(0, _util.safeCb)(callback)(null, obj); (0, _util.safeCb)(callback)(null, obj);
}).catch(function (err) { }).catch(function (err) {
...@@ -125,12 +138,27 @@ function signalbuddy(server, config) { ...@@ -125,12 +138,27 @@ function signalbuddy(server, config) {
}); });
}); });
// tell client about stun and turn servers and generate nonces function getStunServers() {
client.emit('stunservers', (0, _freeice2.default)({ stunCount: config.stunCount, turnCount: -1 }).map(function (server) { return [(0, _normalice2.default)('stun:' + config.ice.stun.username + ':' + config.ice.stun.password + '@' + config.ice.host + ':' + config.ice.port)];
return { urls: server.url }; }
}));
function getTurnServers(username) {
// 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 + "-" + username.replace(/-/g, "");
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 (username, cb) {
(0, _util.safeCb)(cb)(null, getTurnServers(username));
});
client.emit('turnservers', (0, _freeice2.default)({ stunCount: -1, turnCount: config.turnCount })); client.emit('stunservers', getStunServers());
}); });
function describeRoom(roomName) { function describeRoom(roomName) {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
"description": "A scalable socket.io signaling solution for WebRTC using NodeJS cluster and Redis.", "description": "A scalable socket.io signaling solution for WebRTC using NodeJS cluster and Redis.",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"freeice": "^2.2.2", "normalice": "^1.0.1",
"socket.io": "^2.3.0", "socket.io": "^2.3.0",
"uuid": "^3.3.3" "uuid": "^3.3.3"
}, },
......
import socketIO from 'socket.io'; import socketIO from 'socket.io';
import uuidv4 from 'uuid/v4'; import uuidv4 from 'uuid/v4';
import freeice from 'freeice';
import { safeCb } from './util'; import { safeCb } from './util';
import crypto from 'crypto';
import normalice from 'normalice';
function signalbuddy(server, config) { function signalbuddy(server, config) {
const io = socketIO.listen(server); const io = socketIO.listen(server);
io.engine.generateId = function (/*req, callback*/) {
return uuidv4();
};
io.on('connection', (client) => { io.on('connection', (client) => {
client.resources = { client.resources = {
screen: false, screen: false,
video: true, video: false,
audio: false audio: false,
data: true,
}; };
// pass a message to another id // pass a message to another id
...@@ -18,6 +25,9 @@ function signalbuddy(server, config) { ...@@ -18,6 +25,9 @@ function signalbuddy(server, config) {
const otherClient = io.to(details.to); const otherClient = io.to(details.to);
if (!otherClient) return; if (!otherClient) return;
details.from = client.id; details.from = client.id;
if (details.type === 'offer') {
details.turnservers = getTurnServers(details.to + ".." + client.id)
}
otherClient.emit('message', details); otherClient.emit('message', details);
}); });
...@@ -63,7 +73,7 @@ function signalbuddy(server, config) { ...@@ -63,7 +73,7 @@ function signalbuddy(server, config) {
.then((description) => { .then((description) => {
const obj = { clients: {} }; const obj = { clients: {} };
description.forEach((k) => { description.forEach((k) => {
obj.clients[k] = client.resources; obj.clients[k] = Object.assign({}, client.resources, { turnservers: getTurnServers(client.id + ".." + k) });
}); });
safeCb(callback)(null, obj); safeCb(callback)(null, obj);
}) })
...@@ -110,12 +120,27 @@ function signalbuddy(server, config) { ...@@ -110,12 +120,27 @@ function signalbuddy(server, config) {
}); });
}); });
// tell client about stun and turn servers and generate nonces function getStunServers() {
client.emit('stunservers', freeice({stunCount: config.stunCount, turnCount: -1}).map(server => { return [normalice(`stun:${config.ice.stun.username}:${config.ice.stun.password}@${config.ice.host}:${config.ice.port}`)]
return { urls: server.url } }
}));
function getTurnServers(username) {
// 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) + "-" + username.replace(/-/g, "")
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', (username, cb) => {
safeCb(cb)(null, getTurnServers(username))
});
client.emit('turnservers', freeice({stunCount: -1, turnCount: config.turnCount})); client.emit('stunservers', getStunServers())
}); });
function describeRoom(roomName) { function describeRoom(roomName) {
......