Git Product home page Git Product logo

drachtio-siprec-recording-server's Introduction

drachtio-siprec-recording-server Build Status

An open source implementation of a SIPREC recording server based on dractio and using either

Install

This application requires a drachtio SIP server to be installed in your network. Please refer to the build and installation instructions here, or here.

  • Copy either config/default.json.example-rtpengine or config/default.json.example-freeswitch depending on which back-end media server you want to use (it is an either-or choice: you can't mix them) to config/local.json and edit to provide the IP addresses/ports for your configuration (i.e., location of the drachtio server, and either the rtpengine or freeswitch/asterisk media server).
  • Run npm install
  • Run node app to run.
  • Configure your SBC to send SIPREC invites to your drachtio server.

Using rtpengine as the media server

When using rtpengine as the recorder, there is minimal configuration you will need to do on the rtpengine server -- a vanilla install will do. The application will use the ng control protocol, so you will need to open the UDP port on the rtpengine server to allow commands from the server running the drachtio-siprec-recording-server application.

Also, rtpengine generates recordings in pcap file format, so you will need to do some post-processing to deliver a flac, wav, mp3 or whatever final format you prefer.

Using Freeswitch as the media server

When using Freeswitch, a bit of configuration is needed on the Freeswitch server. Specifically, you must implement a dialplan that:

  • allows unauthenticated INVITEs from the drachtio server
  • hairpins incoming calls back to the sender, by using the Freeswitch bridge application to send the B leg INVITE back to the source of the A leg INVITE
  • exports the custom 'X-Return-Token' header from the A leg to the B leg, and finally
  • makes a recording of the call.

An example snippet of a dialplan that does the trick looks like this:

  <extension name="hairpin_and_record">
    <condition field="${sip_h_X-Return-Token}" expression="^(.+)$">
      <action application="export" data="sip_h_X-Return-Token=${sip_h_X-Return-Token}" />
      <action application="export" data="_nolocal_jitterbuffer_msec=100"/>
      <action application="set" data="RECORD_STEREO=true"/>
      <action application="set" data="call_id=${strftime(%Y%m%d_%H%M%S)}_${sip_from_tag}"/>
      <action application="set" data="outfile=$${base_dir}/recordings/${call_id}.wav"/> 
      <action application="record_session" data="${outfile}"/>
      <action application="set" data="hangup_after_bridge=true"/> 
      <action application="bridge" data="sofia/external/${destination_number}@${network_addr}"/>
    </condition>
  </extension>

For an example docker image that implements, see davehorton/freeswitch-hairpin.

Note: when using Freeswitch, the application requires access to a redis server. redis is used to track and correlate the A and B call legs, using the X-Return-Token header mentioned above. When using rtpengine as the back-end, redis not required.

Using Asterisk as media server instead of Freeswitch

We can mimic the same behavior with Asterisk. For this to work we need to leave the 'config/local.json' as it is for freeswitch. Asterisk will receive a call and send another one back to drachtio sip server. The same steps described above can be done in Asterisk by modifying the pjsip.conf and extensions.conf files:

1- Allows authenticated INVITEs from drachtio server. Add these settings to your 'pjsip.conf' file:

[drachtio_in]
type=endpoint
context=siprec
disallow=all
allow=ulaw
allow=alaw
allow=g729
transport=transport-udp

[drachtio_out]
type=endpoint
context=siprec
disallow=all
allow=ulaw
allow=alaw
allow=g729
transport=transport-udp
aors=drachtio_out

[drachtio_in]
type=identify
endpoint=drachtio_in
match=<IP HERE>

[drachtio_out]
type=aor
contact=sip:<IP HERE>:5060

2- Hairpin the incoming call back to the server. Add these setings to your 'extensions.conf" file:

[siprec]
exten => _[+*#0-9]!,1,NoOp(Receiving call from drachtio)
exten => _[+*#0-9]!,n,Set(XReturnHeader=${PJSIP_HEADER(read,X-Return-Token)})
exten => _[+*#0-9]!,n,Progress()
;exten => _[+*#0-9]!,n,MixMonitor(${UNIQUEID}.wav)
;exten => _[+*#0-9]!,n,Monitor(wav,myfilename)
exten => _[+*#0-9]!,n,MixMonitor(${UNIQUEID}-mixed.wav,r(${UNIQUEID}-in.wav)t(${UNIQUEID}-out.wav))
exten => _[+*#0-9]!,n,Dial(PJSIP/${EXTEN}@drachtio_out,,b(addHeaders^addHeaderXRetHdr^1(${XReturnHeader})))
exten => _[+*#0-9]!,n,HangUp()


[addHeaders]
exten => addHeaderXRetHdr,1,Set(PJSIP_HEADER(add,X-Return-Token)=${ARG1})
same => n,Return()

Using dockerized versions of drachtio and rtpengine

If you haven't built the drachtio server and rtpengine processes (and don't want to), you can run using these docker images:

For guidance, have a look at the test suite, which uses docker-compose to create a test environment, as an example test/docker-compose-testbed.yaml.

Interoperability

This application has been tested with the following SIPREC clients:

  • Ribbon SBC 5200 (tested with Freeswitch back-end media server)
  • OpenSIPS (tested with rtpengine and Freeswitch back-end media servers)
  • Cisco Unified Border element (tested with rtpengine back-end media server)
  • Oracle Enterprise Session Border Controller

Test

npm test

Note: docker is required to run the test cases

How it works

The application receives the SIPREC INVITE from the SBC (or other SIPREC recording client), which will contain the multipart body with both SDP and XML metadata. The application parses the SDP to retrieve the two media endpoints that will be streaming from the SDP. What happens next is different depending on whether rtpengine or Freeswitch is being used.

When using rtpengine, the application creates two associated media endpoints on rtpengine (using the 'offer' and 'answer' commands in the ng protocol). The two media endpoints created by rtpengine are then combined into a multipart body 200 OK response that is returned to the SBC. The end result is that the caller media flows are directed to one of the rtpengin endpoints and the callee media flows to the other. The result is a recording made by rtpengine as if the caller and callee media flows were part of a call setup with rtpengine as a media proxy.

When using Freeswitch/Asterisk the same basic approach of sending the two media flows through Freeswitch/Asterisk as if it were a normal bridged call applies. In this case, the application sends an INVITE to the Freeswitch/Asterisk with one of the SDPs parsed from the SIPREC body and Freeswitch/Asterisk is responsible for generating a B leg back towards the drachtio server. Upon receving this B leg INVITE, the application answers 200 OK with remaining SDP parsed from the SIPREC body. A final 200 OK answer back to the SIPREC client is then generated, using the two media endpoints allocated on the Freeswitch/Asterisk. Media flows through the bridge connection and is recorded, as if caller were talking to callee through the Freeswitch/Asterisk.

drachtio-siprec-recording-server's People

Contributors

ajsyp avatar davehorton avatar fabian-borot avatar mickaelh51 avatar mtherieau-twilio avatar orgads avatar xquanluu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

drachtio-siprec-recording-server's Issues

Error: expected multipart SIPREC body

I run test with command : npm test
and i receiver error: expected multipart SIPREC body
i was debuged and i saw error in file test/parser.js line 35
////
const segments = data.split(\n${delimiter});
const regex = /.Content-Type:\s+(.)\n.\n([\s\S.])$/;
const req = { payload: [] };

  for (let i = 1; i < segments.length; i++) {
    const arr = regex.exec(segments[i]);
    if (!arr) {
      continue;
    }
    req.payload.push({ type: arr[1], content: arr[2] });
  }

///
arr alway null
so payload null and show error.
please help me. thank a alot.

not able to up recorder

while executing node app facing following error

/root/shah/siprec/drachtio-siprec-recording-server/app.js:7
let callHandler;
^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:442:10)
at startup (node.js:136:18)
at node.js:966:3

Help me! I cannot receiver sip calls when i run app

I run app with comman: node app
but when i make call, siprec recording server cannot receiver Sip messages
I use tcpdump to catch Sip package in port 5060 then i see it exist.
but Siprec server cannot process it.
It alway just show:
{"level":30,"time":1642566832259,"msg":"attempting inbound connection","pid":12819,"hostname":"siprec.server","host":"127.0.0.1","port":9023,"secret":"cymru","v":1}
{"level":30,"time":1642566832263,"msg":"using freeswitch as the recorder","pid":12819,"hostname":"siprec.server","0":"172.32.0.4","v":1}
{"level":30,"time":1642566832586,"msg":"successfully connected to redis at 127.0.0.1:9379","pid":12819,"hostname":"siprec.server","v":1}
{"level":30,"time":1642566832591,"msg":"inbound connection to drachtio listening on udp/127.0.0.1:5060,udp/172.32.0.2:5060","pid":12819,"hostname":"siprec.server","v":1}

I config SBC wrong?
Please help me!
thank a lot, sorry because my english is bad.

Avaya SBC + Drachtio + rtpengine - "msg":"Error connecting call: TypeError: Cannot read property '0' of undefined"

Hi .
I am having this error and hope you can help.
sdp1:
drachtio:siprec-recording-server 'v=0\r\no=- 830037 1 IN IP4 212.111.68.111\r\ns=SipCall\r\nc=IN IP4 10.201.1.168\r\nt=0 0\r\nm=audio 35468 RTP/AVP 8 103\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:103 telephone-event/8000\r\na=label:10\r\na=sendonly\r\na=ptime:20\r\n',
drachtio:siprec-recording-server sdp2:
drachtio:siprec-recording-server 'v=0\r\no=- 830037 1 IN IP4 212.111.68.111\r\ns=SipCall\r\nc=IN IP4 10.201.1.168\r\nt=0 0\r\nm=audio 35064 RTP/AVP 8 103\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:103 telephone-event/8000\r\na=label:20\r\na=sendonly\r\na=ptime:20\r\n' } payload parser results +29s
{"level":50,"time":1573550781197,"msg":"Error connecting call: TypeError: Cannot read property '0' of undefined","pid":5891,"hostname":"SIPREC","callid":"6b2bfd3fd9110b29173fad6093579f76","v":1}

expected multipart SIPREC body with Broadwaorks dual stream mode

Hello,
We encounter following error with Broadwoks in dual stream mode.

siprec | {"level":30,"time":1630397275169,"msg":"received SIPREC invite: sip:172.16.33.210:9024;transport=udp","pid":1,"hostname":"73106019324d","callid":"[email protected]","v":1}
siprec | {"level":50,"time":1630397275186,"msg":"Error connecting call: Error: expected multipart SIPREC body","pid":1,"hostname":"73106019324d","callid":"[email protected]","v":1}

Media section can be find bellow :

--UniqueBroadWorksBoundary
Content-Type:application/sdp
Content-Length:451

v=0
o=BroadWorks 6941 1 IN IP4 172.18.0.11
s=-
c=IN IP4 172.18.0.13
t=0 0
m=audio 11108 RTP/AVP 8 101 9 0
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
a=sendonly
a=label:1
m=audio 11110 RTP/AVP 8 101 9 0
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
a=sendonly
a=label:2

--UniqueBroadWorksBoundary--

Regards,
David.

RtpEngineError: malformed/unexpected error for type DTMF

67|drachtio-siprec-recording-server | {"level":30,"time":1689152309658,"msg":"call connected successfully, using rtpengine at {"host":"localhost","port":22222}","pid":1176370,"hostname":"ip-172-31-29-233","callid":"[email protected]","v":1}
67|drachtio-siprec-recording-server | RtpEngineError: malformed/unexpected message format {"callid":"[email protected]","source_tag":"5810fd55-e64d-46b2-bfcc-15e5ca553e8a","tags":["5810fd55-e64d-46b2-bfcc-15e5ca553e8a","1c601966398"],"type":"DTMF","timestamp":1689152321,"source_ip":"50.19.121.248","event":6,"duration":57,"volume":10}
67|drachtio-siprec-recording-server | at Client._onMessage (/home/admin/apps/drachtio-siprec-recording-server/node_modules/rtpengine-client/lib/client.js:85:26)
67|drachtio-siprec-recording-server | at Socket.emit (node:events:513:28)
67|drachtio-siprec-recording-server | at UDP.onMessage [as onmessage] (node:dgram:933:8)
PM2 | App [drachtio-siprec-recording-server:67] exited with code [1] via signal [SIGINT]
PM2 | App [drachtio-siprec-recording-server:67] starting in -fork mode-
PM2 | App [drachtio-siprec-recording-server:67] online
67|drachtio-siprec-recording-server | {"level":30,"time":1689152321731,"msg":"attempting inbound connection","pid":1176506,"hostname":"ip-172-31

"msg":"Error connecting call: Error: expected multipart SIPREC body"

Hi Dave,

I'm using drachtio-server + rtpengine + serverdrachtio-siprec-recording-server running in docker

Here are log messages which I'm getting:

drachtio_1 | c=IN IP4 X.X.X.X
drachtio_1 | t=0 0
drachtio_1 | m=audio 22294 RTP/AVP 8 101 0 9 18
drachtio_1 | a=rtpmap:0 PCMU/8000
drachtio_1 | a=rtpmap:9 G722/8000
drachtio_1 | a=rtpmap:8 PCMA/8000
drachtio_1 | a=rtpmap:18 G729/8000
drachtio_1 | a=rtpmap:101 telephone-event/8000
siprec-server_1 | {"level":30,"time":1547408915428,"msg":"received SIPREC invite: sip:DOCKER_HOST:5060","pid":1,"hostname":"236871e294bc","callid":"BW144835361130119-1788699024@SBC_IP","v":1}
drachtio_1 | a=fmtp:101 0-15
drachtio_1 | a=ptime:20
drachtio_1 | a=sendonly
siprec-server_1 | {"level":50,"time":1547408915438,"msg":"Error connecting call: Error: expected multipart SIPREC body","pid":1,"hostname":"236871e294bc","callid":"BW144835361130119-1788699024@SBC_IP","v":1}
drachtio_1 | a=label:1
drachtio_1 |
drachtio_1 | --UniqueBroadWorksBoundary--
drachtio_1 | 2019-01-13 19:48:35.375710 tport.c:3051 tport_deliver() tport_deliver(0x25c6980): msg 0x25cc9c0 (3395 bytes) from udp/X.X.X.X:5060 next=(nil)
drachtio_1 | 2019-01-13 19:48:35.375803 nta.c:2968 agent_recv_request() nta: received INVITE sip:DOCKER_HOST:5060 SIP/2.0 (CSeq 610344401)
drachtio_1 | 2019-01-13 19:48:35.375882 nta.c:3183 agent_recv_request() nta: INVITE (610344401) to message callback
drachtio_1 | 2019-01-13 19:48:35.375928 processMessageStatelessly - incoming message with call-id BW144835361130119-1788699024@SBC_IP does not match an existing call leg, processed in thread 140623077115776
drachtio_1 | 2019-01-13 19:48:35.376039 tport.c:3285 tport_tsend() tport_tsend(0x25c6980) tpn = UDP/X.X.X.X:7281
drachtio_1 | 2019-01-13 19:48:35.376098 tport.c:4085 tport_resolve() tport_resolve addrinfo = X.X.X.X:7281
drachtio_1 | 2019-01-13 19:48:35.376260 tport.c:3531 tport_send_msg() tport_vsend returned 331
drachtio_1 | 2019-01-13 19:48:35.376472 send 331 bytes to udp/[X.X.X.X]:7281 at 19:48:35.376160:
drachtio_1 | SIP/2.0 100 Trying
drachtio_1 | Via: SIP/2.0/UDP X.X.X.X:7281;branch=z9hG4bKolqlue004gkdc9gi63j0.1;rport=7281
drachtio_1 | From: "Caller_Name" sip:[email protected]:7281;user=phone;tag=1803327208-1547408915361-
drachtio_1 | To: sip:DOCKER_HOST:5060
drachtio_1 | Call-ID: BW144835361130119-1788699024@SBC_IP
drachtio_1 | CSeq: 610344401 INVITE
drachtio_1 | Content-Length: 0
drachtio_1 |
drachtio_1 | 2019-01-13 19:48:35.376558 ClientController::selectClientForRequestOutsideDialog - there are 1 possible clients, we are starting with offset 0
drachtio_1 | 2019-01-13 19:48:35.376620 ClientController::route_request_outside_dialog - Selected client at offset 0
drachtio_1 | 2019-01-13 19:48:35.376732 PendingRequestController::add - tport: 0x25c6980, Call-ID: BW144835361130119-1788699024@SBC_IP, transactionId 1cd3071e-238b-42d7-9b4c-b4c4f50dbfb2
drachtio_1 | 2019-01-13 19:48:35.376789 pending-request: Adding entry to go off in 64000ms
drachtio_1 | 2019-01-13 19:48:35.376833 pending-request: Adding entry to the head (queue was empty), length: 1
drachtio_1 | 2019-01-13 19:48:35.376935 ClientController::addNetTransaction: transactionId 1cd3071e-238b-42d7-9b4c-b4c4f50dbfb2; size: 1
drachtio_1 | 2019-01-13 19:48:35.400018 Client::write_handler - wrote 3543 bytes: system:0
drachtio_1 | 2019-01-13 19:48:35.403833 No connected clients found to handle incoming cdr:attempt request
drachtio_1 | 2019-01-13 19:48:38.371276 tport.c:2777 tport_wakeup_pri() tport_wakeup_pri(0x25c6980): events IN
drachtio_1 | 2019-01-13 19:48:38.371444 tport.c:2892 tport_recv_event() tport_recv_event(0x25c6980)
drachtio_1 | 2019-01-13 19:48:38.371508 tport.c:3233 tport_recv_iovec() tport_recv_iovec(0x25c6980) msg 0x25cdad0 from (udp/172.32.0.2:5060) has 354 bytes, veclen = 1
drachtio_1 | 2019-01-13 19:48:38.371833 recv 354 bytes from udp/[X.X.X.X]:7281 at 19:48:38.371569:
drachtio_1 | CANCEL sip:DOCKER_HOST:5060 SIP/2.0
drachtio_1 | Via: SIP/2.0/UDP X.X.X.X:7281;branch=z9hG4bKolqlue004gkdc9gi63j0.1
drachtio_1 | CSeq: 610344401 CANCEL
drachtio_1 | From: "Caller_Name"sip:[email protected]:7281;user=phone;tag=1803327208-1547408915361-
drachtio_1 | To: sip:DOCKER_HOST:5060
drachtio_1 | Call-ID: BW144835361130119-1788699024@SBC_IP
drachtio_1 | Max-Forwards: 69
drachtio_1 | Content-Length: 0
drachtio_1 |
drachtio_1 | 2019-01-13 19:48:38.371895 tport.c:3051 tport_deliver() tport_deliver(0x25c6980): msg 0x25cdad0 (354 bytes) from udp/X.X.X.X:5060 next=(nil)
drachtio_1 | 2019-01-13 19:48:38.371947 nta.c:2968 agent_recv_request() nta: received CANCEL sip:DOCKER_HOST:5060 SIP/2.0 (CSeq 610344401)
drachtio_1 | 2019-01-13 19:48:38.372012 nta.c:3183 agent_recv_request() nta: CANCEL (610344401) to message callback
drachtio_1 | 2019-01-13 19:48:38.372054 processMessageStatelessly - incoming message with call-id BW144835361130119-1788699024@SBC_IP does not match an existing call leg, processed in thread 140623077115776
drachtio_1 | 2019-01-13 19:48:38.372126 received quick cancel for invite that is out to client for disposition: BW144835361130119-1788699024@SBC_IP
drachtio_1 | 2019-01-13 19:48:38.372493 Client::write_handler - wrote 500 bytes: system:0
drachtio_1 | 2019-01-13 19:48:38.372611 tport.c:3285 tport_tsend() tport_tsend(0x25c6980) tpn = UDP/X.X.X.X:7281
drachtio_1 | 2019-01-13 19:48:38.372674 tport.c:4085 tport_resolve() tport_resolve addrinfo = X.X.X.X:7281
drachtio_1 | 2019-01-13 19:48:38.372829 tport.c:3531 tport_send_msg() tport_vsend returned 345
drachtio_1 | 2019-01-13 19:48:38.373042 send 345 bytes to udp/[X.X.X.X]:7281 at 19:48:38.372732:
drachtio_1 | SIP/2.0 200 OK
drachtio_1 | Via: SIP/2.0/UDP X.X.X.X:7281;branch=z9hG4bKolqlue004gkdc9gi63j0.1;rport=7281
drachtio_1 | From: "Caller_Name" sip:[email protected]:7281;user=phone;tag=1803327208-1547408915361-
drachtio_1 | To: sip:DOCKER_HOST:5060;tag=4cNNcvS2c2BXp
drachtio_1 | Call-ID: BW144835361130119-1788699024@SBC_IP
drachtio_1 | CSeq: 610344401 CANCEL
drachtio_1 | Content-Length: 0
drachtio_1 |
drachtio_1 | 2019-01-13 19:48:38.373181 tport.c:3285 tport_tsend() tport_tsend(0x25c6980) tpn = UDP/X.X.X.X:7281
drachtio_1 | 2019-01-13 19:48:38.373234 tport.c:4085 tport_resolve() tport_resolve addrinfo = X.X.X.X:7281
drachtio_1 | 2019-01-13 19:48:38.373334 tport.c:3531 tport_send_msg() tport_vsend returned 361
drachtio_1 | 2019-01-13 19:48:38.373541 send 361 bytes to udp/[X.X.X.X]:7281 at 19:48:38.373283:
drachtio_1 | SIP/2.0 487 Request Terminated
drachtio_1 | Via: SIP/2.0/UDP X.X.X.X:7281;branch=z9hG4bKolqlue004gkdc9gi63j0.1;rport=7281
drachtio_1 | From: "Caller_Name" sip:[email protected]:7281;user=phone;tag=1803327208-1547408915361-
drachtio_1 | To: sip:DOCKER_HOST:5060;tag=5NeeeQa69a2Fj
drachtio_1 | Call-ID: BW144835361130119-1788699024@SBC_IP
drachtio_1 | CSeq: 610344401 INVITE
drachtio_1 | Content-Length: 0
drachtio_1 |
drachtio_1 | 2019-01-13 19:48:38.379436 tport.c:2777 tport_wakeup_pri() tport_wakeup_pri(0x25c6980): events IN
drachtio_1 | 2019-01-13 19:48:38.379592 tport.c:2892 tport_recv_event() tport_recv_event(0x25c6980)
drachtio_1 | 2019-01-13 19:48:38.379656 tport.c:3233 tport_recv_iovec() tport_recv_iovec(0x25c6980) msg 0x25ce310 from (udp/172.32.0.2:5060) has 366 bytes, veclen = 1
drachtio_1 | 2019-01-13 19:48:38.379979 recv 366 bytes from udp/[X.X.X.X]:7281 at 19:48:38.379714:
drachtio_1 | ACK sip:DOCKER_HOST:5060 SIP/2.0
drachtio_1 | Via: SIP/2.0/UDP X.X.X.X:7281;branch=z9hG4bKolqlue004gkdc9gi63j0.1
drachtio_1 | CSeq: 610344401 ACK
drachtio_1 | From: "Caller_Name"sip:[email protected]:7281;user=phone;tag=1803327208-1547408915361-
drachtio_1 | To: sip:DOCKER_HOST:5060;tag=5NeeeQa69a2Fj
drachtio_1 | Call-ID: BW144835361130119-1788699024@SBC_IP
drachtio_1 | Max-Forwards: 69
drachtio_1 | Content-Length: 0

Question: it is possible that calls will be recorded

I am recording calls using drachtio server, drachtio recording and rtpengine, and everything work fine, but I would like to define which calls are recorded and which are not. It is possible to define this in drachtio server. I hope you can answer me.

Greetings,
Miguel Alvarado

Voice is over lapping

I Follow your instruction of this repository but
when I listen recorded files of each call then it's have an issue that call
When I say Hi after that get I response :-> Welcome, I am bot How can I help you Everything is fine with call
but when I play recorded file I listen bot voice first then I listen my voice some time it''s over lap sometime my voice come after bot response

We want to know How to fix that

Cannot read property 'user'

I have a system with openSIPS and rtpproxy infront of asterisk. Ive now setup drachtio, drachtio-siprec and rtpengine to record calls but drachtio-siprec is throwing the following type error.
{"level":50,"time":1544045350298,"msg":"Error connecting call: TypeError: Cannot read property 'user' of undefined","pid":8,"hostname":"siprec","callid":"B2B.312.2851794.1544045349","v":1}
Is this an issue with the siprec server or the data being passed during the sip invite by the opensips siprec module?

on SDP media inactive recording server sending recvonly

On inactive media in rtp recording is sending recvonly and media is getting recorded, the recording server needs to send inactive too

INVITE sip:44.217.32.184:5060 SIP/2.0
Via: SIP/2.0/UDP 35.153.90.242:5070;branch=z9hG4bKac1356091624;rport=5070
Max-Forwards: 70
From: sip:172.31.146.45;user=phone;tag=1c1442095253
To: sip:44.217.32.184;user=phone;tag=v0UD8He9FmjKg
Call-ID: [email protected]
CSeq: 2 INVITE
Contact: sip:35.153.90.242:5070;src
Supported: sdp-anat
Require: siprec
User-Agent: Mediant VE SBC/v.7.40A.500.357
Content-Type: multipart/mixed;boundary=boundary_ac18ff
Content-Length: 2343

--boundary_ac18ff
Content-Type: application/sdp

v=0
o=AudiocodesGW 51603343 1530397018 IN IP4 35.153.90.242
s=SBC-Call
c=IN IP4 35.153.90.242
t=0 0
m=audio 11096 RTP/AVP 0 8 111 126
c=IN IP4 35.153.90.242
a=ptime:20
a=inactive
a=label:1
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=20; maxplaybackrate=8000; maxaveragebitrate=50000; useinbandfec=1
a=rtpmap:126 telephone-event/8000
a=fmtp:126 0-15,16
m=audio 11100 RTP/AVP 0 8 111 126
c=IN IP4 35.153.90.242
a=ptime:20
a=inactive
a=label:2
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=20; maxplaybackrate=8000; maxaveragebitrate=50000; useinbandfec=1
a=rtpmap:126 telephone-event/8000
a=fmtp:126 0-15,16

--boundary_ac18ff
Content-Type: application/rs-metadata
Content-Disposition: recording-session

complete 2023-12-22T10:59:27 00000000-0000-00d7-2bb4-1f000005f7b1 2023-12-22T10:59:27 +18448735673 2023-12-22T10:59:27 00000001-a577-00d7-2bb4-1f000005f7b1 00000000-4264-00d7-2bb4-1f000005f7b1 2023-12-22T10:59:27 00000000-4264-00d7-2bb4-1f000005f7b1 00000001-a577-00d7-2bb4-1f000005f7b1 1 2 --boundary_ac18ff--

SIP/2.0 200 OK
Call-ID: [email protected]
cseq: 2 INVITE
from: sip:172.31.146.45;user=phone;tag=1c1442095253
to: sip:44.217.32.184;user=phone;tag=v0UD8He9FmjKg
Content-Length: 747
contact: sip:44.217.32.184:5060
content-type: application/sdp

v=0
o=AudiocodesGW 51603343 1530397017 IN IP4 44.217.32.184
s=SBC-Call
c=IN IP4 44.217.32.184
t=0 0
m=audio 40044 RTP/AVP 0 8 111 126
c=IN IP4 44.217.32.184
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:111 OPUS/48000/2
a=rtpmap:126 telephone-event/8000
a=fmtp:111 useinbandfec=1; maxplaybackrate=8000; maxaveragebitrate=50000; minptime=20
a=fmtp:126 0-15,16
a=rtcp:40045
a=ptime:20
a=recvonly
a=label:1
m=audio 40318 RTP/AVP 0 8 111 126
c=IN IP4 44.217.32.184
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:111 OPUS/48000/2
a=rtpmap:126 telephone-event/8000
a=fmtp:111 useinbandfec=1; maxplaybackrate=8000; maxaveragebitrate=50000; minptime=20
a=fmtp:126 0-15,16
a=rtcp:40319
a=ptime:20
a=recvonly
a=label:2

Drachtio send "inactive" attribute back in SIP OK while he receives "sendonly" in SIP Invite

Hey Dave,

We're using Cisco SBC as our SRC and recently we updated with the upstream of this git repository in order to resolve an issue of the inactive which makes the application crash.

We've also recently experienced an issue that in a call scenario in which the callee hasn't answered yet, the SBC sends as expected a sendonly attribute and sending of course RTP data to the SIP-REC server.

When we actually experience a scenario that the SBC sends inactive at the start, there's no RTP data of course. But once he does send a sendonly attribute, the drachtio project actually sends back inactive in the OK response of the invite(Which has sendonly attribute).

For meanwhile, the call is ringing for the callee while the caller is talking and all packets are being received in the meanwhile.

Afterward, when the callee answers another Invite with inactive arrives, which after another few moments there is two more Invite with sendonly from the SBC. For all three of those SIP Invites, the drachtio project responds back with inactive while he receives sendonly.

Because the SBC receives back inactive instead of sendonly, at some point after the last described packets, he (SBC) then again sends two SIP Invites with inactive when he gets back OK with inactive again as expected.
At the end of all of that scenario, a SIP Bye is being sent by the SBC because he keeps receiving inactive for the SIP-REC from drachtio.

Is it maybe a known issue?
If not, is there a possibility to request to check that out?
When possible of course.

Thanks

redis entries are not deleted

Hi,
I use this application with Freeswitch. Entries created in the redis server are not deleted and stay forever even after the SIPREC call is terminated with BYE gracefully. It seems it's happening all the time. Will appreciate any help for this.
Thanks in advance.

Configuration property "drachtio" is not defined

$ node app
WARNING: No configurations found in configuration directory:/opt/drachtio-siprec-recording-server/config
WARNING: To disable this warning set SUPPRESS_NO_CONFIG_WARNING in the environment.
/opt/drachtio-siprec-recording-server/node_modules/config/lib/config.js:202
throw new Error('Configuration property "' + property + '" is not defined');
^

Error: Configuration property "drachtio" is not defined
at Config.get (/opt/drachtio-siprec-recording-server/node_modules/config/lib/config.js:202:11)
at Object. (/opt/drachtio-siprec-recording-server/app.js:17:22)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

Trigger re-invite from Drachtio to the SBC

Hi Dave,

I am wondering after a SIPREC session is established is there a way to initiate a re-invite from Dtachtio to the SBC (more like hold and resume with 'sendonly' attribute in the media). We are using Freeswitch with the Drachtio siprec recording server and would like to trigger this from the Freeswitch on demand.

Thanks.

what I use siprec client for test ?

The application receives the SIPREC INVITE from the SBC (or other SIPREC recording client),

Could you advice the SBC open source software ?

Avaya SBCE + FreeSwitch Empty recordings

hi guys,
I have a deployment with Avaya SBCE (172.31.13.176), drachtio + redis (192.168.2.112) and freeswitch (192.168.2.111). It seems SIP signaling between all is going ok (second call leg, etc) but for every call 2 wav files are generated (caller and calle?) and, even files has size not zero, only silence is recorded. i have checked via tcpdump RTP is arriving to freeswitch host. Attached all the logs. any idea?

thanks in advance!
drach.log
FS.log
app.log

OpenSIPS returns bye to drachtio prior to call ending with freeswitch backend

Im using freeswitch as the recording server Ive been able to get everything mostyl working, freeswitch will start to create a recording file but once opensips receives the 200 OK SDP from drachtio it returns BYE. Im not sure if this issue is an opensips configuration issue or drachtio but I was hoping you might know.

Ive included a wireshark screenshot of the transaction.
Green: base call between client/opensips/rtpproxy/asterisk
pink&tan: drachtio/freeswitch
orange: drachtio/opensips

image

SIPREC and return audio as response

As I see I can use this to receive audio and process it.
Can I also use this to return a audio Stream?

For better understanding I have the following problem:
I want to have a "bot" that receives calls, processes the audio and return a new audio back using RTP streams.
This new audio generated is based on the audio received(Question / Answer Style)

SIPREC Parsing gets an error of "Error connecting call: TypeError: Cannot read property '0' of undefined" due to inactive instead of sendonly

Hello,

We've recently experienced a use-case in which we've sent in our SIP-REC Invite the variable "inactive" instead of "sendonly", which crashed the SIPREC parsePayload function.

I'm currently using this commit(95a6e71 - link).

Maybe I didn't found by mistake, but are there any changes that allow for receiving inactive and still function regarding receiving the SIP-REC and process it?

Sincerely yours,
Ido Magor

client sent invalid message -- JSON message length not specified properly

Hi,

We tried to use Drachtio with a Broadworks platform using SIPREC.
Here is the SIPREC content sent by Broadworks:

INVITE sip:172.16.33.210:9023;transport=tcp SIP/2.0
Via:SIP/2.0/TCP 172.19.0.11;branch=z9hG4bKBroadWorks.-112vbje-172.16.33.210V9023-0-82196506-923010692-1623662030899-
From:"CallingLineIdFirstName CallingLineIdLastName"sip:[email protected];tag=923010692-1623662030899-
To:sip:172.16.33.210:9023
Call-ID:[email protected]
CSeq:82196506 INVITE
Contact:sip:172.19.0.11:5060;transport=tcp;src
Privacy:none
Recv-Info:
X-BroadWorks-Correlation-Info:2f420dae-06ac-4ac0-8ee6-f23d959a9d7e
Accept:application/media_control+xml,application/sdp,application/x-broadworks-call-center+xml
Allow:ACK,BYE,CANCEL,INFO,INVITE,OPTIONS,PRACK,REFER,NOTIFY
Supported:
Max-Forwards:60
Content-Type:multipart/mixed;boundary=UniqueBroadWorksBoundary
Content-Length:2475
MIME-Version:1.0

--UniqueBroadWorksBoundary
Content-Type:application/rs-metadata+xml
Content-Disposition:recording-session
Content-Length:1964

completeSRCselectivesip:[email protected]:13:50+02:00sip:[email protected]:uuid:50decb38-89a5-468e-8e0d-9e78301618c2sip:[email protected];user=phoneurn:uuid:50decb38-89a5-468e-8e0d-9e78301618c21mixed2f420dae-06ac-4ac0-8ee6-f23d959a9d7e2255512345@99.abccallhalf-316217:0sip:[email protected]:[email protected];user=phonesip:[email protected]

--UniqueBroadWorksBoundary
Content-Type:application/sdp
Content-Length:263

v=0
o=BroadWorks 68 1 IN IP4 172.19.0.11
s=-
c=IN IP4 172.19.0.14
t=0 0
m=audio 10906 RTP/AVP 8 9 0 101
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
a=sendonly
a=label:1

--UniqueBroadWorksBoundary--

Drachtio answers this:

drachtio | 2021-06-14 09:13:50.906253 ClientController::accept_handler_tcp - got connection
drachtio | 2021-06-14 09:13:50.906449 Client::start - Received connection from client at 172.32.0.1:38490
drachtio | 2021-06-14 09:13:50.906545 ClientController::join - Added client, count of connected clients is now: 1
drachtio | 2021-06-14 09:13:50.906649 ClientController::start_accept_tcp
drachtio | 2021-06-14 09:13:50.907251 Client::read_handler client sent invalid message -- JSON message length not specified properly
drachtio | 2021-06-14 09:13:50.907334 ClientController::leave - Removed client, count of connected clients is now: 0
drachtio | 2021-06-14 09:13:50.907474 BaseClient::~BaseClient

We didn't find any reason or documentation explaining why this "JSON message length not specified properly" error occurs.

Replaces drachtio/drachtio-server#159 that was created under wrong repo.

Can you help us to why this error happens and how to fix it please ?

Regards,
David

Some questions about this project

Hi, I'm looking for open source solutions of SIPREC and I test drachtio with dractio-siprec-recording-server along with RTPEngine. But I am confusing about how drachtio records the RTP stream. It seems that drachtio sends ng-protocol to tell RTPEngine to record locally. Is my understanding correct? But my understanding is that drachtio should do the recording of RTP stream, not RTPEngine

Install on Centos 7

Hi supporter,
I want to install in on Centos 7. Could you guide me install? Many thanks

Issue Parsing SIPrec Invite message from Opensips to Drachito

Hi Team,

 I am start connecting through opensips 3.4, getting following error in Drachito SIPrec-recording server.

"msg":"Error connecting incoming SIPREC call to freeswitch"
Please let us what we are doing wrong!!!

Please find the log for your refernce.

drachtio:siprec-recording-server {
drachtio:siprec-recording-server req: <ref *1> Request {
drachtio:siprec-recording-server _events: [Object: null prototype] {},
drachtio:siprec-recording-server _eventsCount: 0,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server msg: SipMessage {
drachtio:siprec-recording-server headers: [Object],
drachtio:siprec-recording-server raw: 'INVITE sip:10.x.x.134:5090;transport=udp SIP/2.0\r\n' +
drachtio:siprec-recording-server 'Via: SIP/2.0/UDP 10.x.x.112:5060;branch=z9hG4bK60c7.d8778186.0;rport=5060\r\n' +
drachtio:siprec-recording-server 'To: sip:10.x.x.134:5090;transport=udp\r\n' +
drachtio:siprec-recording-server 'From: sip:10.x.x.134:5090;transport=udp;tag=5e450fe554cafa44a1b261d439e7c443-ce21\r\n' +
drachtio:siprec-recording-server 'CSeq: 2 INVITE\r\n' +
drachtio:siprec-recording-server 'Call-ID: B2B.92.5795484.1718895857.1242373537\r\n' +
drachtio:siprec-recording-server 'Max-Forwards: 70\r\n' +
drachtio:siprec-recording-server 'Content-Length: 1935\r\n' +
drachtio:siprec-recording-server 'User-Agent: OpenSIPS (3.4.5 (x86_64/linux))\r\n' +
drachtio:siprec-recording-server 'Require: siprec\r\n' +
drachtio:siprec-recording-server 'Content-Type: multipart/mixed;boundary=OSS-unique-boundary-42\r\n' +
drachtio:siprec-recording-server 'Contact: sip:10.x.x.112:5060;+sip.src\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '--OSS-unique-boundary-42\r\n' +
drachtio:siprec-recording-server 'Content-Type: application/sdp\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server 'v=0\r\n' +
drachtio:siprec-recording-server 'o=- 7382601495339934508 7382601495339934508 IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 's=rtpengine-10-5-3-5-1\r\n' +
drachtio:siprec-recording-server 't=0 0\r\n' +
drachtio:siprec-recording-server 'm=audio 10018 RTP/AVP 8 101\r\n' +
drachtio:siprec-recording-server 'c=IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 'a=label:1\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:8 PCMA/8000\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:101 telephone-event/8000\r\n' +
drachtio:siprec-recording-server 'a=fmtp:101 0-15\r\n' +
drachtio:siprec-recording-server 'a=sendonly\r\n' +
drachtio:siprec-recording-server 'a=rtcp:10019\r\n' +
drachtio:siprec-recording-server 'a=ptime:20\r\n' +
drachtio:siprec-recording-server 'm=audio 10034 RTP/AVP 8 101\r\n' +
drachtio:siprec-recording-server 'c=IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 'a=label:0\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:8 PCMA/8000\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:101 telephone-event/8000\r\n' +
drachtio:siprec-recording-server 'a=fmtp:101 0-15\r\n' +
drachtio:siprec-recording-server 'a=sendonly\r\n' +
drachtio:siprec-recording-server 'a=rtcp:10035\r\n' +
drachtio:siprec-recording-server 'a=ptime:20\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '--OSS-unique-boundary-42\r\n' +
drachtio:siprec-recording-server 'Content-Type: application/rs-metadata+xml\r\n' +
drachtio:siprec-recording-server 'Content-Disposition: recording-session\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server "\r\n" +
drachtio:siprec-recording-server '\tcomplete\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\tcakgrcvqrwfheid@pandi-Lenovo-V14\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\t\t1009\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '--OSS-unique-boundary-42--\r\n',
drachtio:siprec-recording-server body: '--OSS-unique-boundary-42\r\n' +
drachtio:siprec-recording-server 'Content-Type: application/sdp\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server 'v=0\r\n' +
drachtio:siprec-recording-server 'o=- 7382601495339934508 7382601495339934508 IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 's=rtpengine-10-5-3-5-1\r\n' +
drachtio:siprec-recording-server 't=0 0\r\n' +
drachtio:siprec-recording-server 'm=audio 10018 RTP/AVP 8 101\r\n' +
drachtio:siprec-recording-server 'c=IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 'a=label:1\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:8 PCMA/8000\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:101 telephone-event/8000\r\n' +
drachtio:siprec-recording-server 'a=fmtp:101 0-15\r\n' +
drachtio:siprec-recording-server 'a=sendonly\r\n' +
drachtio:siprec-recording-server 'a=rtcp:10019\r\n' +
drachtio:siprec-recording-server 'a=ptime:20\r\n' +
drachtio:siprec-recording-server 'm=audio 10034 RTP/AVP 8 101\r\n' +
drachtio:siprec-recording-server 'c=IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 'a=label:0\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:8 PCMA/8000\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:101 telephone-event/8000\r\n' +
drachtio:siprec-recording-server 'a=fmtp:101 0-15\r\n' +
drachtio:siprec-recording-server 'a=sendonly\r\n' +
drachtio:siprec-recording-server 'a=rtcp:10035\r\n' +
drachtio:siprec-recording-server 'a=ptime:20\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '--OSS-unique-boundary-42\r\n' +
drachtio:siprec-recording-server 'Content-Type: application/rs-metadata+xml\r\n' +
drachtio:siprec-recording-server 'Content-Disposition: recording-session\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server "\r\n" +
drachtio:siprec-recording-server '\tcomplete\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\tcakgrcvqrwfheid@pandi-Lenovo-V14\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\t\t1009\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '--OSS-unique-boundary-42--\r\n',
drachtio:siprec-recording-server method: 'INVITE',
drachtio:siprec-recording-server version: '2.0',
drachtio:siprec-recording-server uri: 'sip:10.x.x.134:5090;transport=udp',
drachtio:siprec-recording-server payload: [Array]
drachtio:siprec-recording-server },
drachtio:siprec-recording-server source: 'network',
drachtio:siprec-recording-server source_address: '10.x.x.112',
drachtio:siprec-recording-server source_port: 5060,
drachtio:siprec-recording-server protocol: 'udp',
drachtio:siprec-recording-server stackTime: '15:04:18.092809',
drachtio:siprec-recording-server stackTxnId: '7d4eabfb-37ad-47fc-8ada-9e4cc64895a7',
drachtio:siprec-recording-server stackDialogId: '',
drachtio:siprec-recording-server server: {
drachtio:siprec-recording-server address: '127.0.0.1',
drachtio:siprec-recording-server hostport: 'udp/[::1]:5090,udp/127.0.0.1:5090,udp/[2a01:4f9:c010:d488::1]:5090,udp/10.x.x.134:5090'
drachtio:siprec-recording-server },
drachtio:siprec-recording-server receivedOn: '10.x.x.134:5090',
drachtio:siprec-recording-server _res: Response {
drachtio:siprec-recording-server _events: [Object: null prototype] {},
drachtio:siprec-recording-server _eventsCount: 0,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _agent: [DrachtioAgent],
drachtio:siprec-recording-server msg: [SipMessage],
drachtio:siprec-recording-server finished: false,
drachtio:siprec-recording-server _req: [Circular 1],
drachtio:siprec-recording-server socket: [Socket],
drachtio:siprec-recording-server srf: [Srf],
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server _agent: DrachtioAgent {
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 5,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server puntUpTheMiddleware: [Function],
drachtio:siprec-recording-server params: Map(0) {},
drachtio:siprec-recording-server mapServer: [Map],
drachtio:siprec-recording-server verbs: [Map],
drachtio:siprec-recording-server cdrHandlers: Map(0) {},
drachtio:siprec-recording-server pendingSipAuthTxnIdUpdate: Map(0) {},
drachtio:siprec-recording-server _listen: false,
drachtio:siprec-recording-server secret: 'cymru',
drachtio:siprec-recording-server tags: [],
drachtio:siprec-recording-server wp: [WireProtocol],
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server socket: Socket {
drachtio:siprec-recording-server connecting: false,
drachtio:siprec-recording-server _hadError: false,
drachtio:siprec-recording-server _parent: null,
drachtio:siprec-recording-server _host: null,
drachtio:siprec-recording-server _closeAfterHandlingError: false,
drachtio:siprec-recording-server _readableState: [ReadableState],
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 5,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _writableState: [WritableState],
drachtio:siprec-recording-server allowHalfOpen: false,
drachtio:siprec-recording-server _sockname: [Object],
drachtio:siprec-recording-server _pendingData: null,
drachtio:siprec-recording-server _pendingEncoding: '',
drachtio:siprec-recording-server server: null,
drachtio:siprec-recording-server _server: null,
drachtio:siprec-recording-server _peername: [Object],
drachtio:siprec-recording-server [Symbol(async_id_symbol)]: 6,
drachtio:siprec-recording-server [Symbol(kHandle)]: [TCP],
drachtio:siprec-recording-server [Symbol(lastWriteQueueSize)]: 0,
drachtio:siprec-recording-server [Symbol(timeout)]: null,
drachtio:siprec-recording-server [Symbol(kBuffer)]: null,
drachtio:siprec-recording-server [Symbol(kBufferCb)]: null,
drachtio:siprec-recording-server [Symbol(kBufferGen)]: null,
drachtio:siprec-recording-server [Symbol(kCapture)]: false,
drachtio:siprec-recording-server [Symbol(kSetNoDelay)]: true,
drachtio:siprec-recording-server [Symbol(kSetKeepAlive)]: true,
drachtio:siprec-recording-server [Symbol(kSetKeepAliveInitialDelay)]: 0,
drachtio:siprec-recording-server [Symbol(kBytesRead)]: 0,
drachtio:siprec-recording-server [Symbol(kBytesWritten)]: 0
drachtio:siprec-recording-server },
drachtio:siprec-recording-server app: [Function: app] {
drachtio:siprec-recording-server method: '
',
drachtio:siprec-recording-server _init: [Function (anonymous)],
drachtio:siprec-recording-server connect: [Function (anonymous)],
drachtio:siprec-recording-server listen: [Function (anonymous)],
drachtio:siprec-recording-server endSession: [Function (anonymous)],
drachtio:siprec-recording-server request: [Function (anonymous)],
drachtio:siprec-recording-server set: [Function (anonymous)],
drachtio:siprec-recording-server get: [Function (anonymous)],
drachtio:siprec-recording-server use: [Function (anonymous)],
drachtio:siprec-recording-server handle: [Function (anonymous)],
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 5,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server setMaxListeners: [Function: setMaxListeners],
drachtio:siprec-recording-server getMaxListeners: [Function: getMaxListeners],
drachtio:siprec-recording-server emit: [Function: emit],
drachtio:siprec-recording-server addListener: [Function: addListener],
drachtio:siprec-recording-server on: [Function (anonymous)],
drachtio:siprec-recording-server prependListener: [Function: prependListener],
drachtio:siprec-recording-server once: [Function: once],
drachtio:siprec-recording-server prependOnceListener: [Function: prependOnceListener],
drachtio:siprec-recording-server removeListener: [Function: removeListener],
drachtio:siprec-recording-server off: [Function: removeListener],
drachtio:siprec-recording-server removeAllListeners: [Function: removeAllListeners],
drachtio:siprec-recording-server listeners: [Function: listeners],
drachtio:siprec-recording-server rawListeners: [Function: rawListeners],
drachtio:siprec-recording-server listenerCount: [Function: listenerCount],
drachtio:siprec-recording-server eventNames: [Function: eventNames],
drachtio:siprec-recording-server stack: [Array],
drachtio:siprec-recording-server params: [],
drachtio:siprec-recording-server _cachedEvents: [],
drachtio:siprec-recording-server routedMethods: [Object],
drachtio:siprec-recording-server locals: [Object: null prototype],
drachtio:siprec-recording-server invite: [Function: bound ],
drachtio:siprec-recording-server bye: [Function: bound ],
drachtio:siprec-recording-server register: [Function: bound ],
drachtio:siprec-recording-server info: [Function: bound ],
drachtio:siprec-recording-server subscribe: [Function: bound ],
drachtio:siprec-recording-server options: [Function: bound ],
drachtio:siprec-recording-server message: [Function: bound ],
drachtio:siprec-recording-server notify: [Function: bound ],
drachtio:siprec-recording-server cancel: [Function: bound ],
drachtio:siprec-recording-server update: [Function: bound ],
drachtio:siprec-recording-server prack: [Function: bound ],
drachtio:siprec-recording-server ack: [Function: bound ],
drachtio:siprec-recording-server refer: [Function: bound ],
drachtio:siprec-recording-server publish: [Function: bound ],
drachtio:siprec-recording-server disconnect: [Function (anonymous)],
drachtio:siprec-recording-server close: [Function (anonymous)],
drachtio:siprec-recording-server idle: [Getter],
drachtio:siprec-recording-server client: [DrachtioAgent]
drachtio:siprec-recording-server },
drachtio:siprec-recording-server srf: Srf {
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 2,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _dialogs: Map(0) {},
drachtio:siprec-recording-server _tags: [],
drachtio:siprec-recording-server _app: [Function],
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server res: <ref *2> Response {
drachtio:siprec-recording-server _events: [Object: null prototype] {},
drachtio:siprec-recording-server _eventsCount: 0,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _agent: DrachtioAgent {
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 5,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server puntUpTheMiddleware: [Function],
drachtio:siprec-recording-server params: Map(0) {},
drachtio:siprec-recording-server mapServer: [Map],
drachtio:siprec-recording-server verbs: [Map],
drachtio:siprec-recording-server cdrHandlers: Map(0) {},
drachtio:siprec-recording-server pendingSipAuthTxnIdUpdate: Map(0) {},
drachtio:siprec-recording-server _listen: false,
drachtio:siprec-recording-server secret: 'cymru',
drachtio:siprec-recording-server tags: [],
drachtio:siprec-recording-server wp: [WireProtocol],
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server msg: SipMessage { headers: [Object] },
drachtio:siprec-recording-server finished: false,
drachtio:siprec-recording-server _req: <ref *1> Request {
drachtio:siprec-recording-server _events: [Object: null prototype] {},
drachtio:siprec-recording-server _eventsCount: 0,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server msg: [SipMessage],
drachtio:siprec-recording-server source: 'network',
drachtio:siprec-recording-server source_address: '10.x.x.112',
drachtio:siprec-recording-server source_port: 5060,
drachtio:siprec-recording-server protocol: 'udp',
drachtio:siprec-recording-server stackTime: '15:04:18.092809',
drachtio:siprec-recording-server stackTxnId: '7d4eabfb-37ad-47fc-8ada-9e4cc64895a7',
drachtio:siprec-recording-server stackDialogId: '',
drachtio:siprec-recording-server server: [Object],
drachtio:siprec-recording-server receivedOn: '10.x.x.134:5090',
drachtio:siprec-recording-server _res: [Circular *2],
drachtio:siprec-recording-server _agent: [DrachtioAgent],
drachtio:siprec-recording-server socket: [Socket],
drachtio:siprec-recording-server app: [Function],
drachtio:siprec-recording-server srf: [Srf],
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server socket: Socket {
drachtio:siprec-recording-server connecting: false,
drachtio:siprec-recording-server _hadError: false,
drachtio:siprec-recording-server _parent: null,
drachtio:siprec-recording-server _host: null,
drachtio:siprec-recording-server _closeAfterHandlingError: false,
drachtio:siprec-recording-server _readableState: [ReadableState],
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 5,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _writableState: [WritableState],
drachtio:siprec-recording-server allowHalfOpen: false,
drachtio:siprec-recording-server _sockname: [Object],
drachtio:siprec-recording-server _pendingData: null,
drachtio:siprec-recording-server _pendingEncoding: '',
drachtio:siprec-recording-server server: null,
drachtio:siprec-recording-server _server: null,
drachtio:siprec-recording-server _peername: [Object],
drachtio:siprec-recording-server [Symbol(async_id_symbol)]: 6,
drachtio:siprec-recording-server [Symbol(kHandle)]: [TCP],
drachtio:siprec-recording-server [Symbol(lastWriteQueueSize)]: 0,
drachtio:siprec-recording-server [Symbol(timeout)]: null,
drachtio:siprec-recording-server [Symbol(kBuffer)]: null,
drachtio:siprec-recording-server [Symbol(kBufferCb)]: null,
drachtio:siprec-recording-server [Symbol(kBufferGen)]: null,
drachtio:siprec-recording-server [Symbol(kCapture)]: false,
drachtio:siprec-recording-server [Symbol(kSetNoDelay)]: true,
drachtio:siprec-recording-server [Symbol(kSetKeepAlive)]: true,
drachtio:siprec-recording-server [Symbol(kSetKeepAliveInitialDelay)]: 0,
drachtio:siprec-recording-server [Symbol(kBytesRead)]: 0,
drachtio:siprec-recording-server [Symbol(kBytesWritten)]: 0
drachtio:siprec-recording-server },
drachtio:siprec-recording-server srf: Srf {
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 2,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _dialogs: Map(0) {},
drachtio:siprec-recording-server _tags: [],
drachtio:siprec-recording-server _app: [Function],
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server [Symbol(kCapture)]: false
drachtio:siprec-recording-server },
drachtio:siprec-recording-server logger: EventEmitter {
drachtio:siprec-recording-server stream: WriteStream {
drachtio:siprec-recording-server connecting: false,
drachtio:siprec-recording-server _hadError: false,
drachtio:siprec-recording-server _parent: null,
drachtio:siprec-recording-server _host: null,
drachtio:siprec-recording-server _closeAfterHandlingError: false,
drachtio:siprec-recording-server _readableState: [ReadableState],
drachtio:siprec-recording-server _events: [Object: null prototype],
drachtio:siprec-recording-server _eventsCount: 1,
drachtio:siprec-recording-server _maxListeners: undefined,
drachtio:siprec-recording-server _writableState: [WritableState],
drachtio:siprec-recording-server allowHalfOpen: false,
drachtio:siprec-recording-server _sockname: null,
drachtio:siprec-recording-server _pendingData: null,
drachtio:siprec-recording-server _pendingEncoding: '',
drachtio:siprec-recording-server server: null,
drachtio:siprec-recording-server _server: null,
drachtio:siprec-recording-server columns: 183,
drachtio:siprec-recording-server rows: 43,
drachtio:siprec-recording-server _type: 'tty',
drachtio:siprec-recording-server fd: 1,
drachtio:siprec-recording-server _isStdio: true,
drachtio:siprec-recording-server destroySoon: [Function: destroy],
drachtio:siprec-recording-server _destroy: [Function: dummyDestroy],
drachtio:siprec-recording-server [Symbol(async_id_symbol)]: 4,
drachtio:siprec-recording-server [Symbol(kHandle)]: [TTY],
drachtio:siprec-recording-server [Symbol(lastWriteQueueSize)]: 0,
drachtio:siprec-recording-server [Symbol(timeout)]: null,
drachtio:siprec-recording-server [Symbol(kBuffer)]: null,
drachtio:siprec-recording-server [Symbol(kBufferCb)]: null,
drachtio:siprec-recording-server [Symbol(kBufferGen)]: null,
drachtio:siprec-recording-server [Symbol(kCapture)]: false,
drachtio:siprec-recording-server [Symbol(kSetNoDelay)]: false,
drachtio:siprec-recording-server [Symbol(kSetKeepAlive)]: false,
drachtio:siprec-recording-server [Symbol(kSetKeepAliveInitialDelay)]: 0,
drachtio:siprec-recording-server [Symbol(kBytesRead)]: 0,
drachtio:siprec-recording-server [Symbol(kBytesWritten)]: 0
drachtio:siprec-recording-server },
drachtio:siprec-recording-server serializers: {},
drachtio:siprec-recording-server chindings: ',"pid":109891,"hostname":"SIPINTERFACE01-1","callid":"B2B.92.5795484.1718895857.1242373537"',
drachtio:siprec-recording-server _levelVal: 30,
drachtio:siprec-recording-server fatal: [Function: LOG],
drachtio:siprec-recording-server error: [Function: LOG],
drachtio:siprec-recording-server warn: [Function: LOG],
drachtio:siprec-recording-server info: [Function: LOG],
drachtio:siprec-recording-server debug: [Function: noop],
drachtio:siprec-recording-server trace: [Function: noop]
drachtio:siprec-recording-server },
drachtio:siprec-recording-server xml: '\r\n' +
drachtio:siprec-recording-server "\r\n" +
drachtio:siprec-recording-server '\tcomplete\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\tcakgrcvqrwfheid@pandi-Lenovo-V14\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\t\t1009\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\t2024-06-20T15:04:17+0000\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\t\r\n' +
drachtio:siprec-recording-server '\r\n' +
drachtio:siprec-recording-server '--OSS-unique-boundary-42--\r\n',
drachtio:siprec-recording-server recordingData: {
drachtio:siprec-recording-server recording: {
drachtio:siprec-recording-server '$': [Object],
drachtio:siprec-recording-server datamode: [Array],
drachtio:siprec-recording-server session: [Array],
drachtio:siprec-recording-server participant: [Array],
drachtio:siprec-recording-server sessionrecordingassoc: [Array],
drachtio:siprec-recording-server participantsessionassoc: [Array],
drachtio:siprec-recording-server participantstreamassoc: [Array]
drachtio:siprec-recording-server }
drachtio:siprec-recording-server },
drachtio:siprec-recording-server sessionId: '1046f391-571e-4c36-9e45-9c0d7508c065',
drachtio:siprec-recording-server sdp1: 'v=0\r\n' +
drachtio:siprec-recording-server 'o=- 7382601495339934508 7382601495339934508 IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 's=rtpengine-10-5-3-5-1\r\n' +
drachtio:siprec-recording-server 't=0 0\r\n' +
drachtio:siprec-recording-server 'm=audio 10018 RTP/AVP 8 101\r\n' +
drachtio:siprec-recording-server 'c=IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 'a=label:1\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:8 PCMA/8000\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:101 telephone-event/8000\r\n' +
drachtio:siprec-recording-server 'a=fmtp:101 0-15\r\n' +
drachtio:siprec-recording-server 'a=sendonly\r\n' +
drachtio:siprec-recording-server 'a=rtcp:10019\r\n' +
drachtio:siprec-recording-server 'a=ptime:20\r\n',
drachtio:siprec-recording-server sdp2: 'v=0\r\n' +
drachtio:siprec-recording-server 'o=- 7382601495339934508 7382601495339934508 IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 's=rtpengine-10-5-3-5-1\r\n' +
drachtio:siprec-recording-server 't=0 0\r\n' +
drachtio:siprec-recording-server 'm=audio 10034 RTP/AVP 8 101\r\n' +
drachtio:siprec-recording-server 'c=IN IP4 10.x.x.112\r\n' +
drachtio:siprec-recording-server 'a=label:0\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:8 PCMA/8000\r\n' +
drachtio:siprec-recording-server 'a=rtpmap:101 telephone-event/8000\r\n' +
drachtio:siprec-recording-server 'a=fmtp:101 0-15\r\n' +
drachtio:siprec-recording-server 'a=sendonly\r\n' +
drachtio:siprec-recording-server 'a=rtcp:10035\r\n' +
drachtio:siprec-recording-server 'a=ptime:20\r\n',
drachtio:siprec-recording-server caller: {},
drachtio:siprec-recording-server callee: {}
drachtio:siprec-recording-server } payload parser results +0ms
{"level":50,"time":1718895858170,"msg":"Error connecting incoming SIPREC call to freeswitch","pid":109891,"hostname":"SIPINTERFACE01-1","callid":"B2B.92.5795484.1718895857.1242373537","type":"Error","stack":"TypeError: Cannot read properties of undefined (reading 'forEach')\n at /usr/src/drachtio-siprec-recording-server/lib/payload-parser.js:116:29\n at Parser. (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:304:18)\n at Parser.emit (node:events:517:28)\n at SAXParser.onclosetag (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:262:26)\n at emit (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:631:35)\n at emitNode (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:636:5)\n at closeTag (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:896:7)\n at SAXParser.write (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:1460:13)\n at exports.Parser.Parser.parseString (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:323:31)\n at Parser.parseString (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:5:59)","v":1}
/usr/src/drachtio-siprec-recording-server/lib/payload-parser.js:116
obj[${prefix}stream].forEach((s) => {
^

TypeError: Cannot read properties of undefined (reading 'forEach')
at /usr/src/drachtio-siprec-recording-server/lib/payload-parser.js:116:29
at Parser. (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:304:18)
at Parser.emit (node:events:517:28)
at SAXParser.onclosetag (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:262:26)
at emit (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:631:35)
at emitNode (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:636:5)
at closeTag (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:896:7)
at SAXParser.write (/usr/src/drachtio-siprec-recording-server/node_modules/sax/lib/sax.js:1460:13)
at exports.Parser.Parser.parseString (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:323:31)
at Parser.parseString (/usr/src/drachtio-siprec-recording-server/node_modules/xml2js/lib/parser.js:5:59)

Node.js v18.19.0

error connecting to rtpengine

Hi Dave,

I have a feature request. I've noticed that sometimes when RTPEngine is busy and unable to respond to the connection request - the application crashes with an error "error connecting to rtpengine"

Is it possible to add a code that will try to connect to a different RTPEngine server from config or will try to connect to the same RTPEngine server a few more times?

Thanks,

Alex

get access to audio stream

Hello,
I have request to implement siprec server which will stream Audio to external endpoint (MS, Google) for STT (Speech to text) .
Can you please point me where in server code I can get access to media stream ?
Thanks

Multiple rtpengine servers

Hello Dave,

Is it supported to have multiple rtpengine instances?

From the code I assume that currently it's not supported, but maybe you have this feature on your roadmap?

Thanks,

Alxe

Error connecting call: Error: expected multipart SIPREC body"

I see there is an issue opened already which is giving the same error, but I don't think it's for the same reason as I see there is a space after Content-Type:

Node version is v11.9.0

{"level":30,"time":1549309126729,"msg":"received SIPREC invite: sip:[email protected]:5060;transport=udp","pid":5740,"hostname":"fax","callid":"[email protected]","v":1}
{"level":50,"time":1549309126734,"msg":"Error connecting call: Error: expected multipart SIPREC body","pid":5740,"hostname":"fax","callid":"[email protected]","v":1}

invite.txt

can not use local freeswitch

I set up the drachtio-siprec app, the drachtio sip server and the freeswitch (FS) on the same machine. FS uses UDP 5080 and the drachtio server uses UDP 5060. When receiving a call the app complains: "can not send request to myself"

{"level":30,"time":1662675450965,"msg":"received SIPREC invite: sip:10.134.4.199:5060","pid":308169,"hostname":"ip-10-134-4-199","callid":"[email protected]","v":1} {"level":50,"time":1662675450983,"msg":"can not send request to myself Error connecting incoming SIPREC call to freeswitch","pid":308169,"hostname":"ip-10-134-4-199","callid":"[email protected]","v":1} (node:308169) UnhandledPromiseRejectionWarning: can not send request to myself
can they be on the same server ? what is the recommended set up?
Txs!

Error: Response#send: status is required and must be a valid sip response code

Hi,

It had been working fine for a while without any issues. Suddenly all calls to Drachtio are failing. The error is from the Drachtio siprec server as given below. The log snippet below contains the log messages from startup up to a call.

{"level":30,"time":1571957280234,"msg":"attempting inbound connection","pid":8,"hostname":"siprec-proxy-application-584cf8699b-hhs68","host":"10.252.1.9","port":9022,"secret":"cymru","v":1}
{"level":30,"time":1571957280327,"msg":"using freeswitch as the recorder","pid":8,"hostname":"siprec-proxy-application-584cf8699b-hhs68","0":"","v":1}
{"level":30,"time":1571957280927,"msg":"successfully connected to redis at redis:6379","pid":8,"hostname":"siprec-proxy-application-584cf8699b-hhs68","v":1}
{"level":30,"time":1571957280934,"msg":"inbound connection to drachtio listening on tcp/34.82.88.194:5060,udp/34.82.88.194:5060","pid":8,"hostname":"siprec-proxy-application-584cf8699b-hhs68","v":1}

{"level":30,"time":1571961613618,"msg":"received SIPREC invite: sip:[email protected]:5060","pid":8,"hostname":"siprec-proxy-application-584cf8699b-hhs68","callid":"[email protected]","v":1}
(node:8) UnhandledPromiseRejectionWarning: Error: Response#send: status is required and must be a valid sip response code
at Response.send (/usr/src/app/node_modules/drachtio-srf/lib/response.js:80:13)
at createUAC.then.catch (/usr/src/app/node_modules/drachtio-srf/lib/srf.js:797:37)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:8) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:8) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

I appreciate any help to troubleshoot or fix the issue.

Thanks!

Truncated UDP message

Hello,

We are facing an issue trying to integrate SIPREC recording server with BroadWorks SBC with truncated UDP message(SIP INVITE with large message body).

This is how it looks in Wireshark:
Selection_042

Drachtio log(IP addresses hidden):

2021-09-07 07:36:14.784517 tport.c:2777 tport_wakeup_pri() tport_wakeup_pri(0x55ead080f0f0): events IN
2021-09-07 07:36:14.784625 tport.c:2892 tport_recv_event() tport_recv_event(0x55ead080f0f0)
2021-09-07 07:36:14.784665 tport.c:3233 tport_recv_iovec() tport_recv_iovec(0x55ead080f0f0) msg 0x55ead081a8e0 from (udp/DRACHTIO:15060) has 3714 bytes, veclen = 1
2021-09-07 07:36:14.784843 recv 1003 bytes from udp/[BW_SBC]:5060 at 07:36:14.784706:
INVITE sip:DRACHTIO:15060 SIP/2.0
Via: SIP/2.0/UDP BW_SBC:5060;branch=z9hG4bKn2plec301op06ks5q6g1.1
From: <sip:[email protected];user=phone>;tag=ygeCIg
To: <sip:sip.vvn.telekom.sk:15060;transport=udp;user=phone>
Call-ID: swYuBcswZ68SL6TWz8RJPQ
CSeq: 404439 INVITE
Max-Forwards: 68
Contact: <sip:+42191215@BW_SBC:5060;transport=udp>;src
Recv-Info: 
Accept: application/media_control+xml, application/sdp
MIME-Version: 1.0
Content-Type: multipart/mixed;boundary=UniqueBroadWorksBoundary
Content-Length: 449


--UniqueBroadWorksBoundary
Content-Type:application/rs-metadata+xml
Content-Disposition:recording-session
Content-Length:2493

<?xml version="1.0" encoding="UTF-8"?>
<recording_metadata xmlns="urn:ietf:params:xml:ns:siprec">
<dataMode>complete</dataMode>
<recording id="urn:uuid:e9755e57-aaf0-40fe-b3e3-9b54cfbfacc3">
<requestor>SRC</requestor>
<type>selective</type>
</recording>
<group id="urn:uuid:eb76d96b 
2021-09-07 07:36:14.784896 tport.c:3051 tport_deliver() tport_deliver(0x55ead080f0f0): msg 0x55ead081a8e0 (1003 bytes) from udp/BW_SBC:15060 next=(nil)
2021-09-07 07:36:14.784917 nta.c:3039 agent_recv_request() nta: received INVITE sip:SIPREC-Jtendo:15060 SIP/2.0 (CSeq 404439)
2021-09-07 07:36:14.784949 nta.c:3254 agent_recv_request() nta: INVITE (404439) to message callback
2021-09-07 07:36:14.784966 processMessageStatelessly - incoming message with call-id swYuBcswZ68SL6TWz8RJPQ does not match an existing call leg, processed in thread 140125602142016
2021-09-07 07:36:14.785014 tport.c:3285 tport_tsend() tport_tsend(0x55ead080f0f0) tpn = UDP/195.146.137.250:5060
2021-09-07 07:36:14.785051 tport.c:4085 tport_resolve() tport_resolve addrinfo = BW_SBC:5060
2021-09-07 07:36:14.785129 tport.c:3531 tport_send_msg() tport_vsend returned 307
2021-09-07 07:36:14.785178 send 307 bytes to udp/[BW_SBC]:5060 at 07:36:14.785081:
SIP/2.0 100 Trying

Important thing to highlight are these two lines:
2021-09-07 07:36:14.784665 tport.c:3233 tport_recv_iovec() tport_recv_iovec(0x55ead080f0f0) msg 0x55ead081a8e0 from (udp/DRACHTIO:15060) has 3714 bytes, veclen = 1
2021-09-07 07:36:14.784843 recv 1003 bytes from udp/[BW_SBC]:5060 at 07:36:14.784706:

I analysed previous issues with similar problem and the byte values in both lines like above are the same - this is not the case here. Have you faced such an issue before? Do you have any idea what might be causing it? More details below.

  1. udp-mtu is set to 4096(higher than message size which is 3714 bytes(we tried with even 10x higher values - no change, anyway going by configuration description isn't it used only for outgoing messages?)
2021-09-07 07:33:27.424308 SipTransport::logTransports - udp/[::1]:15060 (sip:*:15060, external-ip: , loca
l-net: ), mtu size: 4096
  1. We tried temporarily switching to TCP protocol(it is not feasibly as a final solution anyway as something between our server and BW_SBC does not support it, just for the testing purpose) but the issue is still the same
  2. We noticed that the value in recv log(second line from the two) is always few bytes more than 1000 bytes - not sure if that indicates anything.
  3. MTU for network interface responsible for receiving the message is set to default 1500(as seen in trace image when message gets fragmented)
  4. Below is complete INVITE, taken by Follow UDP Stream option
INVITE sip:DRACHTIO:15060 SIP/2.0
Via: SIP/2.0/UDP BW_SBC:5060;branch=z9hG4bKn2plec301op06ks5q6g1.1
From: <sip:[email protected];user=phone>;tag=ygeCIg
To: <sip:sip.vvn.telekom.sk:15060;transport=udp;user=phone>
Call-ID: swYuBcswZ68SL6TWz8RJPQ
CSeq: 404439 INVITE
Max-Forwards: 68
Contact: <sip:+42191215@BW_SBC:5060;transport=udp>;src
Recv-Info: 
Accept: application/media_control+xml, application/sdp
MIME-Version: 1.0
Content-Type: multipart/mixed;boundary=UniqueBroadWorksBoundary
Content-Length: 449


--UniqueBroadWorksBoundary
Content-Type:application/rs-metadata+xml
Content-Disposition:recording-session
Content-Length:2493

<?xml version="1.0" encoding="UTF-8"?>
<recording_metadata xmlns="urn:ietf:params:xml:ns:siprec">
    <dataMode>complete</dataMode>
    <recording id="urn:uuid:e9755e57-aaf0-40fe-b3e3-9b54cfbfacc3">
        <requestor>SRC</requestor>
        <type>selective</type>
    </recording>
    <group id="urn:uuid:eb76d96b-3c33-48d2-b552-f2c2175e09e3" recording="urn:uuid:e9755e57-aaf0-40fe-b3e3-9b54cfbfacc3">
        <initiator>sip:+42191215@A_IP;user=phone</initiator>
    </group>
    <session id="urn:uuid:3e22dcc3-b01e-4c09-8fc8-8f49c0d43cac" group="urn:uuid:eb76d96b-3c33-48d2-b552-f2c2175e09e3">
        <start-time>2021-09-07T09:36:14+02:00</start-time>
    </session>
    <participant id="urn:uuid:3e954e94-e1e4-4699-b85b-cdad3f810ce6" session="urn:uuid:3e22dcc3-b01e-4c09-8fc8-8f49c0d43cac">
        <aor>sip:+42191215@A_IP;user=phone</aor>
        <send>
            <id>urn:uuid:c48fc5cd-d40e-4bac-a76c-661d53a59250</id>
        </send>
    </participant>
    <participant id="urn:uuid:a13113cb-9eb3-48d8-bf74-1df3bf7837bc" session="urn:uuid:3e22dcc3-b01e-4c09-8fc8-8f49c0d43cac">
        <aor>sip:+48511325595@B_IP;user=phone</aor>
        <send>
            <id>urn:uuid:f12c1e7c-cf4a-4ebb-8a96-caf32951c5ea</id>
        </send>
    </participant>
    <stream id="urn:uuid:c48fc5cd-d40e-4bac-a76c-661d53a59250" session="urn:uuid:3e22dcc3-b01e-4c09-8fc8-8f49c0d43cac">
        <label>1</label>
        <mode>separate</mode>
    </stream>
    <stream id="urn:uuid:f12c1e7c-cf4a-4ebb-8a96-caf32951c5ea" session="urn:uuid:3e22dcc3-b01e-4c09-8fc8-8f49c0d43cac">
        <label>2</label>
        <mode>separate</mode>
    </stream>
    <extensiondata id="urn:uuid:a469d484-56b8-43ec-b49e-d6339fc122a4" parent="urn:uuid:3e22dcc3-b01e-4c09-8fc8-8f49c0d43cac">
        <broadWorksRecordingMetadata version="1.0" xmlns="http://schema.broadsoft.com/broadworksCallRecording">
    <extTrackingID>8e71e709-9795-49cd-adf4-2e3f5696f485</extTrackingID>
    <serviceProviderID>JTENDOXXE1</serviceProviderID>
    <groupID>JTENDOE1G1_grp</groupID>
    <userID>42191215</userID>
    <callID>zaxLnjq6iRWVp3gWirrN_g</callID>
    <callType>
        <origCall>
            <callingPartyNumber>sip:+42191215@A_IP;user=phone</callingPartyNumber>
            <calledPartyNumber>sip:+48511325595@B_IP;user=phone</calledPartyNumber>
        </origCall>
    </callType>
    <recordingType>on</recordingType>
</broadWorksRecordingMetadata>
    </extensiondata>
</recording_metadata>

--UniqueBroadWorksBoundary
Content-Type: application/sdp
Content-Length: 417

v=0
o=- 426088 426088 IN IP4 BW_SBC
s=media server session
b=AS:80
t=0 0
m=audio 23696 RTP/AVP 8
c=IN IP4 BW_SBC
b=AS:80
b=RR:6000
b=RS:2000
a=rtpmap:8 PCMA/8000
a=rtcp-xr
a=ptime:20
a=maxptime:80
a=sendonly
a=label:1
m=audio 21080 RTP/AVP 8
c=IN IP4 BW_SBC
b=AS:80
b=RR:6000
b=RS:2000
a=rtpmap:8 PCMA/8000
a=rtcp-xr
a=ptime:20
a=maxptime:80
a=sendonly
a=label:2

--UniqueBroadWorksBoundary--

Version used:
OS: Debian GNU/Linux 9 (stretch)
Drachtio: v0.8.8

Failure in negotiation with RTP Engine

My recording server fails to negotiate with RTP engine:

NGREP from RTP engine:

interface: eth0 (157.245.128.0/255.255.240.0)
filter: ( port 2223 ) and ((ip || ip6) || (vlan && (ip || ip6)))

U 167.99.248.68:57002 -> 157.245.136.128:2223
9c6c291f-bd1c-49fd-941d-2cf485de8a4a d3:ICE6:remove7:call-id25:B2B.64.8009998.15693997447:command5:offer8:from-tag37:61a826a6ff880a19c31acdfc1fc2d111-ce2111:record call3:yes7:replacel6:origin18:session-connectione3:sdp174:v=0.
o=- 1569399744 0 IN IP4 0.0.0.0.
s=-.
c=IN IP4 127.0.0.1.
t=0 0.
m=audio 35012 RTP/AVP 0 101.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-15.
a=label:1.
a=sendonly.
e

U 157.245.136.128:2223 -> 167.99.248.68:57002
9c6c291f-bd1c-49fd-941d-2cf485de8a4a d10:recordingsle6:result5:error12:error-reason19:Error rewriting SDPe

On the drechtio server I get a timeout for SIP REC

T 172.17.0.2:9022 -> 172.17.0.1:40722 [AP]
517#a68f8408-8e2c-4b40-8239-ae6ca7001fa4|sip|network|375|udp|167.99.248.68|5060|08:29:32.403739|05e9f1ed-f75b-4895-a3e5-fd84b795e704|.
CANCEL sip:172.17.0.2:5060 SIP/2.0.
Via: SIP/2.0/UDP 167.99.248.68:5060;branch=z9hG4bK94f6.825bc433.0;rport=5060.
From: sip:172.17.0.2:5060;tag=61a826a6ff880a19c31acdfc1fc2d111-ce21.
Call-ID: B2B.64.6780361.1569400142.
To: sip:172.17.0.2:5060.
CSeq: 2 CANCEL.
Max-Forwards: 70.
Reason: SIP;cause=480;text="NO_ANSWER".
User-Agent: OpenSIPS (3.0.0 (x86_64/linux)).
Content-Length: 0.
.

Output from the recording server:

{"level":30,"time":1569399924140,"msg":"attempting inbound connection","pid":20377,"hostname":"opensips","host":"172.17.0.2","port":9022,"secret":"cymru","v":1}
{"level":30,"time":1569399924149,"msg":"using rtpengine as the recorder","pid":20377,"hostname":"opensips","remote":{"host":"157.245.136.128","port":2223},"v":1}
{"level":30,"time":1569399924234,"msg":"inbound connection to drachtio listening on tcp/172.17.0.2:5060,udp/172.17.0.2:5060","pid":20377,"hostname":"opensips","v":1}
{"level":30,"time":1569400142303,"msg":"received SIPREC invite: sip:172.17.0.2:5060","pid":20377,"hostname":"opensips","callid":"B2B.64.6780361.1569400142","v":1}
{"level":50,"time":1569400142489,"msg":"Error connecting call: Error: error connecting to rtpengine","pid":20377,"hostname":"opensips","callid":"B2B.64.6780361.1569400142","v":1}

Attaching: pcap, recording server config, opensips config

log.pcap.log

opensips.cfg.log

local.json.log

Possible to add TTL on keys into Redis

Hi,
I use your dev with freeswitch mode.
I want to add TTL to delete redis keys or delete it when I receive BYE.
But add TTL is simplest than delete key with BYE no ?

I'm not sure, but I think the redis data is used before the SIPREC 200OK generation. After that, I can delete key into redis....

thanks in advance

ORACLE SBC + Drachtio + rtpengine - No connected clients found to handle incoming invite request

Hi Dave and thanks for this unique repo.

I am having this error above in title where my call is not being recorded and hope you can help.

this is complete log:

INVITE sip:10.116.28.171:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.50.140:5060;branch=z9hG4bKc835p1201oejvmt2e4i0
Max-Forwards: 70
Call-ID: [email protected]
To: sip:10.116.28.171:5060;transport=udp
Contact: sip:[email protected]:5060;transport=udp;+sip.src
From: sip:[email protected]:5060;tag=817c6996f978f421a0ca64181959e0c5
CSeq: 100021 INVITE
Require: siprec
Content-Type: multipart/mixed; boundary=unique-boundary-1
Content-Length: 1873
MIME-Version: 1.0

--unique-boundary-1
Content-Type: application/sdp

v=0
o=- 1300 112633 IN IP4 192.168.50.140
s=-
c=IN IP4 192.168.50.140
t=0 0
m=audio 20026 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=label:16777219
a=sendonly
m=audio 20030 RTP/AVP 0
a=rtpmap:0 PCMU/8000
a=maxptime:150
a=label:16777220
a=sendonly

--unique-boundary-1
Content-Type: application/rs-metadata+xml
Content-Disposition: recording-session

complete 2019-03-09T11:37:23 9000 KgEqFsw3SW1H4oLaSgPqKA== 2019-03-09T11:37:23 true 1002 O8ImD6Y6SEVHzyLEDisAlw== 2019-03-09T11:37:23 false 16777219 separate 2019-03-09T11:37:23 16777220 separate 2019-03-09T11:37:34 --unique-boundary-1-- 2019-03-09 12:42:11.659057 nta.c:2968 agent_recv_request() nta: received INVITE sip:10.116.28.171:5060 SIP/2.0 (CSeq 100021) 2019-03-09 12:42:11.659106 nta.c:3183 agent_recv_request() nta: INVITE (100021) to message callback 2019-03-09 12:42:11.659127 processMessageStatelessly - incoming message with call-id [email protected] does not match an existing call leg, processed in thread 140133265098880 2019-03-09 12:42:11.659326 send 325 bytes to udp/[192.168.50.140]:5060 at 12:42:11.659262: SIP/2.0 100 Trying Via: SIP/2.0/UDP 192.168.50.140:5060;branch=z9hG4bKc835p1201oejvmt2e4i0;rport=5060 From: ;tag=817c6996f978f421a0ca64181959e0c5 To: Call-ID: [email protected] CSeq: 100021 INVITE Content-Length: 0

2019-03-09 12:42:11.659390 No connected clients found to handle incoming invite request
2019-03-09 12:42:11.659419 processNewRequest - No providers available for INVITE
2019-03-09 12:42:11.659552 send 356 bytes to udp/[192.168.50.140]:5060 at 12:42:11.659516:
SIP/2.0 503 Service Unavailable
Via: SIP/2.0/UDP 192.168.50.140:5060;branch=z9hG4bKc835p1201oejvmt2e4i0;rport=5060
From: sip:[email protected]:5060;tag=817c6996f978f421a0ca64181959e0c5
To: sip:10.116.28.171:5060;transport=udp;tag=ZSXH7a2t1jNNc
Call-ID: [email protected]
CSeq: 100021 INVITE
Content-Length: 0

2019-03-09 12:42:11.660644 recv 361 bytes from udp/[192.168.50.140]:5060 at 12:42:11.660602:
ACK sip:10.116.28.171:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.50.140:5060;branch=z9hG4bKc835p1201oejvmt2e4i0
CSeq: 100021 ACK
Max-Forwards: 70
Call-ID: [email protected]
To: sip:10.116.28.171:5060;transport=udp;tag=ZSXH7a2t1jNNc
From: sip:[email protected]:5060;tag=817c6996f978f421a0ca64181959e0c5
Content-Length: 0

2019-03-09 12:42:11.660687 nta.c:2968 agent_recv_request() nta: received ACK sip:10.116.28.171:5060 SIP/2.0 (CSeq 100021)
2019-03-09 12:42:11.660714 nta.c:3183 agent_recv_request() nta: ACK (100021) to message callback
2019-03-09 12:42:11.660734 processMessageStatelessly - incoming message with call-id [email protected] does not match an existing call leg, processed in thread 140133265098880


Thanks and regards,
I

SRC send invite with "a=sendonly" attribute but drachtio does not send back any attribute

Hi,

Everything was running well between SRC, drachtio and rtpengine and can get recording file. But we have question from our observation, we found that drachtio does not send any attribute back when SRC send invite with "sendonly" attribute.

Screen Shot 2022-11-24 at 13 50 48

Screen Shot 2022-11-24 at 13 50 59

If we manipulated SDP on SRC to send with "sendrecv" attribute, drachtio will send back with same attribute ("sendrecv").
Screen Shot 2022-11-24 at 14 07 49
Screen Shot 2022-11-24 at 14 08 00

We are still learning about drachtio behavior and as far as we know when SRC send invite with "sendonly" attribute it should get response with "recvonly" attribute?

I have also attached log file from drachtio server.
drachtio_siprec.log

Deployment on Amazon EC2/S3

Hello all,

Unsure where to ask. Want to deploy this with Opensips on an Amazon EC2 server, however, can't seem to find any instructions. Was thinking of saving the audio files on an S3 bucket and drachtio to pull from S3 - does that work? Also - is there a Web UI that we can use to retrieve the files?

Thanks.

Support for SRTP with rtpengine

I am using drachtio-server, this repo with RTPEngine. Siprec is working fine for me and the recording files are getting generated. I need to support SRTP with the existing setup. I know the configuration of certs at drachtio-server but not sure what configuration I need to do at rtpengine. Need help to make SRTP working.

No SDP in 200 OK to Freeswitch

Hi Dave,

We see that Drachtio SIP server is sending 200 Ok response with no SDP to Freeswitch. It was working fine. Could you please check the logs and help us. I have also attached a file with logs from both Drachtio server and the siprec-recording-server application.

{"level":30,"time":1586545088962,"msg":"received SIPREC invite: sip:[email protected]:5060","pid":8,"hostname":"siprec-proxy-application-5dfbfd9686-d6v9m","callid":"[email protected]","v":1}
{"level":50,"time":1586545089241,"msg":"Error connecting incoming SIPREC call to freeswitch","pid":8,"hostname":"siprec-proxy-application-5dfbfd9686-d6v9m","callid":"[email protected]","type":"Error","stack":"SipError: Sip non-success response: 500\n at Request.req.on (/usr/src/app/node_modules/drachtio-srf/lib/srf.js:433:27)\n at Request.emit (events.js:198:13)\n at DrachtioAgent._onMsg (/usr/src/app/node_modules/drachtio-srf/lib/drachtio-agent.js:655:22)\n at WireProtocol.emit (events.js:198:13)\n at WireProtocol.processMessageBuffer (/usr/src/app/node_modules/drachtio-srf/lib/wire-protocol.js:226:12)\n at WireProtocol._onData (/usr/src/app/node_modules/drachtio-srf/lib/wire-protocol.js:260:14)\n at Socket.emit (events.js:198:13)\n at addChunk (_stream_readable.js:288:12)\n at readableAddChunk (_stream_readable.js:265:13)\n at Socket.Readable.push (_stream_readable.js:224:10)","name":"SipError","status":500,"reason":"Internal Server Error","res":{"msg":{"headers":{"via":"SIP/2.0/UDP 34.67.229.53;rport=5060;branch=z9hG4bKF9KF9DQe3X40H","max-forwards":"70","from":"sip:[email protected]:5060;tag=vF3ZF1FUcteep","to":"sip:[email protected];tag=e33aaa087H7eQ","call-id":"0f60a48c-f600-1238-4699-4201c0a80103","cseq":"18718752 INVITE","user-agent":"FreeSWITCH-mod_sofia/1.6.1464bit","accept":"application/sdp","allow":"INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY","supported":"timer, path, replaces","allow-events":"talk, hold, conference, refer","reason":"Q.850;cause=41;text="NORMAL_TEMPORARY_FAILURE"","content-length":"0","remote-party-id":""3661" sip:[email protected];party=calling;privacy=off;screen=no"},"body":"","payload":[{"content":""}],"version":"2.0","status":500,"reason":"Internal Server Error","raw":"SIP/2.0 500 Internal Server Error\r\nVia: SIP/2.0/UDP 34.67.229.53;rport=5060;branch=z9hG4bKF9KF9DQe3X40H\r\nMax-Forwards: 70\r\nFrom: sip:[email protected]:5060;tag=vF3ZF1FUcteep\r\nTo: sip:[email protected];tag=e33aaa087H7eQ\r\nCall-ID: 0f60a48c-f600-1238-4699-4201c0a80103\r\nCSeq: 18718752 INVITE\r\nUser-Agent: FreeSWITCH-mod_sofia/1.6.1464bit\r\nAccept: application/sdp\r\nAllow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY\r\nSupported: timer, path, replaces\r\nAllow-Events: talk, hold, conference, refer\r\nReason: Q.850;cause=41;text="NORMAL_TEMPORARY_FAILURE"\r\nContent-Length: 0\r\nRemote-Party-ID: "3661" sip:[email protected];party=calling;privacy=off;screen=no\r\n\r\n"},"source":"network","source_address":"104.154.187.248","source_port":5060,"protocol":"udp","stackTime":"18:58:09.239034","stackDialogId":"0f60a48c-f600-1238-4699-4201c0a80103;from-tag=vF3ZF1FUcteep","stackTxnId":"c6e8b431-e594-4abc-95ad-993b9e4be80c"},"v":1}
(node:8) UnhandledPromiseRejectionWarning: SipError: Sip non-success response: 500
at Request.req.on (/usr/src/app/node_modules/drachtio-srf/lib/srf.js:433:27)
at Request.emit (events.js:198:13)
at DrachtioAgent._onMsg (/usr/src/app/node_modules/drachtio-srf/lib/drachtio-agent.js:655:22)
at WireProtocol.emit (events.js:198:13)
at WireProtocol.processMessageBuffer (/usr/src/app/node_modules/drachtio-srf/lib/wire-protocol.js:226:12)
at WireProtocol._onData (/usr/src/app/node_modules/drachtio-srf/lib/wire-protocol.js:260:14)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:265:13)
at Socket.Readable.push (_stream_readable.js:224:10)
(node:8) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:8) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

drachtio_siprec_call_failure_200_no_sdp_test2.txt

How to achieve real time streaming/processing of RTP Packets

Hello, I am very new to audio processing. I followed the project guide, and now I have Drachtio + RTPengine running on Docker and the node app running in my system. SBCs are configured to send traffic through and I am able to see call recording as PCAP inside the Docker container.
My question is after RTPengine allocates the Endpoints, I can parse the SDP to get the media ports for both caller and callee. I tried to pass that to ffmpeg to generate .wav files, but got Invalid Input error.
What can be done to have Real Time processing of the RTP streams?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.