support trunk register with account sip realm if available (#107)

* support trunk register with account sip realm if available

* wip

* wip

* wip

* wip
This commit is contained in:
Hoan Luu Huu
2025-06-23 19:34:39 +07:00
committed by GitHub
parent 1ef25e2c7f
commit 3cfa0a94aa
3 changed files with 26 additions and 3 deletions

2
app.js
View File

@@ -58,6 +58,7 @@ const {
lookupCarrierBySid, lookupCarrierBySid,
lookupSystemInformation, lookupSystemInformation,
updateCarrierBySid, updateCarrierBySid,
lookupAccountBySid
} = require('@jambonz/db-helpers')({ } = require('@jambonz/db-helpers')({
host: JAMBONES_MYSQL_HOST, host: JAMBONES_MYSQL_HOST,
user: JAMBONES_MYSQL_USER, user: JAMBONES_MYSQL_USER,
@@ -95,6 +96,7 @@ srf.locals = {
addToSet, removeFromSet, isMemberOfSet, retrieveSet, addToSet, removeFromSet, isMemberOfSet, retrieveSet,
registrar: new Registrar(logger, client), registrar: new Registrar(logger, client),
dbHelpers: { dbHelpers: {
lookupAccountBySid,
lookupAuthHook, lookupAuthHook,
lookupAllVoipCarriers, lookupAllVoipCarriers,
lookupSipGatewaysByCarrier, lookupSipGatewaysByCarrier,

View File

@@ -17,7 +17,15 @@ class Regbot {
constructor(logger, opts) { constructor(logger, opts) {
this.logger = logger; this.logger = logger;
['ipv4', 'port', 'username', 'password', 'sip_realm', 'protocol'].forEach((prop) => this[prop] = opts[prop]); [
'ipv4',
'port',
'username',
'password',
'sip_realm',
'protocol',
'account_sip_realm'
].forEach((prop) => this[prop] = opts[prop]);
this.voip_carrier_sid = opts.voip_carrier_sid; this.voip_carrier_sid = opts.voip_carrier_sid;
this.username = opts.username; this.username = opts.username;
@@ -90,6 +98,9 @@ class Regbot {
if (this.use_public_ip_in_contact) { if (this.use_public_ip_in_contact) {
contactAddress = `${this.fromUser}@${publicAddress}`; contactAddress = `${this.fromUser}@${publicAddress}`;
} }
else if (this.account_sip_realm) {
contactAddress = `${this.fromUser}@${this.account_sip_realm}`;
}
else if (localSIPDomain) { else if (localSIPDomain) {
contactAddress = `${this.fromUser}@${localSIPDomain}`; contactAddress = `${this.fromUser}@${localSIPDomain}`;
} }

View File

@@ -30,7 +30,8 @@ function pickRelevantCarrierProperties(c) {
register_from_user: c.register_from_user, register_from_user: c.register_from_user,
register_from_domain: c.register_from_domain, register_from_domain: c.register_from_domain,
register_public_ip_in_contact: c.register_public_ip_in_contact, register_public_ip_in_contact: c.register_public_ip_in_contact,
outbound_sip_proxy: c.outbound_sip_proxy outbound_sip_proxy: c.outbound_sip_proxy,
account_sid: c.account_sid,
}; };
} }
@@ -184,7 +185,7 @@ const checkStatus = async(logger, srf) => {
const updateCarrierRegbots = async(logger, srf) => { const updateCarrierRegbots = async(logger, srf) => {
// Check if We are // Check if We are
const { lookupAllVoipCarriers, lookupSipGatewaysByCarrier } = srf.locals.dbHelpers; const { lookupAllVoipCarriers, lookupSipGatewaysByCarrier, lookupAccountBySid } = srf.locals.dbHelpers;
try { try {
/* first check: has anything changed (new carriers or gateways)? */ /* first check: has anything changed (new carriers or gateways)? */
@@ -210,6 +211,7 @@ const updateCarrierRegbots = async(logger, srf) => {
if (JSON.stringify(gws) !== JSON.stringify(gateways)) hasChanged = true; if (JSON.stringify(gws) !== JSON.stringify(gateways)) hasChanged = true;
if (hasChanged) { if (hasChanged) {
debug('updateCarrierRegbots: got new or changed carriers'); debug('updateCarrierRegbots: got new or changed carriers');
logger.info('updateCarrierRegbots: got new or changed carriers'); logger.info('updateCarrierRegbots: got new or changed carriers');
carriers.length = 0; carriers.length = 0;
@@ -225,9 +227,17 @@ const updateCarrierRegbots = async(logger, srf) => {
// start new regbots // start new regbots
let batch_count = 0; let batch_count = 0;
for (const gw of getUniqueGateways(gateways, logger)) { for (const gw of getUniqueGateways(gateways, logger)) {
// find gateway account sip realm.
if (!gw.carrier.register_public_ip_in_contact && gw.carrier.account_sid) {
const account = await lookupAccountBySid(gw.carrier.account_sid);
if (account && account.sip_realm) {
gw.account_sip_realm = account.sip_realm;
}
}
try { try {
const rb = new Regbot(logger, { const rb = new Regbot(logger, {
voip_carrier_sid: gw.carrier.voip_carrier_sid, voip_carrier_sid: gw.carrier.voip_carrier_sid,
account_sip_realm: gw.account_sip_realm,
ipv4: gw.ipv4, ipv4: gw.ipv4,
port: gw.port, port: gw.port,
protocol: gw.protocol, protocol: gw.protocol,