This repository has been archived by the owner on Apr 28, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathserver.js
executable file
·114 lines (86 loc) · 2.11 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env node
'use strict';
process.title = 'multiparty-meeting-sipgw';
const config = require('config');
const Srf = require('drachtio-srf');
const Logger = require('./lib/Logger');
const Room = require('./lib/Room');
const kurento = require('kurento-client');
const kurentoConfig = config.get('Kurento');
const srfConfig = config.get('Drachtio');
const logger = new Logger();
let _kurentoClient = null;
// Drachtio connection
const srf = new Srf();
srf.connect(srfConfig);
srf.on('connect', (err, hostport) =>
{
logger.info('Connected to a drachtio server listening on: %s', hostport);
})
.on('error', (err) =>
{
logger.error('Error connecting to drachtio server: %s', err);
});
srf.options((req, res) =>
{
res.send(200);
});
srf.invite((req, res) =>
{
_getKurentoClient()
.then((kurentoClient) =>
{
const roomUri = req.getParsedHeader('to').uri.match(/sip:(.*?)@(.*?)$/);
const roomName = roomUri[1];
const fromHeader = req.get('from').match(/"(.+?)" <sip:.*>|<sip:(.*?)>/);
let displayName;
if (fromHeader[1])
displayName = fromHeader[1];
else
displayName = fromHeader[2];
if (roomName)
{
logger.info(
'invite request [roomName:"%s"]', roomName);
const room = new Room(roomName, srf, kurentoClient, displayName);
room.on('close', () =>
{
logger.debug(
'close() [roomName:"%s"]', roomName);
});
room.handleCall(req, res);
}
else
{
res.send(400);
}
})
.catch((error) =>
{
logger.error('Error on invite: %s', error);
res.send(500);
});
});
async function _getKurentoClient()
{
logger.debug('_getKurentoClient()');
return new Promise((resolve, reject) =>
{
if (_kurentoClient !== null)
{
logger.info('_getKurentoClient | KurentoClient already created');
return resolve(_kurentoClient);
}
kurento(kurentoConfig.uri, (error, kurentoClient) =>
{
if (error)
{
logger.error(error);
return reject(error);
}
logger.info(`_getKurentoClient | created KurentoClient, connected to: ${kurentoConfig.uri}`);
_kurentoClient = kurentoClient;
return resolve(_kurentoClient);
});
});
}