mirror of
https://github.com/jambonz/sbc-sip-sidecar.git
synced 2025-12-19 04:27:46 +00:00
Disable Options and Registration on certain failures (#90)
* disable options ping on defined errors * correct sid * disable reg on error * fix path * fixes from testing * fixes from testing * lint * update dbhelpers dep * remove whitespace in CONFIG strings * lint * this seems like a better way of convering and matching status codes
This commit is contained in:
6
app.js
6
app.js
@@ -56,7 +56,8 @@ const {
|
|||||||
lookupSipGatewaysByFilters,
|
lookupSipGatewaysByFilters,
|
||||||
updateSipGatewayBySid,
|
updateSipGatewayBySid,
|
||||||
lookupCarrierBySid,
|
lookupCarrierBySid,
|
||||||
lookupSystemInformation
|
lookupSystemInformation,
|
||||||
|
updateCarrierBySid,
|
||||||
} = require('@jambonz/db-helpers')({
|
} = require('@jambonz/db-helpers')({
|
||||||
host: JAMBONES_MYSQL_HOST,
|
host: JAMBONES_MYSQL_HOST,
|
||||||
user: JAMBONES_MYSQL_USER,
|
user: JAMBONES_MYSQL_USER,
|
||||||
@@ -104,7 +105,8 @@ srf.locals = {
|
|||||||
lookupSipGatewaysByFilters,
|
lookupSipGatewaysByFilters,
|
||||||
updateSipGatewayBySid,
|
updateSipGatewayBySid,
|
||||||
lookupCarrierBySid,
|
lookupCarrierBySid,
|
||||||
lookupSystemInformation
|
lookupSystemInformation,
|
||||||
|
updateCarrierBySid
|
||||||
},
|
},
|
||||||
realtimeDbHelpers: {
|
realtimeDbHelpers: {
|
||||||
client,
|
client,
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ const JAMBONES_REGBOT_CONTACT_USE_IP = process.env.JAMBONES_REGBOT_CONTACT_USE_I
|
|||||||
const JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL = process.env.JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL;
|
const JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL = process.env.JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL;
|
||||||
const JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL = process.env.JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL;
|
const JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL = process.env.JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL;
|
||||||
const JAMBONES_REGBOT_INITIAL_DELAY_MS = process.env.JAMBONES_REGBOT_INITIAL_DELAY_MS || 250;
|
const JAMBONES_REGBOT_INITIAL_DELAY_MS = process.env.JAMBONES_REGBOT_INITIAL_DELAY_MS || 250;
|
||||||
|
const OPTIONS_RESPONSE_REMOVE = process.env.OPTIONS_RESPONSE_REMOVE?.split(',').map(Number) || [];
|
||||||
|
const REGISTER_RESPONSE_REMOVE = process.env.REGISTER_RESPONSE_REMOVE?.split(',').map(Number) || [];
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
JAMBONES_MYSQL_HOST,
|
JAMBONES_MYSQL_HOST,
|
||||||
@@ -57,5 +59,7 @@ module.exports = {
|
|||||||
JAMBONES_REGBOT_CONTACT_USE_IP,
|
JAMBONES_REGBOT_CONTACT_USE_IP,
|
||||||
JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL,
|
JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL,
|
||||||
JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL,
|
JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL,
|
||||||
JAMBONES_REGBOT_INITIAL_DELAY_MS
|
JAMBONES_REGBOT_INITIAL_DELAY_MS,
|
||||||
|
OPTIONS_RESPONSE_REMOVE,
|
||||||
|
REGISTER_RESPONSE_REMOVE
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
const {
|
const {
|
||||||
JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL,
|
JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL,
|
||||||
JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL,
|
JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL,
|
||||||
JAMBONES_REGBOT_CONTACT_USE_IP
|
JAMBONES_REGBOT_CONTACT_USE_IP,
|
||||||
|
REGISTER_RESPONSE_REMOVE
|
||||||
} = require('./config');
|
} = require('./config');
|
||||||
const debug = require('debug')('jambonz:sbc-registrar');
|
const debug = require('debug')('jambonz:sbc-registrar');
|
||||||
const {isValidIPv4, isValidDomainOrIP} = require('./utils');
|
const {isValidIPv4, isValidDomainOrIP} = require('./utils');
|
||||||
@@ -74,6 +75,8 @@ class Regbot {
|
|||||||
|
|
||||||
async register(srf) {
|
async register(srf) {
|
||||||
const { updateVoipCarriersRegisterStatus } = srf.locals.dbHelpers;
|
const { updateVoipCarriersRegisterStatus } = srf.locals.dbHelpers;
|
||||||
|
const { writeAlerts } = srf.locals;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// transport
|
// transport
|
||||||
const transport = (this.protocol.includes('/') ? this.protocol.substring(0, this.protocol.indexOf('/')) :
|
const transport = (this.protocol.includes('/') ? this.protocol.substring(0, this.protocol.indexOf('/')) :
|
||||||
@@ -120,11 +123,26 @@ class Regbot {
|
|||||||
password: this.password
|
password: this.password
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
req.on('response', (res) => {
|
req.on('response', async(res) => {
|
||||||
if (res.status !== 200) {
|
if (res.status !== 200) {
|
||||||
this.status = 'fail';
|
this.status = 'fail';
|
||||||
this.logger.info(`${this.aor}: got ${res.status} registering to ${this.ipv4}:${this.port}`);
|
this.logger.info(`${this.aor}: got ${res.status} registering to ${this.ipv4}:${this.port}`);
|
||||||
this.timer = setTimeout(this.register.bind(this, srf), 30 * 1000);
|
this.timer = setTimeout(this.register.bind(this, srf), 30 * 1000);
|
||||||
|
if (REGISTER_RESPONSE_REMOVE.includes(res.status)) {
|
||||||
|
const { updateCarrierBySid, lookupCarrierBySid } = srf.locals.dbHelpers;
|
||||||
|
await updateCarrierBySid(this.voip_carrier_sid, {requires_register: false});
|
||||||
|
this.stop(); //Remove the retry timer
|
||||||
|
const carrier = await lookupCarrierBySid(this.voip_carrier_sid);
|
||||||
|
if (carrier) {
|
||||||
|
// eslint-disable-next-line max-len
|
||||||
|
this.logger.info(`Disabling Outbound Registration for carrier ${carrier.name} (sid:${carrier.voip_carrier_sid})`);
|
||||||
|
writeAlerts({
|
||||||
|
account_sid: carrier.account_sid,
|
||||||
|
service_provider_sid: carrier.service_provider_sid,
|
||||||
|
message: `Disabling Outbound Registration for carrier ${carrier.name} (sid:${carrier.voip_carrier_sid})`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const { addSipGatewayToBlacklist, removeSipGatewayFromBlacklist, isSipGatewayBlacklisted } = require('./utils');
|
const { addSipGatewayToBlacklist, removeSipGatewayFromBlacklist, isSipGatewayBlacklisted } = require('./utils');
|
||||||
|
const {OPTIONS_RESPONSE_REMOVE} = require('./config');
|
||||||
|
|
||||||
const send_options_gateways = [];
|
const send_options_gateways = [];
|
||||||
const send_options_bots = [];
|
const send_options_bots = [];
|
||||||
@@ -50,6 +51,22 @@ class OptionsBot {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (OPTIONS_RESPONSE_REMOVE.includes(res.status)) {
|
||||||
|
const { updateSipGatewayBySid } = srf.locals.dbHelpers;
|
||||||
|
await updateSipGatewayBySid(this.sip_gateway_sid, {send_options_ping: false});
|
||||||
|
const carrier = await lookupCarrierBySid(this.voip_carrier_sid);
|
||||||
|
if (carrier) {
|
||||||
|
// eslint-disable-next-line max-len
|
||||||
|
this.logger.info(`Disabling Options ping for ${this.ipv4} in carrier ${carrier.name} (sid:${carrier.voip_carrier_sid})`);
|
||||||
|
writeAlerts({
|
||||||
|
account_sid: carrier.account_sid,
|
||||||
|
service_provider_sid: carrier.service_provider_sid,
|
||||||
|
// eslint-disable-next-line max-len
|
||||||
|
message: `Disabling Options ping for ${this.ipv4} in carrier ${carrier.name} (sid:${carrier.voip_carrier_sid})`
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// If the gateway is blacklisted, remove it from the blacklist as we have successfully pinged it
|
// If the gateway is blacklisted, remove it from the blacklist as we have successfully pinged it
|
||||||
if (await isSipGatewayBlacklisted(realtimeDbHelpers.client, logger, this.sip_gateway_sid)) {
|
if (await isSipGatewayBlacklisted(realtimeDbHelpers.client, logger, this.sip_gateway_sid)) {
|
||||||
|
|||||||
9
package-lock.json
generated
9
package-lock.json
generated
@@ -9,7 +9,7 @@
|
|||||||
"version": "0.9.3",
|
"version": "0.9.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jambonz/db-helpers": "^0.9.4",
|
"@jambonz/db-helpers": "^0.9.10",
|
||||||
"@jambonz/digest-utils": "^0.0.5",
|
"@jambonz/digest-utils": "^0.0.5",
|
||||||
"@jambonz/mw-registrar": "^0.2.7",
|
"@jambonz/mw-registrar": "^0.2.7",
|
||||||
"@jambonz/realtimedb-helpers": "^0.8.13",
|
"@jambonz/realtimedb-helpers": "^0.8.13",
|
||||||
@@ -499,9 +499,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jambonz/db-helpers": {
|
"node_modules/@jambonz/db-helpers": {
|
||||||
"version": "0.9.7",
|
"version": "0.9.10",
|
||||||
"resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.9.10.tgz",
|
||||||
"integrity": "sha512-5qN/CJZJXpbMkMn+8gFn8PpQ0ZImZxp1EjKyxLUlmMn+xgjeNb29c3pjeVt/6EQnBB65jAax6TNsVzVIfpvE2w==",
|
"integrity": "sha512-yV2pQal/unHmsj+vFgzQXcrKZ/CrtNDhMzL7+Oj5Y+/KJ2gKQR2QtanC5RkUNyCThYhqN18UdJu0PR+J1BL2dg==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cidr-matcher": "^2.1.1",
|
"cidr-matcher": "^2.1.1",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/jambonz/sbc-sip-sidecar#readme",
|
"homepage": "https://github.com/jambonz/sbc-sip-sidecar#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jambonz/db-helpers": "^0.9.4",
|
"@jambonz/db-helpers": "^0.9.10",
|
||||||
"@jambonz/mw-registrar": "^0.2.7",
|
"@jambonz/mw-registrar": "^0.2.7",
|
||||||
"@jambonz/realtimedb-helpers": "^0.8.13",
|
"@jambonz/realtimedb-helpers": "^0.8.13",
|
||||||
"@jambonz/stats-collector": "^0.1.10",
|
"@jambonz/stats-collector": "^0.1.10",
|
||||||
|
|||||||
Reference in New Issue
Block a user