@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 +49 -8
- package/package.json +1 -1
- package/test/interface/call.js +1 -1
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
|
-
|
|
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:(
|
|
478
|
-
"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
|
-
|
|
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
package/test/interface/call.js
CHANGED