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');
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 }; }
......@@ -20,11 +24,17 @@ function signalbuddy(server, config) {
var _arguments = arguments;
var io = _socket2.default.listen(server);
io.engine.generateId = function () /*req, callback*/{
return (0, _v2.default)();
};
io.on('connection', function (client) {
client.resources = {
screen: false,
video: true,
audio: false
video: false,
audio: false,
data: true
};
// pass a message to another id
......@@ -33,6 +43,9 @@ function signalbuddy(server, config) {
var otherClient = io.to(details.to);
if (!otherClient) return;
details.from = client.id;
if (details.type === 'offer') {
details.turnservers = getTurnServers(details.to + ".." + client.id);
}
otherClient.emit('message', details);
});
......@@ -78,7 +91,7 @@ function signalbuddy(server, config) {
describeRoom(roomName).then(function (description) {
var obj = { clients: {} };
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);
}).catch(function (err) {
......@@ -125,12 +138,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(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) {
......
......@@ -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"
},
......
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);
io.engine.generateId = function (/*req, callback*/) {
return uuidv4();
};
io.on('connection', (client) => {
client.resources = {
screen: false,
video: true,
audio: false
video: false,
audio: false,
data: true,
};
// pass a message to another id
......@@ -18,6 +25,9 @@ function signalbuddy(server, config) {
const otherClient = io.to(details.to);
if (!otherClient) return;
details.from = client.id;
if (details.type === 'offer') {
details.turnservers = getTurnServers(details.to + ".." + client.id)
}
otherClient.emit('message', details);
});
......@@ -63,7 +73,7 @@ function signalbuddy(server, config) {
.then((description) => {
const obj = { clients: {} };
description.forEach((k) => {
obj.clients[k] = client.resources;
obj.clients[k] = Object.assign({}, client.resources, { turnservers: getTurnServers(client.id + ".." + k) });
});
safeCb(callback)(null, obj);
})
......@@ -110,12 +120,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(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) {
......