Store the private IP in redis when a client registers (#113)

* add srf.locals.privateSipAddress

* add private SBC address in client redis data

* lint
This commit is contained in:
Sam Machin
2025-10-05 01:08:42 +01:00
committed by GitHub
parent 3f8fb53390
commit 52e1fc78b9
2 changed files with 19 additions and 2 deletions

20
app.js
View File

@@ -32,6 +32,7 @@ assert.ok(DRACHTIO_PORT, 'missing DRACHTIO_PORT env var');
assert.ok(DRACHTIO_SECRET, 'missing DRACHTIO_SECRET env var');
assert.ok(JAMBONES_TIME_SERIES_HOST, 'missing JAMBONES_TIME_SERIES_HOST env var');
const CIDRMatcher = require('cidr-matcher');
const logger = require('pino')({ level: JAMBONES_LOGLEVEL || 'info' });
const Srf = require('drachtio-srf');
const srf = new Srf();
@@ -120,11 +121,26 @@ srf.locals = {
writeAlerts,
AlertType
};
const cidrs = process.env.JAMBONES_NETWORK_CIDR
.split(',')
.map((s) => s.trim());
const matcher = new CIDRMatcher(cidrs);
srf.connect({ host: DRACHTIO_HOST, port: DRACHTIO_PORT, secret: DRACHTIO_SECRET });
srf.on('connect', (err, hp) => {
srf.on('connect', (err, hp, version, localHostports) => {
if (err) return logger.error({ err }, 'Error connecting to drachtio server');
logger.info(`connected to drachtio listening on ${hp}`);
logger.info(`connected to drachtio listening on ${hp}, local hostports: ${localHostports}`);
if (localHostports) {
const locals = localHostports.split(',');
for (const hp of locals) {
const arr = /^(.*)\/(.*):(\d+)$/.exec(hp);
if (arr && 'tcp' === arr[1] && matcher.contains(arr[2])) {
const hostport = `${arr[2]}:${arr[3]}`;
srf.locals.privateSipAddress = hostport;
}
}
}
// Add SBC Public IP to Database
srf.locals.sbcPublicIpAddress = {};

View File

@@ -32,6 +32,7 @@ async function register(logger, req, res) {
const opts = {
contact: req.getParsedHeader('Contact')[0].uri,
sbcAddress: req.server.hostport,
privateSbcAddress: req.srf.locals.privateSipAddress,
protocol: getSipProtocol(req),
proxy: `sip:${req.source_address}:${req.source_port}`,
callHook: req.authorization.grant.call_hook,