Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the *rtpengine_offer* or *start_recording* is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
* if ($hu =~ "^/CALL_RECORD_START/") {* * $var(call_id) = *"call-id=" + *$(hu{s.select,2,/});* xlog("L_DBG", "$var(call_id)"); * start_recording($var(call_id));* exit; * }*
In this case, Kamailio will log errors and will not send the Rtpengine command to start call recording.
*Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0* *Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found* *Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field*
Have anyone tried to call functions *start_recording* and *stop_recording* inside *event_route[xhttp:request]*?
Thanks a lot!
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the /rtpengine_offer/ or /start_recording/ is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
/ if ($hu =~ "^/CALL_RECORD_START/") {/ / $var(call_id) = /"call-id=" + /$(hu{s.select,2,/});/ xlog("L_DBG", "$var(call_id)"); / start_recording($var(call_id));/ //exit; / }/
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client
Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example.
Cheers
Hello Richard,
Thank you very much for the suggestion! I will give it a try.
ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs rfuchs@sipwise.com пише:
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the *rtpengine_offer* or *start_recording* is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
- if ($hu =~ "^/CALL_RECORD_START/") {*
- $var(call_id) = *"call-id=" + *$(hu{s.select,2,/});* xlog("L_DBG", "$var(call_id)");
- start_recording($var(call_id));* exit;
- }*
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client
Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example.
Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
Hello,
related to the initial config snippet example, the call-id is expected to be provide as a named flag, like:
start_recording("call-id=$var(call_id)");
See the readme of the rtpengine module for more details.
Cheers, Daniel
On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard,
Thank you very much for the suggestion! I will give it a try.
ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs <rfuchs@sipwise.com mailto:rfuchs@sipwise.com> пише:
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello! I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the /rtpengine_offer/ or /start_recording/ is used in the *request_route*. But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request. / if ($hu =~ "^/CALL_RECORD_START/") {/ / $var(call_id) = /"call-id=" + /$(hu{s.select,2,/});/ xlog("L_DBG", "$var(call_id)"); / start_recording($var(call_id));/ / /exit; / }/
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client <https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client> There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client <https://github.com/davehorton/rtpengine-client> Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example. Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
Hello Daniel,
That is correct. My *$var(call_id)* variable contains concatenation of the "call-id=" string and a Call-Id value.
*Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0*
Thank you!
чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla miconda@gmail.com пише:
Hello,
related to the initial config snippet example, the call-id is expected to be provide as a named flag, like:
start_recording("call-id=$var(call_id)");
See the readme of the rtpengine module for more details.
Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard,
Thank you very much for the suggestion! I will give it a try.
ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs rfuchs@sipwise.com пише:
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the *rtpengine_offer* or *start_recording* is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
- if ($hu =~ "^/CALL_RECORD_START/") {*
- $var(call_id) = *"call-id=" + *$(hu{s.select,2,/});* xlog("L_DBG", "$var(call_id)");
- start_recording($var(call_id));* exit;
- }*
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client
Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example.
Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
-- Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages.
Cheers, Daniel
On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel,
That is correct. My /$var(call_id)/ variable contains concatenation of the "call-id=" string and a Call-Id value.
/Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0/
Thank you!
чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> пише:
Hello, related to the initial config snippet example, the call-id is expected to be provide as a named flag, like: start_recording("call-id=$var(call_id)"); See the readme of the rtpengine module for more details. Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard, Thank you very much for the suggestion! I will give it a try. ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs <rfuchs@sipwise.com <mailto:rfuchs@sipwise.com>> пише: On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello! I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the /rtpengine_offer/ or /start_recording/ is used in the *request_route*. But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request. / if ($hu =~ "^/CALL_RECORD_START/") {/ / $var(call_id) = /"call-id=" + /$(hu{s.select,2,/});/ xlog("L_DBG", "$var(call_id)"); / start_recording($var(call_id));/ / /exit; / }/
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client <https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client> There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client <https://github.com/davehorton/rtpengine-client> Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example. Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users> __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6.
Rtpengine logs offers, answers and deletes but there is nothing when I trigger *start_recording* with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the *start_recording* function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request - call-id: [] - cseq: []".
I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording:
*/usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127... http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1" -H "To: sip:200-test@127.0.0.1:5060 http://sip:200-test@127.0.0.1:5060" -H "From: <sip:2564286000@127.0.0.1:5080 http://sip:2564286000@127.0.0.1:5080>;tag=as7a92114c"*
It also looks like rtpengine module does not care about actual header values. Function *start_recording* called with Call-Id value is enough to start call recording even if all headers contain random invalid values:
* /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127... http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 http://sip:456@127.0.0.1:5060" -H "From: <sip:123@127.0.0.1:5080 http://sip:123@127.0.0.1:5080>;tag=1"*
*Thank you very much for your help!*
*Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 http://127.0.0.1:8088], 0x7f943ba04ac0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending...* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0*
чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla miconda@gmail.com пише:
Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages.
Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel,
That is correct. My *$var(call_id)* variable contains concatenation of the "call-id=" string and a Call-Id value.
*Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>*
Thank you!
чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla miconda@gmail.com пише:
Hello,
related to the initial config snippet example, the call-id is expected to be provide as a named flag, like:
start_recording("call-id=$var(call_id)");
See the readme of the rtpengine module for more details.
Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard,
Thank you very much for the suggestion! I will give it a try.
ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs rfuchs@sipwise.com пише:
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the *rtpengine_offer* or *start_recording* is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
- if ($hu =~ "^/CALL_RECORD_START/") {*
- $var(call_id) = *"call-id=" + *$(hu{s.select,2,/});* xlog("L_DBG", "$var(call_id)");
- start_recording($var(call_id));* exit;
- }*
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client
Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example.
Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
-- Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
--
Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
I looked in the code and indeed it first takes the values from headers for Call-Id, To (tag), From (tag), failing if the headers are not found, but then it updates the values from the flags parameter. So the call-id can be anything in the headers if you provide it as "call-id=xyz" parameter.
Maybe the code should be reworked a bit to parse first the flags parameters and if values are not found for the sip attributes, then try to get them from headers.
Cheers, Daniel
On 29.04.21 15:39, Володимир Іванець wrote:
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6.
Rtpengine logs offers, answers and deletes but there is nothing when I trigger /start_recording/ with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the /start_recording/ function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request
- call-id: [] - cseq: []".
I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording:
//usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1" -H "To: sip:200-test@127.0.0.1:5060 <http://sip:200-test@127.0.0.1:5060>" -H "From: <sip:2564286000@127.0.0.1:5080 <http://sip:2564286000@127.0.0.1:5080>>;tag=as7a92114c"/
It also looks like rtpengine module does not care about actual header values. Function /start_recording/ called with Call-Id value is enough to start call recording even if all headers contain random invalid values:
/ /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0>" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 <http://sip:456@127.0.0.1:5060>" -H "From: <sip:123@127.0.0.1:5080 <http://sip:123@127.0.0.1:5080>>;tag=1"/
*Thank you very much for your help!*
/Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 <http://127.0.0.1:8088>], 0x7f943ba04ac0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending.../ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0/
чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> пише:
Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages. Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel, That is correct. My /$var(call_id)/ variable contains concatenation of the "call-id=" string and a Call-Id value. /Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <mailto:call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>/ Thank you! чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: Hello, related to the initial config snippet example, the call-id is expected to be provide as a named flag, like: start_recording("call-id=$var(call_id)"); See the readme of the rtpengine module for more details. Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard, Thank you very much for the suggestion! I will give it a try. ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs <rfuchs@sipwise.com <mailto:rfuchs@sipwise.com>> пише: On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello! I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the /rtpengine_offer/ or /start_recording/ is used in the *request_route*. But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request. / if ($hu =~ "^/CALL_RECORD_START/") {/ / $var(call_id) = /"call-id=" + /$(hu{s.select,2,/});/ xlog("L_DBG", "$var(call_id)"); / start_recording($var(call_id));/ / /exit; / }/
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client <https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client> There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client <https://github.com/davehorton/rtpengine-client> Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example. Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users> __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
I pushed a commit to master branch that should make it work to use the function for non-SIP message processing, by giving call-id=... and from-tag=... via flags parameter -- these two attributes seemed to be used by expecting to be set, even if the rtpengine application may ignore one of them.
If you have a chance to test, let me know the result.
Cheers, Daniel
On 29.04.21 16:38, Daniel-Constantin Mierla wrote:
I looked in the code and indeed it first takes the values from headers for Call-Id, To (tag), From (tag), failing if the headers are not found, but then it updates the values from the flags parameter. So the call-id can be anything in the headers if you provide it as "call-id=xyz" parameter.
Maybe the code should be reworked a bit to parse first the flags parameters and if values are not found for the sip attributes, then try to get them from headers.
Cheers, Daniel
On 29.04.21 15:39, Володимир Іванець wrote:
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6.
Rtpengine logs offers, answers and deletes but there is nothing when I trigger /start_recording/ with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the /start_recording/ function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request - call-id: [] - cseq: []".
I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording:
//usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1" -H "To: sip:200-test@127.0.0.1:5060 <http://sip:200-test@127.0.0.1:5060>" -H "From: <sip:2564286000@127.0.0.1:5080 <http://sip:2564286000@127.0.0.1:5080>>;tag=as7a92114c"/
It also looks like rtpengine module does not care about actual header values. Function /start_recording/ called with Call-Id value is enough to start call recording even if all headers contain random invalid values:
/ /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0>" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 <http://sip:456@127.0.0.1:5060>" -H "From: <sip:123@127.0.0.1:5080 <http://sip:123@127.0.0.1:5080>>;tag=1"/
*Thank you very much for your help!*
/Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 <http://127.0.0.1:8088>], 0x7f943ba04ac0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending.../ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0/
чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> пише:
Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages. Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel, That is correct. My /$var(call_id)/ variable contains concatenation of the "call-id=" string and a Call-Id value. /Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <mailto:call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>/ Thank you! чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: Hello, related to the initial config snippet example, the call-id is expected to be provide as a named flag, like: start_recording("call-id=$var(call_id)"); See the readme of the rtpengine module for more details. Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard, Thank you very much for the suggestion! I will give it a try. ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs <rfuchs@sipwise.com <mailto:rfuchs@sipwise.com>> пише: On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello! I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the /rtpengine_offer/ or /start_recording/ is used in the *request_route*. But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request. / if ($hu =~ "^/CALL_RECORD_START/") {/ / $var(call_id) = /"call-id=" + /$(hu{s.select,2,/});/ xlog("L_DBG", "$var(call_id)"); / start_recording($var(call_id));/ / /exit; / }/
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client <https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client> There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client <https://github.com/davehorton/rtpengine-client> Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example. Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users> __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com www.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
Hello Daniel,
Sorry, I was out of the office and could make a test only now. As you told, the HTTP request is now processed differently. Unfortunately, I can no longer start call recording. I tried the following options and got the "rtpp_function_call(): can't get From tag" error message each time.
1. /usr/bin/curl -H "Content-Type: text" " http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127... " 2. /usr/bin/curl -H "Content-Type: text" " http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127..." -H "From: sip:123@127.0.0.1:5080;tag=1" 3. /usr/bin/curl -H "Content-Type: text" " http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127..." -H "Call-Id: 249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0" -H "To: sip:456@127.0.0.1:5060" -H "From: sip:123@127.0.0.1:5080;tag=1"
*May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_fline.c:250]: parse_first_line(): first line type 1 (request) flags 2* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:677]: parse_msg(): SIP Request:* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:679]: parse_msg(): method: <GET>* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:681]: parse_msg(): uri: </CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:683]: parse_msg(): version: <HTTP/1.1>* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Via] type 1* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:555]: parse_headers(): Via found, flags=2* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:557]: parse_headers(): this is the first via* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: call-id=249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 1111111111* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: ERROR: rtpengine [rtpengine.c:2547]: rtpp_function_call(): can't get From tag* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: xhttp [xhttp_mod.c:420]: xhttp_send_reply(): sending out response: 200 OK* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Host] type 0* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [User-Agent] type 28* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Accept] type 23* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Content-Type] type 11* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:91]: get_hdr_field(): found end of header* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/msg_translator.c:162]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 5* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (19603 (27)), reusing fd* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending...* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f4ba719cd70 n=118 fd=10* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=*
Thank you!
пт, 30 квіт. 2021 о 17:53 Daniel-Constantin Mierla miconda@gmail.com пише:
I pushed a commit to master branch that should make it work to use the function for non-SIP message processing, by giving call-id=... and from-tag=... via flags parameter -- these two attributes seemed to be used by expecting to be set, even if the rtpengine application may ignore one of them.
If you have a chance to test, let me know the result.
Cheers, Daniel On 29.04.21 16:38, Daniel-Constantin Mierla wrote:
I looked in the code and indeed it first takes the values from headers for Call-Id, To (tag), From (tag), failing if the headers are not found, but then it updates the values from the flags parameter. So the call-id can be anything in the headers if you provide it as "call-id=xyz" parameter.
Maybe the code should be reworked a bit to parse first the flags parameters and if values are not found for the sip attributes, then try to get them from headers.
Cheers, Daniel On 29.04.21 15:39, Володимир Іванець wrote:
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6.
Rtpengine logs offers, answers and deletes but there is nothing when I trigger *start_recording* with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the *start_recording* function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request - call-id: [] - cseq: []".
I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording:
*/usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127... http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "To: sip:200-test@127.0.0.1:5060 http://sip:200-test@127.0.0.1:5060" -H "From: <sip:2564286000@127.0.0.1:5080 http://sip:2564286000@127.0.0.1:5080>;tag=as7a92114c"*
It also looks like rtpengine module does not care about actual header values. Function *start_recording* called with Call-Id value is enough to start call recording even if all headers contain random invalid values:
- /usr/bin/curl -H "Content-Type: text"
"http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127... http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 http://sip:456@127.0.0.1:5060" -H "From: <sip:123@127.0.0.1:5080 http://sip:123@127.0.0.1:5080>;tag=1"*
*Thank you very much for your help!*
*Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 http://127.0.0.1:8088], 0x7f943ba04ac0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0 <call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending...* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0*
чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla miconda@gmail.com пише:
Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages.
Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel,
That is correct. My *$var(call_id)* variable contains concatenation of the "call-id=" string and a Call-Id value.
*Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>*
Thank you!
чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla miconda@gmail.com пише:
Hello,
related to the initial config snippet example, the call-id is expected to be provide as a named flag, like:
start_recording("call-id=$var(call_id)");
See the readme of the rtpengine module for more details.
Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard,
Thank you very much for the suggestion! I will give it a try.
ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs rfuchs@sipwise.com пише:
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the *rtpengine_offer* or *start_recording* is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
- if ($hu =~ "^/CALL_RECORD_START/") {*
- $var(call_id) = *"call-id=" + *$(hu{s.select,2,/});* xlog("L_DBG", "$var(call_id)");
- start_recording($var(call_id));* exit;
- }*
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client
Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example.
Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
-- Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
--
Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
--
Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
-- Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
Hello,
do you pass "from-tag=xyz" to the start_recording() function?
Cheers, Daniel
On 05.05.21 13:51, Володимир Іванець wrote:
Hello Daniel,
Sorry, I was out of the office and could make a test only now. As you told, the HTTP request is now processed differently. Unfortunately, I can no longer start call recording. I tried the following options and got the "rtpp_function_call(): can't get From tag" error message each time.
/usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127... http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0"
/usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127... http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0" -H "From: <sip:123@127.0.0.1:5080 http://sip:123@127.0.0.1:5080>;tag=1"
/usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127... http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0" -H "Call-Id: 249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0" -H "To: sip:456@127.0.0.1:5060 http://sip:456@127.0.0.1:5060" -H "From: <sip:123@127.0.0.1:5080 http://sip:123@127.0.0.1:5080>;tag=1"
/May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_fline.c:250]: parse_first_line(): first line type 1 (request) flags 2/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:677]: parse_msg(): SIP Request:/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:679]: parse_msg(): method: <GET>/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:681]: parse_msg(): uri: </CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:683]: parse_msg(): version: <HTTP/1.1>/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Via] type 1/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:555]: parse_headers(): Via found, flags=2/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:557]: parse_headers(): this is the first via/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: call-id=249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 1111111111/ /*May 5 14:40:43 test /usr/sbin/kamailio[19603]: ERROR: rtpengine [rtpengine.c:2547]: rtpp_function_call(): can't get From tag*/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: xhttp [xhttp_mod.c:420]: xhttp_send_reply(): sending out response: 200 OK/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Host] type 0/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [User-Agent] type 28/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Accept] type 23/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Content-Type] type 11/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:91]: get_hdr_field(): found end of header/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/msg_translator.c:162]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 5/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (19603 (27)), reusing fd/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending.../ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f4ba719cd70 n=118 fd=10/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=/ / / / /
Thank you!
пт, 30 квіт. 2021 о 17:53 Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> пише:
I pushed a commit to master branch that should make it work to use the function for non-SIP message processing, by giving call-id=... and from-tag=... via flags parameter -- these two attributes seemed to be used by expecting to be set, even if the rtpengine application may ignore one of them. If you have a chance to test, let me know the result. Cheers, Daniel On 29.04.21 16:38, Daniel-Constantin Mierla wrote:
I looked in the code and indeed it first takes the values from headers for Call-Id, To (tag), From (tag), failing if the headers are not found, but then it updates the values from the flags parameter. So the call-id can be anything in the headers if you provide it as "call-id=xyz" parameter. Maybe the code should be reworked a bit to parse first the flags parameters and if values are not found for the sip attributes, then try to get them from headers. Cheers, Daniel On 29.04.21 15:39, Володимир Іванець wrote:
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6. Rtpengine logs offers, answers and deletes but there is nothing when I trigger /start_recording/ with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the /start_recording/ function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request - call-id: [] - cseq: []". I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording: //usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <mailto:38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "To: sip:200-test@127.0.0.1:5060 <http://sip:200-test@127.0.0.1:5060>" -H "From: <sip:2564286000@127.0.0.1:5080 <http://sip:2564286000@127.0.0.1:5080>>;tag=as7a92114c"/ It also looks like rtpengine module does not care about actual header values. Function /start_recording/ called with Call-Id value is enough to start call recording even if all headers contain random invalid values: / /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0>" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 <http://sip:456@127.0.0.1:5060>" -H "From: <sip:123@127.0.0.1:5080 <http://sip:123@127.0.0.1:5080>>;tag=1"/ *Thank you very much for your help!* /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 <http://127.0.0.1:8088>], 0x7f943ba04ac0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> <mailto:/CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> <mailto:/CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0 <mailto:call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending.../ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0/ чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages. Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel, That is correct. My /$var(call_id)/ variable contains concatenation of the "call-id=" string and a Call-Id value. /Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <mailto:call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>/ Thank you! чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: Hello, related to the initial config snippet example, the call-id is expected to be provide as a named flag, like: start_recording("call-id=$var(call_id)"); See the readme of the rtpengine module for more details. Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard, Thank you very much for the suggestion! I will give it a try. ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs <rfuchs@sipwise.com <mailto:rfuchs@sipwise.com>> пише: On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello! I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the /rtpengine_offer/ or /start_recording/ is used in the *request_route*. But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request. / if ($hu =~ "^/CALL_RECORD_START/") {/ / $var(call_id) = /"call-id=" + /$(hu{s.select,2,/});/ xlog("L_DBG", "$var(call_id)"); / start_recording($var(call_id));/ / /exit; / }/
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client <https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client> There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client <https://github.com/davehorton/rtpengine-client> Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example. Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users> __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
Hello,
I did not. I misunderstood your previous message. Now I called start_recording() and stop_recording() with *call-id* and *from-tag* flags and everything worked fine.
Thank you very much!
ср, 5 трав. 2021 о 16:46 Daniel-Constantin Mierla miconda@gmail.com пише:
Hello,
do you pass "from-tag=xyz" to the start_recording() function?
Cheers, Daniel On 05.05.21 13:51, Володимир Іванець wrote:
Hello Daniel,
Sorry, I was out of the office and could make a test only now. As you told, the HTTP request is now processed differently. Unfortunately, I can no longer start call recording. I tried the following options and got the "rtpp_function_call(): can't get From tag" error message each time.
- /usr/bin/curl -H "Content-Type: text" "
http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127... " 2. /usr/bin/curl -H "Content-Type: text" " http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127..." -H "From: sip:123@127.0.0.1:5080;tag=1" 3. /usr/bin/curl -H "Content-Type: text" " http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127..." -H "Call-Id: 249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0" -H "To: sip:456@127.0.0.1:5060" -H "From: sip:123@127.0.0.1:5080;tag=1"
*May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_fline.c:250]: parse_first_line(): first line type 1 (request) flags 2* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:677]: parse_msg(): SIP Request:* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:679]: parse_msg(): method: <GET>* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:681]: parse_msg(): uri: </CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0> </CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:683]: parse_msg(): version: <HTTP/1.1>* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Via] type 1* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:555]: parse_headers(): Via found, flags=2* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:557]: parse_headers(): this is the first via* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: call-id=249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 <call-id=249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0> 1111111111* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: ERROR: rtpengine [rtpengine.c:2547]: rtpp_function_call(): can't get From tag* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: xhttp [xhttp_mod.c:420]: xhttp_send_reply(): sending out response: 200 OK* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Host] type 0* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [User-Agent] type 28* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Accept] type 23* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Content-Type] type 11* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:91]: get_hdr_field(): found end of header* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/msg_translator.c:162]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 5* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (19603 (27)), reusing fd* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending...* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f4ba719cd70 n=118 fd=10* *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=*
Thank you!
пт, 30 квіт. 2021 о 17:53 Daniel-Constantin Mierla miconda@gmail.com пише:
I pushed a commit to master branch that should make it work to use the function for non-SIP message processing, by giving call-id=... and from-tag=... via flags parameter -- these two attributes seemed to be used by expecting to be set, even if the rtpengine application may ignore one of them.
If you have a chance to test, let me know the result.
Cheers, Daniel On 29.04.21 16:38, Daniel-Constantin Mierla wrote:
I looked in the code and indeed it first takes the values from headers for Call-Id, To (tag), From (tag), failing if the headers are not found, but then it updates the values from the flags parameter. So the call-id can be anything in the headers if you provide it as "call-id=xyz" parameter.
Maybe the code should be reworked a bit to parse first the flags parameters and if values are not found for the sip attributes, then try to get them from headers.
Cheers, Daniel On 29.04.21 15:39, Володимир Іванець wrote:
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6.
Rtpengine logs offers, answers and deletes but there is nothing when I trigger *start_recording* with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the *start_recording* function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request - call-id: [] - cseq: []".
I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording:
*/usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127... http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "To: sip:200-test@127.0.0.1:5060 http://sip:200-test@127.0.0.1:5060" -H "From: <sip:2564286000@127.0.0.1:5080 http://sip:2564286000@127.0.0.1:5080>;tag=as7a92114c"*
It also looks like rtpengine module does not care about actual header values. Function *start_recording* called with Call-Id value is enough to start call recording even if all headers contain random invalid values:
- /usr/bin/curl -H "Content-Type: text"
"http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127... http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 http://sip:456@127.0.0.1:5060" -H "From: <sip:123@127.0.0.1:5080 http://sip:123@127.0.0.1:5080>;tag=1"*
*Thank you very much for your help!*
*Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 http://127.0.0.1:8088], 0x7f943ba04ac0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0 <call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending...* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)* *Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0*
чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla miconda@gmail.com пише:
Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages.
Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel,
That is correct. My *$var(call_id)* variable contains concatenation of the "call-id=" string and a Call-Id value.
*Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>*
Thank you!
чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla miconda@gmail.com пише:
Hello,
related to the initial config snippet example, the call-id is expected to be provide as a named flag, like:
start_recording("call-id=$var(call_id)");
See the readme of the rtpengine module for more details.
Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard,
Thank you very much for the suggestion! I will give it a try.
ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs rfuchs@sipwise.com пише:
On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
Hello!
I'm testing call recording with Rtpengine. It works fine when the "record-call=on" flag is added to the *rtpengine_offer* or *start_recording* is used in the *request_route*.
But I was wondering if the call recording can be managed by a separate application. So I add the following lines to the *event_route[xhttp:request]* and triggered it with an HTTP request after the call was established. The call-id value was taken from the Rtpengine log and sent with the request.
- if ($hu =~ "^/CALL_RECORD_START/") {*
- $var(call_id) = *"call-id=" + *$(hu{s.select,2,/});* xlog("L_DBG", "$var(call_id)");
- start_recording($var(call_id));* exit;
- }*
If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client
Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example.
Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
Kamailio - Users Mailing List - Non Commercial Discussions
- sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe:
-- Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
--
Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
--
Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
-- Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
--
Daniel-Constantin Mierla -- www.asipto.comwww.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone)
Hello,
ok, good that it works now. You should still be able to take them from headers with $ci and $ft, but they have to be provided in the parameter of start_recording()/stop_recording() if used with a non-SIP message.
Cheers, Daniel
On 05.05.21 18:20, Володимир Іванець wrote:
Hello,
I did not. I misunderstood your previous message. Now I called start_recording() and stop_recording() with /call-id/ and /from-tag/ flags and everything worked fine.
Thank you very much!
ср, 5 трав. 2021 о 16:46 Daniel-Constantin Mierla <miconda@gmail.com mailto:miconda@gmail.com> пише:
Hello, do you pass "from-tag=xyz" to the start_recording() function? Cheers, Daniel On 05.05.21 13:51, Володимир Іванець wrote:
Hello Daniel, Sorry, I was out of the office and could make a test only now. As you told, the HTTP request is now processed differently. Unfortunately, I can no longer start call recording. I tried the following options and got the "rtpp_function_call(): can't get From tag" error message each time. 1. /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>" 2. /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>" -H "From: <sip:123@127.0.0.1:5080 <http://sip:123@127.0.0.1:5080>>;tag=1" 3. /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>" -H "Call-Id: 249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 <mailto:249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>" -H "To: sip:456@127.0.0.1:5060 <http://sip:456@127.0.0.1:5060>" -H "From: <sip:123@127.0.0.1:5080 <http://sip:123@127.0.0.1:5080>>;tag=1" /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_fline.c:250]: parse_first_line(): first line type 1 (request) flags 2/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:677]: parse_msg(): SIP Request:/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:679]: parse_msg(): method: <GET>/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:681]: parse_msg(): uri: </CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0> <mailto:/CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0>/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:683]: parse_msg(): version: <HTTP/1.1>/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Via] type 1/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:555]: parse_headers(): Via found, flags=2/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:557]: parse_headers(): this is the first via/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: call-id=249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0 <mailto:call-id=249ae6300da4b1393be203e21068f6a2@127.0.0.1:5080.0> 1111111111/ /*May 5 14:40:43 test /usr/sbin/kamailio[19603]: ERROR: rtpengine [rtpengine.c:2547]: rtpp_function_call(): can't get From tag*/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: xhttp [xhttp_mod.c:420]: xhttp_send_reply(): sending out response: 200 OK/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Host] type 0/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [User-Agent] type 28/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Accept] type 23/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/parse_hname2.c:294]: parse_sip_header_name(): parsed header name [Content-Type] type 11/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/parser/msg_parser.c:91]: get_hdr_field(): found end of header/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/msg_translator.c:162]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 5/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (19603 (27)), reusing fd/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending.../ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f4ba719cd70 n=118 fd=10/ /May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=/ / / / / Thank you! пт, 30 квіт. 2021 о 17:53 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: I pushed a commit to master branch that should make it work to use the function for non-SIP message processing, by giving call-id=... and from-tag=... via flags parameter -- these two attributes seemed to be used by expecting to be set, even if the rtpengine application may ignore one of them. If you have a chance to test, let me know the result. Cheers, Daniel On 29.04.21 16:38, Daniel-Constantin Mierla wrote:
I looked in the code and indeed it first takes the values from headers for Call-Id, To (tag), From (tag), failing if the headers are not found, but then it updates the values from the flags parameter. So the call-id can be anything in the headers if you provide it as "call-id=xyz" parameter. Maybe the code should be reworked a bit to parse first the flags parameters and if values are not found for the sip attributes, then try to get them from headers. Cheers, Daniel On 29.04.21 15:39, Володимир Іванець wrote:
I run Kamailio with debug=3 and Rtpengine with LOG_LEVEL=6. Rtpengine logs offers, answers and deletes but there is nothing when I trigger /start_recording/ with HTTP request. Below is the full Kamailio log for the request. It looks to be failing right on the /start_recording/ function and I don't see any other issues except empty Call-Id here: "receive_msg(): --- received sip message - request - call-id: [] - cseq: []". I tried to add Call-Id header to my HTTP request and found out that now rtpengine module will complain about missing To header. With tries and errors, I specified all required headers and Rtpengine started call recording: //usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <http://localhost:8088/CALL_RECORD_START/38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "Call-Id: 38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1 <mailto:38687ab466a031d20d852706710d2b4f@127.0.0.1:5080.1>" -H "To: sip:200-test@127.0.0.1:5060 <http://sip:200-test@127.0.0.1:5060>" -H "From: <sip:2564286000@127.0.0.1:5080 <http://sip:2564286000@127.0.0.1:5080>>;tag=as7a92114c"/ It also looks like rtpengine module does not care about actual header values. Function /start_recording/ called with Call-Id value is enough to start call recording even if all headers contain random invalid values: / /usr/bin/curl -H "Content-Type: text" "http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0 <http://localhost:8088/CALL_RECORD_START/6559572e21e08e0a41503ba5779c6604@127.0.0.1:5080.0>" -H "Call-Id: does_mot_matter" -H "To: sip:456@127.0.0.1:5060 <http://sip:456@127.0.0.1:5060>" -H "From: <sip:123@127.0.0.1:5080 <http://sip:123@127.0.0.1:5080>>;tag=1"/ *Thank you very much for your help!* /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/ip_addr.c:229]: print_ip(): tcpconn_new: new tcp connection: 127.0.0.1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1175]: tcpconn_new(): on port 42782, type 2, socket 64/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:1498]: tcpconn_add(): hashes: 1710:1616:2551, 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xae63a0, 64, 2, 0x7f943ba04ac0), fd_no=50/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xae63a0, 64, -1, 0x0) fd_no=51 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4457]: handle_tcpconn_ev(): sending to child, events 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:4130]: send2child(): selected tcp worker idx:0 proc:35 pid:24116 for activity on [tcp:127.0.0.1:8088 <http://127.0.0.1:8088>], 0x7f943ba04ac0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1749]: handle_io(): received n=8 con=0x7f943ba04ac0, fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> <mailto:/CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:324]: receive_msg(): --- received sip message - request - call-id: [] - cseq: []/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:382]: xhttp_handler(): new fake msg created (286 bytes):/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:610]: parse_msg(): SIP Request:/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:612]: parse_msg(): method: <GET>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:614]: parse_msg(): uri: </CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0> <mailto:/CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:616]: parse_msg(): version: <HTTP/1.1>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/parse_via.c:2639]: parse_via(): end of header reached, state=5/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:498]: parse_headers(): Via found, flags=2/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:500]: parse_headers(): this is the first via/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. HTTP Request Received/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: == TRACE. xhttp:request. hu is: /CALL_RECORD_START/7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0 <mailto:call-id=7a444c165953cf0a196e10e50d0b611e@127.0.0.1:5080.0>/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/parser/msg_parser.c:89]: get_hdr_field(): found end of header/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine_funcs.c:294]: get_callid(): call-id not found/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: ERROR: rtpengine [rtpengine.c:2383]: rtpp_function_call(): can't get Call-Id field/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: xhttp [xhttp_mod.c:441]: xhttp_send_reply(): sending out response: 200 OK/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/msg_translator.c:161]: check_via_address(): (127.0.0.1, 127.0.0.1, 0)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:1590]: _tcpconn_find(): found connection by id: 1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2472]: tcpconn_send_put(): send from reader (24116 (35)), reusing fd/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2706]: tcpconn_do_send(): sending.../ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2739]: tcpconn_do_send(): after real write: c= 0x7f943ba04ac0 n=113 fd=13/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_main.c:2740]: tcpconn_do_send(): buf=/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/usr_avp.c:636]: destroy_avp_list(): destroying list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/xavp.c:539]: xavp_destroy_list(): destroying xavp list (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/receive.c:528]: receive_msg(): cleaning up/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:375]: io_watch_add(): DBG: io_watch_add(0xb2a640, 13, 2, 0x7f943ba04ac0), fd_no=1/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3793]: handle_ser_child(): read response= 7f943ba04ac0, -1, fd -1 from 35 (24116)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/io_wait.h:600]: io_watch_del(): DBG: io_watch_del (0xb2a640, 13, -1, 0x10) fd_no=2 called/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1890]: handle_io(): removing from list 0x7f943ba04ac0 id 1 fd 13, state -1, flags 4028, main fd -1, refcnt 1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1671]: release_tcpconn(): releasing con 0x7f943ba04ac0, state -2, fd=13, id=1 ([127.0.0.1]:42782 -> [127.0.0.1]:8088)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <core> [core/tcp_read.c:1672]: release_tcpconn(): extra_data (nil)/ /Apr 29 16:01:47 test /usr/sbin/kamailio[24120]: DEBUG: <core> [core/tcp_main.c:3560]: handle_tcp_child(): reader response= 7f943ba04ac0, -2 from 0/ чт, 29 квіт. 2021 о 13:17 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: Ohhh, blindly missed the assignment before. You should run both kamailio and rtpengine with higher debug level and see if you get any hints from the log messages. Cheers, Daniel On 29.04.21 11:51, Володимир Іванець wrote:
Hello Daniel, That is correct. My /$var(call_id)/ variable contains concatenation of the "call-id=" string and a Call-Id value. /Apr 27 18:25:00 test /usr/sbin/kamailio[5347]: DEBUG: <script>: call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0 <mailto:call-id=3de74068278ede4417086eb82bdf5a06@127.0.0.1:5080.0>/ Thank you! чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla <miconda@gmail.com <mailto:miconda@gmail.com>> пише: Hello, related to the initial config snippet example, the call-id is expected to be provide as a named flag, like: start_recording("call-id=$var(call_id)"); See the readme of the rtpengine module for more details. Cheers, Daniel On 29.04.21 08:23, Володимир Іванець wrote:
Hello Richard, Thank you very much for the suggestion! I will give it a try. ср, 28 квіт. 2021, 20:00 користувач Richard Fuchs <rfuchs@sipwise.com <mailto:rfuchs@sipwise.com>> пише: On 28/04/2021 10.53, [ EXT ] Володимир Іванець wrote:
> Hello! > > I'm testing call recording with Rtpengine. > It works fine when the "record-call=on" flag > is added to the /rtpengine_offer/ > or /start_recording/ is used in > the *request_route*. > > But I was wondering if the call recording > can be managed by a separate application. So > I add the following lines to > the *event_route[xhttp:request]* and > triggered it with an HTTP request after the > call was established. The call-id value was > taken from the Rtpengine log and sent with > the request. > > / if ($hu =~ "^/CALL_RECORD_START/") {/ > / $var(call_id) = /"call-id=" > + /$(hu{s.select,2,/});/ > xlog("L_DBG", "$var(call_id)"); > / start_recording($var(call_id));/ > / /exit; > / }/ > If you have to reason to go through Kamailio for this, you can simply trigger the command from any other external application. There's a sample script included in the repo that can be used for this purpose directly (making use of the Perl module that is also included): https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client https://github.com/sipwise/rtpengine/blob/master/utils/rtpengine-ng-client
There's also a nodejs client that I'm aware of: https://github.com/davehorton/rtpengine-client <https://github.com/davehorton/rtpengine-client> Or you can hand-roll the request and talk to rtpengine via HTTP or Websocket for example. Cheers __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users> __________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * sr-users@lists.kamailio.org <mailto:sr-users@lists.kamailio.org> Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users <https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>
-- Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com> www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda> Kamailio Advanced Training - Online May 17-20, 2021 (Europe Timezone) - June 7-10, 2021 (America Timezone) * https://www.asipto.com/sw/kamailio-advanced-training-online/ <https://www.asipto.com/sw/kamailio-advanced-training-online/>