mirror of
https://github.com/jambonz/sbc-sip-sidecar.git
synced 2026-10-04 02:04:20 +00:00
add expires and timestamp to database status (#110)
* add expires and timestamp to database status * remove await
This commit is contained in:
+12
-7
@@ -5,7 +5,6 @@ const {
|
|||||||
REGISTER_RESPONSE_REMOVE,
|
REGISTER_RESPONSE_REMOVE,
|
||||||
JAMBONES_REGBOT_USER_AGENT
|
JAMBONES_REGBOT_USER_AGENT
|
||||||
} = require('./config');
|
} = require('./config');
|
||||||
const debug = require('debug')('jambonz:sbc-registrar');
|
|
||||||
const {isValidDomainOrIP} = require('./utils');
|
const {isValidDomainOrIP} = require('./utils');
|
||||||
const DEFAULT_EXPIRES = (parseInt(JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL) || 3600);
|
const DEFAULT_EXPIRES = (parseInt(JAMBONES_REGBOT_DEFAULT_EXPIRES_INTERVAL) || 3600);
|
||||||
const MIN_EXPIRES = (parseInt(JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL) || 30);
|
const MIN_EXPIRES = (parseInt(JAMBONES_REGBOT_MIN_EXPIRES_INTERVAL) || 30);
|
||||||
@@ -131,6 +130,7 @@ class Regbot {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
req.on('response', async(res) => {
|
req.on('response', async(res) => {
|
||||||
|
let expires;
|
||||||
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}`);
|
||||||
@@ -150,17 +150,18 @@ class Regbot {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
expires = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
// the code parses the SIP headers to get the expires value
|
// the code parses the SIP headers to get the expires value
|
||||||
// if there is a Contact header, it will use the expires value from there
|
// if there is a Contact header, it will use the expires value from there
|
||||||
// otherwise, it will use the Expires header, acording to the SIP RFC 3261, section 10.2.4 Refreshing Bindings
|
// otherwise, it will use the Expires header, acording to the SIP RFC 3261, section 10.2.4 Refreshing Bindings
|
||||||
this.status = 'registered';
|
this.status = 'registered';
|
||||||
let expires = DEFAULT_EXPIRES;
|
expires = DEFAULT_EXPIRES;
|
||||||
|
|
||||||
if (res.has('Expires')) {
|
if (res.has('Expires')) {
|
||||||
expires = parseInt(res.get('Expires'));
|
expires = parseInt(res.get('Expires'));
|
||||||
|
this.logger.debug(`Using Expires header value of ${expires}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res.has('Contact')) {
|
if (res.has('Contact')) {
|
||||||
@@ -169,23 +170,26 @@ class Regbot {
|
|||||||
expires = parseInt(contact[0].params.expires);
|
expires = parseInt(contact[0].params.expires);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.logger.info({ aor: this.aor, ipv4: this.ipv4, port: this.port },
|
this.logger.debug({ aor: this.aor, ipv4: this.ipv4, port: this.port },
|
||||||
'no Contact header in 200 OK');
|
'no Contact header in 200 OK');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isNaN(expires) || expires < MIN_EXPIRES) {
|
if (isNaN(expires) || expires < MIN_EXPIRES) {
|
||||||
this.logger.info({ aor: this.aor, ipv4: this.ipv4, port: this.port },
|
this.logger.debug({ aor: this.aor, ipv4: this.ipv4, port: this.port },
|
||||||
`got expires of ${expires} in 200 OK, too small so setting to ${MIN_EXPIRES}`);
|
`got expires of ${expires} in 200 OK, too small so setting to ${MIN_EXPIRES}`);
|
||||||
expires = MIN_EXPIRES;
|
expires = MIN_EXPIRES;
|
||||||
}
|
}
|
||||||
debug(`setting timer for next register to ${expires} seconds`);
|
this.logger.debug(`setting timer for next register to ${expires} seconds`);
|
||||||
this.timer = setTimeout(this.register.bind(this, srf), (expires / 2) * 1000);
|
this.timer = setTimeout(this.register.bind(this, srf), (expires / 2) * 1000);
|
||||||
}
|
}
|
||||||
|
const timestamp = new Date().toISOString();
|
||||||
updateVoipCarriersRegisterStatus(this.voip_carrier_sid, JSON.stringify({
|
updateVoipCarriersRegisterStatus(this.voip_carrier_sid, JSON.stringify({
|
||||||
status: res.status === 200 ? 'ok' : 'fail',
|
status: res.status === 200 ? 'ok' : 'fail',
|
||||||
reason: `${res.status} ${res.reason}`,
|
reason: `${res.status} ${res.reason}`,
|
||||||
cseq: req.get('Cseq'),
|
cseq: req.get('Cseq'),
|
||||||
callId: req.get('Call-Id')
|
callId: req.get('Call-Id'),
|
||||||
|
timestamp: timestamp,
|
||||||
|
expires: expires
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -201,3 +205,4 @@ class Regbot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Regbot;
|
module.exports = Regbot;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user