From 17f7fe5d5355d72318821043c8102cf6594b8808 Mon Sep 17 00:00:00 2001 From: Elena Shleifer Date: Wed, 24 Jun 2020 16:17:30 +0300 Subject: [PATCH 1/2] support ipv6 messages --- sip.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sip.js b/sip.js index 676b31e..b6b401d 100644 --- a/sip.js +++ b/sip.js @@ -106,7 +106,7 @@ function parseAorWithUri(data) { } function parseVia(data) { - var r = applyRegex(/SIP\s*\/\s*(\d+\.\d+)\s*\/\s*([\S]+)\s+([^\s;:]+)(?:\s*:\s*(\d+))?/g, data); + var r = applyRegex(/SIP\s*\/\s*(\d+\.\d+)\s*\/\s*([\S]+)\s+([\w\-\.]+|\[[\w\-\:]+\])(?::(\d+))(?:\s*:\s*(\d+))?/g, data); return parseParams(data, {version: r[1], protocol: r[2], host: r[3], port: r[4] && +r[4]}); } @@ -211,17 +211,20 @@ function parseUri(s) { if(typeof s === 'object') return s; - var re = /^(sips?):(?:([^\s>:@]+)(?::([^\s@>]+))?@)?([\w\-\.]+)(?::(\d+))?((?:;[^\s=\?>;]+(?:=[^\s?\;]+)?)*)(?:\?(([^\s&=>]+=[^\s&=>]+)(&[^\s&=>]+=[^\s&=>]+)*))?$/; + var re = /^(sips?):(?:([^\s>:@]+)(?::([^\s@>]+))?@)([\w\-\.]+|\[[\w\-\:]+\])(?::(\d+))?((?:;[^\s=\?>;]+(?:=[^\s?\;]+)?)*)(?:\?(([^\s&=>]+=[^\s&=>]+)(&[^\s&=>]+=[^\s&=>]+)*))?$/; var r = re.exec(s); if(r) { + var hostString = r[4].replace('\[',''); + hostString = hostString.replace('\]',''); + return { schema: r[1], user: r[2], password: r[3], - host: r[4], - port: +r[5], + host: hostString, + port: r[5], params: (r[6].match(/([^;=]+)(=([^;=]+))?/g) || []) .map(function(s) { return s.split('='); }) .reduce(function(params, x) { params[x[0]]=x[1] || null; return params;}, {}), @@ -823,7 +826,9 @@ function makeTransport(options, callback) { function wrap(obj, target) { return Object.create(obj, {send: {value: function(m) { if(m.method) { - m.headers.via[0].host = options.publicAddress || options.address || options.hostname || os.hostname(); + var host = options.publicAddress || options.address || options.hostname || os.hostname(); + var hostValue = net.isIPv6(host) ? "[" + host + "]" : host; + m.headers.via[0].host = hostValue; m.headers.via[0].port = options.port || defaultPort(this.protocol); m.headers.via[0].protocol = this.protocol; From 1088ef474af19421284c5eed642b97b4869e3dfa Mon Sep 17 00:00:00 2001 From: Elena Shleifer Date: Mon, 12 Apr 2021 10:34:49 +0300 Subject: [PATCH 2/2] support tls port in Via header --- sip.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sip.js b/sip.js index b6b401d..7d0be71 100644 --- a/sip.js +++ b/sip.js @@ -829,7 +829,12 @@ function makeTransport(options, callback) { var host = options.publicAddress || options.address || options.hostname || os.hostname(); var hostValue = net.isIPv6(host) ? "[" + host + "]" : host; m.headers.via[0].host = hostValue; - m.headers.via[0].port = options.port || defaultPort(this.protocol); + let reqUri = parseUri(m.uri); + let tlsPort; + if(reqUri.params.transport && reqUri.params.transport === "tls"){ + tlsPort = options.tls_port; + } + m.headers.via[0].port = tlsPort || options.port || defaultPort(this.protocol); m.headers.via[0].protocol = this.protocol; if(this.protocol === 'UDP' && (!options.hasOwnProperty('rport') || options.rport)) {