mirror of
https://github.com/jambonz/sbc-outbound.git
synced 2025-12-19 04:27:45 +00:00
use system_information.private_network_cidr (#143)
* use system_information.private_network_cidr * make gh actions work * fix: export logger
This commit is contained in:
11
.github/workflows/build.yml
vendored
11
.github/workflows/build.yml
vendored
@@ -6,12 +6,17 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: 20.x
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm run jslint
|
- run: npm run jslint
|
||||||
|
- name: Install Docker Compose
|
||||||
|
run: |
|
||||||
|
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||||
|
sudo chmod +x /usr/local/bin/docker-compose
|
||||||
|
docker-compose --version
|
||||||
- run: npm test
|
- run: npm test
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
21
app.js
21
app.js
@@ -50,7 +50,8 @@ const {
|
|||||||
lookupSipGatewaysByCarrier,
|
lookupSipGatewaysByCarrier,
|
||||||
lookupCarrierBySid,
|
lookupCarrierBySid,
|
||||||
queryCallLimits,
|
queryCallLimits,
|
||||||
lookupCarrierByAccountLcr
|
lookupCarrierByAccountLcr,
|
||||||
|
lookupSystemInformation
|
||||||
} = require('@jambonz/db-helpers')({
|
} = require('@jambonz/db-helpers')({
|
||||||
host: process.env.JAMBONES_MYSQL_HOST,
|
host: process.env.JAMBONES_MYSQL_HOST,
|
||||||
port: process.env.JAMBONES_MYSQL_PORT || 3306,
|
port: process.env.JAMBONES_MYSQL_PORT || 3306,
|
||||||
@@ -84,6 +85,7 @@ srf.locals = {...srf.locals,
|
|||||||
queryCdrs,
|
queryCdrs,
|
||||||
activeCallIds,
|
activeCallIds,
|
||||||
idleEmitter,
|
idleEmitter,
|
||||||
|
privateNetworkCidr: process.env.PRIVATE_VOIP_NETWORK_CIDR || null,
|
||||||
dbHelpers: {
|
dbHelpers: {
|
||||||
ping,
|
ping,
|
||||||
lookupOutboundCarrierForAccount,
|
lookupOutboundCarrierForAccount,
|
||||||
@@ -94,7 +96,8 @@ srf.locals = {...srf.locals,
|
|||||||
lookupSipGatewaysByCarrier,
|
lookupSipGatewaysByCarrier,
|
||||||
lookupCarrierBySid,
|
lookupCarrierBySid,
|
||||||
queryCallLimits,
|
queryCallLimits,
|
||||||
lookupCarrierByAccountLcr
|
lookupCarrierByAccountLcr,
|
||||||
|
lookupSystemInformation
|
||||||
},
|
},
|
||||||
realtimeDbHelpers: {
|
realtimeDbHelpers: {
|
||||||
client: redisClient,
|
client: redisClient,
|
||||||
@@ -184,10 +187,18 @@ if (process.env.K8S || process.env.HTTP_PORT) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if ('test' !== process.env.NODE_ENV) {
|
if ('test' !== process.env.NODE_ENV) {
|
||||||
/* update call stats periodically */
|
/* update call stats periodically as well as definition of private network cidr */
|
||||||
setInterval(() => {
|
setInterval(async() => {
|
||||||
stats.gauge('sbc.sip.calls.count', activeCallIds.size, ['direction:outbound',
|
stats.gauge('sbc.sip.calls.count', activeCallIds.size, ['direction:outbound',
|
||||||
`instance_id:${process.env.INSTANCE_ID || 0}`]);
|
`instance_id:${process.env.INSTANCE_ID || 0}`]);
|
||||||
|
|
||||||
|
const r = await lookupSystemInformation();
|
||||||
|
if (r) {
|
||||||
|
if (r.private_network_cidr !== srf.locals.privateNetworkCidr) {
|
||||||
|
logger.info(`updating private network cidr from ${srf.locals.privateNetworkCidr} to ${r.private_network_cidr}`);
|
||||||
|
srf.locals.privateNetworkCidr = r.private_network_cidr;
|
||||||
|
}
|
||||||
|
}
|
||||||
}, 20000);
|
}, 20000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,4 +273,4 @@ function handle(signal) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {srf};
|
module.exports = {srf, logger};
|
||||||
|
|||||||
16
lib/utils.js
16
lib/utils.js
@@ -4,9 +4,6 @@ const debug = require('debug')('jambonz:sbc-outbound');
|
|||||||
const CIDRMatcher = require('cidr-matcher');
|
const CIDRMatcher = require('cidr-matcher');
|
||||||
const dns = require('dns');
|
const dns = require('dns');
|
||||||
|
|
||||||
const cidrMatcher = process.env.PRIVATE_VOIP_NETWORK_CIDR ?
|
|
||||||
new CIDRMatcher(process.env.PRIVATE_VOIP_NETWORK_CIDR.split(',')) : null;
|
|
||||||
|
|
||||||
function makeRtpEngineOpts(req, srcIsUsingSrtp, dstIsUsingSrtp, padCrypto, teams) {
|
function makeRtpEngineOpts(req, srcIsUsingSrtp, dstIsUsingSrtp, padCrypto, teams) {
|
||||||
const from = req.getParsedHeader('from');
|
const from = req.getParsedHeader('from');
|
||||||
const rtpCopy = JSON.parse(JSON.stringify(rtpCharacteristics));
|
const rtpCopy = JSON.parse(JSON.stringify(rtpCharacteristics));
|
||||||
@@ -191,8 +188,12 @@ const nudgeCallCounts = async(logger, sids, nudgeOperator, writers) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const isPrivateVoipNetwork = async(uri) => {
|
const isPrivateVoipNetwork = async(uri) => {
|
||||||
if (cidrMatcher) {
|
const {srf, logger} = require('..');
|
||||||
|
const {privateNetworkCidr} = srf.locals;
|
||||||
|
|
||||||
|
if (privateNetworkCidr) {
|
||||||
try {
|
try {
|
||||||
|
const matcher = new CIDRMatcher(privateNetworkCidr.split(','));
|
||||||
const arr = /sips?:.*@(.*?)(:\d+)?(;.*)$/.exec(uri);
|
const arr = /sips?:.*@(.*?)(:\d+)?(;.*)$/.exec(uri);
|
||||||
if (arr) {
|
if (arr) {
|
||||||
const input = arr[1];
|
const input = arr[1];
|
||||||
@@ -203,12 +204,15 @@ const isPrivateVoipNetwork = async(uri) => {
|
|||||||
addresses = await dns.resolve4(input);
|
addresses = await dns.resolve4(input);
|
||||||
}
|
}
|
||||||
for (const ip of addresses) {
|
for (const ip of addresses) {
|
||||||
if (cidrMatcher.contains(ip)) {
|
if (matcher.contains(ip)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {}
|
} catch (err) {
|
||||||
|
logger.info({err, privateNetworkCidr},
|
||||||
|
'Error checking private network CIDR, probably misconfigured must be a comma separated list of CIDRs');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|||||||
16
package-lock.json
generated
16
package-lock.json
generated
@@ -9,7 +9,7 @@
|
|||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jambonz/db-helpers": "^0.9.6",
|
"@jambonz/db-helpers": "^0.9.7",
|
||||||
"@jambonz/http-health-check": "^0.0.1",
|
"@jambonz/http-health-check": "^0.0.1",
|
||||||
"@jambonz/mw-registrar": "0.2.7",
|
"@jambonz/mw-registrar": "0.2.7",
|
||||||
"@jambonz/realtimedb-helpers": "^0.8.9",
|
"@jambonz/realtimedb-helpers": "^0.8.9",
|
||||||
@@ -578,13 +578,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jambonz/db-helpers": {
|
"node_modules/@jambonz/db-helpers": {
|
||||||
"version": "0.9.6",
|
"version": "0.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.9.6.tgz",
|
"resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.9.7.tgz",
|
||||||
"integrity": "sha512-uvtkqdP6GP6KSaM7eo2jcU1k0R6Ymodhl0RH/XiNESgIhZ7sx7ZnMQtrZQVVmzrJ429H7q8dQqgcB2YhAyEK+A==",
|
"integrity": "sha512-5qN/CJZJXpbMkMn+8gFn8PpQ0ZImZxp1EjKyxLUlmMn+xgjeNb29c3pjeVt/6EQnBB65jAax6TNsVzVIfpvE2w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cidr-matcher": "^2.1.1",
|
"cidr-matcher": "^2.1.1",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"mysql2": "^3.10.3",
|
"mysql2": "^3.11.0",
|
||||||
"node-object-hash": "^2.3.10",
|
"node-object-hash": "^2.3.10",
|
||||||
"uuid": "^8.3.2"
|
"uuid": "^8.3.2"
|
||||||
}
|
}
|
||||||
@@ -3563,9 +3563,9 @@
|
|||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
},
|
},
|
||||||
"node_modules/mysql2": {
|
"node_modules/mysql2": {
|
||||||
"version": "3.10.3",
|
"version": "3.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.10.3.tgz",
|
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.0.tgz",
|
||||||
"integrity": "sha512-k43gmH9i79rZD4hGPdj7pDuT0UBiFjs4UzXEy1cJrV0QqcSABomoLwvejqdbcXN+Vd7gi999CVM6o9vCPKq29g==",
|
"integrity": "sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"aws-ssl-profiles": "^1.1.1",
|
"aws-ssl-profiles": "^1.1.1",
|
||||||
"denque": "^2.1.0",
|
"denque": "^2.1.0",
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
"jslint": "eslint app.js lib --fix"
|
"jslint": "eslint app.js lib --fix"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jambonz/db-helpers": "^0.9.6",
|
"@jambonz/db-helpers": "^0.9.7",
|
||||||
"@jambonz/realtimedb-helpers": "^0.8.9",
|
"@jambonz/realtimedb-helpers": "^0.8.9",
|
||||||
"@jambonz/http-health-check": "^0.0.1",
|
"@jambonz/http-health-check": "^0.0.1",
|
||||||
"@jambonz/mw-registrar": "0.2.7",
|
"@jambonz/mw-registrar": "0.2.7",
|
||||||
|
|||||||
Reference in New Issue
Block a user