mirror of
https://github.com/jambonz/sbc-inbound.git
synced 2025-12-19 04:37:43 +00:00
rtpengine function factored into package
This commit is contained in:
@@ -2,6 +2,7 @@ const Emitter = require('events');
|
||||
const {getAppserver, isWSS, makeRtpEngineOpts} = require('./utils');
|
||||
const {forwardInDialogRequests} = require('drachtio-fn-b2b-sugar');
|
||||
const {parseUri, SipError} = require('drachtio-srf');
|
||||
const {getRtpEngine} = require('jambonz-rtpengine-utils')(process.env.JAMBONES_RTPENGINES.split(','));
|
||||
const debug = require('debug')('jambonz:sbc-inbound');
|
||||
|
||||
class CallSession extends Emitter {
|
||||
@@ -14,12 +15,13 @@ class CallSession extends Emitter {
|
||||
}
|
||||
|
||||
async connect() {
|
||||
const getRtpEngine = require('./rtpengine')(this.logger);
|
||||
const engine = getRtpEngine();
|
||||
debug(`getRTPENGINE ${typeof getRtpEngine}`);
|
||||
const engine = getRtpEngine(this.logger);
|
||||
if (!engine) {
|
||||
this.logger.info('No available rtpengines, rejecting call!');
|
||||
return this.res.send(480);
|
||||
}
|
||||
debug(`got engine: ${JSON.stringify(engine)}`);
|
||||
const {offer, answer, del} = engine;
|
||||
this.offer = offer;
|
||||
this.answer = answer;
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
const assert = require('assert');
|
||||
const Client = require('rtpengine-client').Client ;
|
||||
const client = new Client({timeout: 1500});
|
||||
const debug = require('debug')('jambonz:sbc-inbound');
|
||||
let timer;
|
||||
|
||||
const engines = process.env.JAMBONES_RTPENGINES
|
||||
.split(',')
|
||||
.map((hp) => {
|
||||
const arr = /^(.*):(.*)$/.exec(hp.trim());
|
||||
if (!arr) throw new Error('JAMBONES_RTPENGINES must be an array host:port addresses');
|
||||
const engine = {
|
||||
active: true,
|
||||
calls: 0,
|
||||
host: arr[1],
|
||||
port: parseInt(arr[2])
|
||||
};
|
||||
[
|
||||
'offer',
|
||||
'answer',
|
||||
'delete',
|
||||
'list',
|
||||
'startRecording',
|
||||
'stopRecording'
|
||||
].forEach((method) => engine[method] = client[method].bind(client, engine.port, engine.host));
|
||||
return engine;
|
||||
});
|
||||
assert.ok(engines.length > 0, 'JAMBONES_RTPENGINES must be an array host:port addresses');
|
||||
debug(`engines: ${JSON.stringify(engines)}`);
|
||||
|
||||
function testEngines(logger) {
|
||||
return setInterval(() => {
|
||||
engines.forEach(async(engine) => {
|
||||
try {
|
||||
const res = await engine.list();
|
||||
if ('ok' === res.result) {
|
||||
engine.calls = res.calls.length;
|
||||
engine.active = true;
|
||||
logger.info({res}, `rtpengine:list ${engine.host}:${engine.port} has ${engine.calls} calls`);
|
||||
return;
|
||||
}
|
||||
logger.info({rtpengine: engine.host, response: res}, 'Failure response from rtpengine');
|
||||
engine.active = false;
|
||||
} catch (err) {
|
||||
logger.info({rtpengine: engine.host, err}, 'Failure response from rtpengine');
|
||||
}
|
||||
engine.active = false;
|
||||
});
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
const selectClient = () => engines.filter((c) => c.active).sort((a, b) => (a.calls - b.calls)).shift();
|
||||
|
||||
function getRtpEngine(logger) {
|
||||
if (!timer) timer = testEngines(logger);
|
||||
return () => {
|
||||
const engine = selectClient();
|
||||
if (engine) {
|
||||
debug({engine}, 'selected engine');
|
||||
return {
|
||||
offer: engine.offer,
|
||||
answer: engine.answer,
|
||||
del: engine.delete
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = getRtpEngine;
|
||||
19
package-lock.json
generated
19
package-lock.json
generated
@@ -1823,6 +1823,25 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"jambonz-rtpengine-utils": {
|
||||
"version": "0.0.5",
|
||||
"resolved": "https://registry.npmjs.org/jambonz-rtpengine-utils/-/jambonz-rtpengine-utils-0.0.5.tgz",
|
||||
"integrity": "sha512-tkAwXkV6nYVBvF/epcIoNOUX8NDepFo25WP4a2DBu0+g8e76MzDChXGuziYRGswL3TFZxd6faTbU44rg+UcoMA==",
|
||||
"requires": {
|
||||
"debug": "^4.1.1",
|
||||
"rtpengine-client": "0.0.9"
|
||||
},
|
||||
"dependencies": {
|
||||
"rtpengine-client": {
|
||||
"version": "0.0.9",
|
||||
"resolved": "https://registry.npmjs.org/rtpengine-client/-/rtpengine-client-0.0.9.tgz",
|
||||
"integrity": "sha512-AkeDx6QEk/WtIBGnoxf3/lWbV0h4JTlPPBCHW+qjYT4xfKYzzCFCmP639ovuIJhE0L6aL89Vv0YmlQdEWo6ofw==",
|
||||
"requires": {
|
||||
"bencode": "^1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"drachtio-srf": "^4.4.28",
|
||||
"jambonz-db-helpers": "^0.3.2",
|
||||
"jambonz-http-authenticator": "0.1.1",
|
||||
"jambonz-rtpengine-utils": "0.0.5",
|
||||
"pino": "^5.14.0",
|
||||
"rtpengine-client": "^0.0.8"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user