when registering over tls contact header should have appropriate sip … (#62)

* rebase

* update gh workflow
This commit is contained in:
Dave Horton
2024-06-19 12:24:08 +01:00
committed by GitHub
parent 6f7f553408
commit 0ff39724e4
4 changed files with 27 additions and 13 deletions

View File

@@ -15,7 +15,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: prepare tag
id: prepare_tag
@@ -38,7 +38,7 @@ jobs:
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Login to Docker Hub
uses: docker/login-action@v2
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

View File

@@ -6,10 +6,10 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 16.x
node-version: 20.x
- run: npm ci
- run: npm run jslint
- run: npm test

14
app.js
View File

@@ -121,6 +121,7 @@ srf.on('connect', (err, hp) => {
logger.info(`connected to drachtio listening on ${hp}`);
// Add SBC Public IP to Database
srf.locals.sbcPublicIpAddress = {};
const map = new Map();
const hostports = hp.split(',');
for (const hp of hostports) {
@@ -131,13 +132,24 @@ srf.on('connect', (err, hp) => {
const addr = map.get(ipv4) || {ipv4};
switch (arr[1]) {
case 'udp':
srf.locals.sbcPublicIpAddress = `${ipv4}:${port}`;
srf.locals.sbcPublicIpAddress = {
...srf.locals.sbcPublicIpAddress,
udp: `${ipv4}:${port}`
};
map.set(ipv4, {...addr, port: port});
break;
case 'tls':
map.set(ipv4, {...addr, tls_port: port});
srf.locals.sbcPublicIpAddress = {
...srf.locals.sbcPublicIpAddress,
tls: `${ipv4}:${port}`
};
break;
case 'wss':
srf.locals.sbcPublicIpAddress = {
...srf.locals.sbcPublicIpAddress,
wss: `${ipv4}:${port}`
};
map.set(ipv4, {...addr, wss_port: port});
break;
}

View File

@@ -83,20 +83,22 @@ class Regbot {
async register(srf) {
const { updateVoipCarriersRegisterStatus } = srf.locals.dbHelpers;
try {
const contactAddress = this.use_public_ip_in_contact ?
`${this.fromUser}@${srf.locals.sbcPublicIpAddress}` : this.aor;
this.logger.debug(`sending REGISTER for ${this.aor}`);
const isIPv4 = /[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/.test(this.ipv4);
const transport = this.protocol.includes('/') ? this.protocol.substring(0, this.protocol.indexOf('/')) :
this.protocol;
const useSipsScheme = transport === 'tls' && this.use_sips_scheme;
let scheme = 'sip';
if (transport === 'tls' && this.use_sips_scheme) scheme = 'sips';
const publicAddress = srf.locals.sbcPublicIpAddress[transport] || srf.locals.sbcPublicIpAddress.udp;
const contactAddress = this.use_public_ip_in_contact ?
`${this.fromUser}@${publicAddress}` : this.aor;
this.logger.debug(`sending REGISTER for ${this.aor}`);
const isIPv4 = /[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/.test(this.ipv4);
const proxy = `sip:${this.ipv4}${isIPv4 ? `:${this.port}` : ''};transport=${transport}`;
const req = await srf.request(`sip${useSipsScheme ? 's' : ''}:${this.aor}`, {
const req = await srf.request(`${scheme}:${this.aor}`, {
method: 'REGISTER',
proxy,
headers: {
'From': this.from,
'Contact': `<sip:${contactAddress}>;expires=${DEFAULT_EXPIRES}`,
'Contact': `<${scheme}:${contactAddress}>;expires=${DEFAULT_EXPIRES}`,
'Expires': DEFAULT_EXPIRES
},
auth: {