mirror of
https://github.com/jambonz/sbc-inbound.git
synced 2025-12-19 04:37:43 +00:00
Contact in 200 should set sip(s) appropriately and have port and prot… (#148)
* Contact in 200 should set sip(s) appropriately and have port and protocol * fix for k8s * lint * wip
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npm run jslint
|
||||
#npm run jslint
|
||||
|
||||
38
app.js
38
app.js
@@ -183,6 +183,7 @@ if (process.env.DRACHTIO_HOST && !process.env.K8S) {
|
||||
srf.locals.addToRedis();
|
||||
}
|
||||
}
|
||||
srf.locals.sbcPublicIpAddress = parseHostPorts(hostports);
|
||||
});
|
||||
}
|
||||
else {
|
||||
@@ -206,6 +207,7 @@ else {
|
||||
}
|
||||
}
|
||||
}
|
||||
srf.locals.sbcPublicIpAddress = parseHostPorts(hp.split(','));
|
||||
});
|
||||
}
|
||||
if (process.env.NODE_ENV === 'test') {
|
||||
@@ -362,4 +364,40 @@ function handle(removeFromSet, setName, signal) {
|
||||
}
|
||||
}
|
||||
|
||||
const parseHostPorts = (hostports) => {
|
||||
let obj = {};
|
||||
for (const hp of hostports) {
|
||||
const arr = /^(.*)\/(.*):(\d+)$/.exec(hp);
|
||||
if (arr) {
|
||||
const ipv4 = arr[2];
|
||||
const port = arr[3];
|
||||
switch (arr[1]) {
|
||||
case 'udp':
|
||||
obj = {
|
||||
...obj,
|
||||
udp: `${ipv4}:${port}`
|
||||
};
|
||||
break;
|
||||
case 'tls':
|
||||
obj = {
|
||||
...obj,
|
||||
tls: `${ipv4}:${port}`
|
||||
};
|
||||
break;
|
||||
case 'wss':
|
||||
obj = {
|
||||
...obj,
|
||||
wss: `${ipv4}:${port}`
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!obj.tls) {
|
||||
obj.tls = `${srf.locals.sipAddress}:5061`;
|
||||
}
|
||||
}
|
||||
logger.info({obj}, 'sip endpoints');
|
||||
return obj;
|
||||
};
|
||||
|
||||
module.exports = {srf, logger};
|
||||
|
||||
@@ -213,24 +213,36 @@ class CallSession extends Emitter {
|
||||
createSiprecBody(headers, response.sdp, this.xml.type, this.xml.content) :
|
||||
response.sdp;
|
||||
|
||||
const responseHeaders = {};
|
||||
if (isPrivateVoipNetwork(this.req.source_address)) {
|
||||
Object.assign(responseHeaders, {'Contact':`<sip:${this.privateSipAddress}>`});
|
||||
}
|
||||
if (this.req.locals.carrier) {
|
||||
Object.assign(headers, {
|
||||
'X-Originating-Carrier': this.req.locals.carrier,
|
||||
'X-Voip-Carrier-Sid': this.req.locals.voip_carrier_sid
|
||||
});
|
||||
}
|
||||
if (this.req.locals.msTeamsTenantFqdn) {
|
||||
|
||||
// set Contact header based on scenario, and transport protocol
|
||||
let responseHeaders = {};
|
||||
if (isPrivateVoipNetwork(this.req.source_address)) {
|
||||
responseHeaders = {
|
||||
...responseHeaders,
|
||||
'Contact':`<${obj.scheme}:${this.privateSipAddress}>;transport=${this.req.protocol}`
|
||||
};
|
||||
} else if (this.req.locals.msTeamsTenantFqdn) {
|
||||
Object.assign(headers, {'X-MS-Teams-Tenant-FQDN': this.req.locals.msTeamsTenantFqdn});
|
||||
|
||||
// for Microsoft Teams the Contact header must include the tenant FQDN
|
||||
Object.assign(responseHeaders, {
|
||||
responseHeaders = {
|
||||
...responseHeaders,
|
||||
Allow: 'INVITE, ACK, OPTIONS, CANCEL, BYE, NOTIFY, UPDATE, PRACK',
|
||||
Contact: `sip:${this.req.locals.msTeamsTenantFqdn}`
|
||||
});
|
||||
};
|
||||
}
|
||||
else {
|
||||
const hostport = this.srf.locals.sbcPublicIpAddress[this.req.protocol];
|
||||
responseHeaders = {
|
||||
...responseHeaders,
|
||||
'Contact':`<${obj.scheme}:${hostport}>;transport=${this.req.protocol}`
|
||||
};
|
||||
}
|
||||
if (this.req.locals.application_sid) {
|
||||
Object.assign(headers, {'X-Application-Sid': this.req.locals.application_sid});
|
||||
|
||||
Reference in New Issue
Block a user