@babblevoice/babble-drachtio-callmanager 2.2.1 → 2.2.3

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
  }
@@ -2823,13 +2862,15 @@ class call {
2823
2862
  @private
2824
2863
  */
2825
2864
  c._req = req
2826
- c._req.on( "cancel", () => c._oncanceled.bind( c ) )
2865
+
2827
2866
  /**
2828
2867
  @member
2829
2868
  @private
2830
2869
  */
2831
2870
  c._res = res
2832
2871
 
2872
+ c._req.on( "cancel", () => c._oncanceled.bind( c ) )
2873
+
2833
2874
  await callstore.set( c )
2834
2875
  callmanager.options.em.emit( "call.new", c )
2835
2876
 
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.3",
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",