diff --git a/app.js b/app.js index d20d4a9..da005a1 100644 --- a/app.js +++ b/app.js @@ -25,7 +25,8 @@ const { lookupSipGatewaysByCarrier, lookupAccountBySipRealm, lookupAccountCapacitiesBySid, - addSbcAddress + addSbcAddress, + updateVoipCarriersRegisterStatus } = require('@jambonz/db-helpers')({ host: process.env.JAMBONES_MYSQL_HOST, user: process.env.JAMBONES_MYSQL_USER, @@ -69,7 +70,8 @@ srf.locals = { lookupAllVoipCarriers, lookupSipGatewaysByCarrier, lookupAccountBySipRealm, - lookupAccountCapacitiesBySid + lookupAccountCapacitiesBySid, + updateVoipCarriersRegisterStatus }, realtimeDbHelpers: { addKey, diff --git a/lib/sip-trunk-register.js b/lib/sip-trunk-register.js index ad1771c..9e32907 100644 --- a/lib/sip-trunk-register.js +++ b/lib/sip-trunk-register.js @@ -18,7 +18,8 @@ class Regbot { ['ipv4', 'port', 'username', 'password', 'sip_realm'].forEach((prop) => this[prop] = opts[prop]); - logger.debug({opts}, 'Regbot'); + logger.debug({ opts }, 'Regbot'); + this.voip_carrier_sid = opts.voip_carrier_sid; this.username = opts.username; this.password = opts.password; this.sip_realm = opts.sip_realm || opts.ipv4; @@ -44,6 +45,7 @@ class Regbot { toJSON() { return { + voip_carrier_sid: this.voip_carrier_sid, username: this.username, sip_realm: this.sip_realm, ipv4: this.ipv4, @@ -54,6 +56,7 @@ class Regbot { } async register(srf) { + const { updateVoipCarriersRegisterStatus } = srf.locals.dbHelpers; try { const contactAddress = this.use_public_ip_in_contact ? `${this.username}@${srf.locals.sbcPublicIpAddress}` : this.aor; @@ -90,18 +93,29 @@ class Regbot { debug(`setting timer for next register to ${expires} seconds`); this.timer = setTimeout(this.register.bind(this, srf), (expires - 5) * 1000); } + updateVoipCarriersRegisterStatus(this.voip_carrier_sid, JSON.stringify({ + status: res.status === 200 ? 'ok' : 'fail', + reason: `${res.status} ${res.reason}`, + cseq: req.get('Cseq'), + callId: req.get('Call-Id') + })); }); } catch (err) { this.logger.error({ err }, `Regbot Error registering to ${this.ipv4}:${this.port}`); this.timer = setTimeout(this.register.bind(this, srf), 60 * 1000); + updateVoipCarriersRegisterStatus(this.voip_carrier_sid, JSON.stringify({ + status: 'fail', + reason: err + })); } + } } module.exports = async(logger, srf) => { if (initialized) return; initialized = true; - const {addKeyNx} = srf.locals.realtimeDbHelpers; + const { addKeyNx } = srf.locals.realtimeDbHelpers; const myToken = short.generate(); srf.locals.regbot = { myToken, @@ -130,7 +144,7 @@ module.exports = async(logger, srf) => { if (srf.locals.regbot.active) { updateCarrierRegbots(logger, srf) .catch((err) => { - logger.error({err}, 'updateCarrierRegbots failure'); + logger.error({ err }, 'updateCarrierRegbots failure'); }); } @@ -138,10 +152,10 @@ module.exports = async(logger, srf) => { }; const checkStatus = async(logger, srf) => { - const {addKeyNx, addKey, retrieveKey} = srf.locals.realtimeDbHelpers; - const {myToken, active} = srf.locals.regbot; + const { addKeyNx, addKey, retrieveKey } = srf.locals.realtimeDbHelpers; + const { myToken, active } = srf.locals.regbot; - logger.info({active, myToken}, 'checking in on regbot status'); + logger.info({ active, myToken }, 'checking in on regbot status'); try { const token = await retrieveKey(regbotKey); let grabForTheWheel = false; @@ -152,7 +166,7 @@ const checkStatus = async(logger, srf) => { addKey(regbotKey, myToken, REGBOT_STATUS_CHECK_INTERVAL + 10) .then(updateCarrierRegbots.bind(null, logger, srf)) .catch((err) => { - logger.error({err}, 'updateCarrierRegbots failure'); + logger.error({ err }, 'updateCarrierRegbots failure'); }); } else if (token && token !== myToken) { @@ -183,7 +197,7 @@ const checkStatus = async(logger, srf) => { logger.info(`successfully claimed regbot responsibility with token ${myToken}`); updateCarrierRegbots(logger, srf) .catch((err) => { - logger.error({err}, 'updateCarrierRegbots failure'); + logger.error({ err }, 'updateCarrierRegbots failure'); }); } else { @@ -192,7 +206,7 @@ const checkStatus = async(logger, srf) => { } } } catch (err) { - logger.error({err}, 'checkStatus: ERROR'); + logger.error({ err }, 'checkStatus: ERROR'); } }; @@ -238,6 +252,7 @@ const updateCarrierRegbots = async(logger, srf) => { // start new regbots for (const gw of gateways) { const rb = new Regbot(logger, { + voip_carrier_sid: gw.carrier.voip_carrier_sid, ipv4: gw.ipv4, port: gw.port, username: gw.carrier.register_username, diff --git a/package-lock.json b/package-lock.json index bf2b990..efc89b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.8.1", "license": "MIT", "dependencies": { - "@jambonz/db-helpers": "^0.7.3", + "@jambonz/db-helpers": "^0.7.5", "@jambonz/http-authenticator": "^0.2.2", "@jambonz/mw-registrar": "^0.2.3", "@jambonz/realtimedb-helpers": "^0.4.34", @@ -711,12 +711,12 @@ } }, "node_modules/@jambonz/db-helpers": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.7.3.tgz", - "integrity": "sha512-FXQPnl5AGV3P6RhvdSKfjIOdEXShYe7aKJayJjaPARPTCTGqLTDhV2tfsWirCrpQhn+vanJHAiOyzOTmbDIfzA==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.7.5.tgz", + "integrity": "sha512-Zqq4LSsW76VxQiqXMGeVCkSqXCNwUyLN86PD0ejWQO5x+pA2GaBhLX+SHTdCiHhQ3t29SCyOoSi5MJ96LZwI4w==", "dependencies": { "cidr-matcher": "^2.1.1", - "debug": "^4.3.3", + "debug": "^4.3.4", "mysql2": "^2.3.3", "node-object-hash": "^2.3.10", "uuid": "^8.3.2" @@ -5913,12 +5913,12 @@ "dev": true }, "@jambonz/db-helpers": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.7.3.tgz", - "integrity": "sha512-FXQPnl5AGV3P6RhvdSKfjIOdEXShYe7aKJayJjaPARPTCTGqLTDhV2tfsWirCrpQhn+vanJHAiOyzOTmbDIfzA==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@jambonz/db-helpers/-/db-helpers-0.7.5.tgz", + "integrity": "sha512-Zqq4LSsW76VxQiqXMGeVCkSqXCNwUyLN86PD0ejWQO5x+pA2GaBhLX+SHTdCiHhQ3t29SCyOoSi5MJ96LZwI4w==", "requires": { "cidr-matcher": "^2.1.1", - "debug": "^4.3.3", + "debug": "^4.3.4", "mysql2": "^2.3.3", "node-object-hash": "^2.3.10", "uuid": "^8.3.2" diff --git a/package.json b/package.json index 6d21aab..dd039bf 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "homepage": "https://github.com/xquanluu/sbc-outbound-handler#readme", "dependencies": { - "@jambonz/db-helpers": "^0.7.3", + "@jambonz/db-helpers": "^0.7.5", "@jambonz/http-authenticator": "^0.2.2", "@jambonz/mw-registrar": "^0.2.3", "@jambonz/realtimedb-helpers": "^0.4.34",