@babblevoice/babble-drachtio-callmanager 2.2.1 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/call.js CHANGED
@@ -5,13 +5,40 @@ const dns = require( "node:dns" )
5
5
 
6
6
  const projectrtp = require( "@babblevoice/projectrtp" ).projectrtp
7
7
 
8
- const parseuri = require( "drachtio-srf" ).parseUri
9
8
  const sdpgen = require( "./sdp.js" )
10
9
  const callstore = require( "./store.js" )
11
10
 
12
11
  const sipauth = require( "@babblevoice/babble-drachtio-auth" )
13
12
 
14
13
  const ipv6regex = /^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$/gm
14
+ const parseurire = /^(sips?):(?:([^\s>:@]+)(?::([^\s@>]+))?@)?([\w\-.]+)(?::(\d+))?((?:;[^\s=?>;]+(?:=[^\s?;]+)?)*)(?:\?(([^\s&=>]+=[^\s&=>]+)(&[^\s&=>]+=[^\s&=>]+)*))?$/
15
+ const parseuriparamsre = /([^;=]+)(=([^;=]+))?/g
16
+ const parseuriheadersre = /[^&=]+=[^&=]+/g
17
+
18
+ function parseuri( s ) {
19
+ if( "object" === typeof s )
20
+ return s
21
+
22
+ const r = parseurire.exec( s )
23
+
24
+ if( r ) {
25
+ return {
26
+ schema: r[ 1 ],
27
+ user: r[ 2 ],
28
+ password: r[ 3 ],
29
+ host: r[ 4 ],
30
+ port: +r[ 5 ],
31
+ params: (r[ 6 ].match( parseuriparamsre ) || [] )
32
+ .map( function( s ) { return s.split( "=" ) } )
33
+ .reduce(function(params, x) { params[x[0]]=x[1] || null; return params }, {} ),
34
+ headers: ( ( r[ 7 ] || "" ).match( parseuriheadersre ) || [])
35
+ .map(function(s){ return s.split( "=") } )
36
+ .reduce(function(params, x) { params[ x[ 0 ] ] = x[ 1 ]; return params }, {} )
37
+ }
38
+ }
39
+
40
+ return {}
41
+ }
15
42
 
16
43
  /*
17
44
  Enum for different reasons for hangup.
@@ -446,10 +473,25 @@ class call {
446
473
  return parsed
447
474
  }
448
475
 
476
+ #fixparseduriobj( parsed ) {
477
+
478
+ if( !parsed ) parsed = {}
479
+ if( !parsed.uri && parsed.user && parsed.host ) parsed.uri = parsed.user + "@" + parsed.host
480
+ if( parsed.uri && !parsed.user && !parsed.host ) parsed = parseuri( parsed.uri )
481
+
482
+ let parseduri = parseuri( parsed.uri )
483
+
484
+ if( !parseduri ) parseduri = { "user": parsed.user, "host": parsed.host }
485
+ if( !parsed.params ) parsed.params = {}
486
+
487
+ return parsed
488
+ }
489
+
449
490
  /**
450
491
  *
451
492
  * @returns { object }
452
493
  */
494
+ // eslint-disable-next-line complexity
453
495
  #getremoteuas() {
454
496
  /* uas - inbound */
455
497
  let parsed
@@ -466,16 +508,13 @@ class call {
466
508
  parsed = this.#getremotefromheaders()
467
509
  }
468
510
 
469
- if( !parsed ) parsed = {}
470
- let parseduri = parseuri( parsed.uri )
471
- if( !parseduri ) parseduri = { "user": parsed.user, "host": parsed.host }
472
- if( !parsed.params ) parsed.params = {}
511
+ parsed = this.#fixparseduriobj( parsed )
473
512
 
474
513
  return {
475
514
  "name": this._remote.name?this._remote.name:( !parsed.name?"":parsed.name.replace( /['"]+/g, "" ) ),
476
515
  "uri": parsed.uri,
477
- "user": this._remote.id?this._remote.id:(parseduri.user),
478
- "host": parseduri.host,
516
+ "user": this._remote.id?this._remote.id:(parsed.user),
517
+ "host": parsed.host,
479
518
  "privacy": "true" === parsed.params.privacy,
480
519
  "type": "callerid"
481
520
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babblevoice/babble-drachtio-callmanager",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "Call processing to create a PBX",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -209,7 +209,7 @@ describe( "call object", function() {
209
209
 
210
210
  const options = {
211
211
  "registrar": {
212
- "contacts": async ( entity ) => {
212
+ "contacts": async ( /* entity */ ) => {
213
213
  return {
214
214
  "username": "1000",
215
215
  "realm": "dummy.com",