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 <[email protected]> пише: > 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/[email protected]:5080.0 > " > 2. /usr/bin/curl -H "Content-Type: text" " > > http://localhost:8088/CALL_RECORD_START/[email protected]:5080.0" > -H "From: <sip:[email protected]:5080>;tag=1" > 3. /usr/bin/curl -H "Content-Type: text" " > > http://localhost:8088/CALL_RECORD_START/[email protected]:5080.0" > -H "Call-Id: [email protected]:5080.0" -H > "To: sip:[email protected]:5060" -H "From: <sip:[email protected]: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/[email protected]:5080.0> > </CALL_RECORD_START/[email protected]: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/[email protected]:5080.0* > *May 5 14:40:43 test /usr/sbin/kamailio[19603]: DEBUG: <script>: > [email protected]:5080.0 > <[email protected]: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 <[email protected]> > пише: > >> 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/[email protected]:5080.1 >> <http://localhost:8088/CALL_RECORD_START/[email protected]:5080.1>" >> -H "Call-Id: [email protected]:5080.1 >> <[email protected]:5080.1>" -H "To: >> sip:[email protected]:5060 <http://sip:[email protected]:5060>" -H "From: >> <sip:[email protected]:5080 >> <http://sip:[email protected]: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/[email protected]:5080.0 >> <http://localhost:8088/CALL_RECORD_START/[email protected]:5080.0>" >> -H "Call-Id: does_mot_matter" -H "To: sip:[email protected]:5060 >> <http://sip:[email protected]:5060>" -H "From: <sip:[email protected]:5080 >> <http://sip:[email protected]: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/[email protected]:5080.0> >> </CALL_RECORD_START/[email protected]: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/[email protected]:5080.0> >> </CALL_RECORD_START/[email protected]: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/[email protected]:5080.0* >> *Apr 29 16:01:47 test /usr/sbin/kamailio[24116]: DEBUG: <script>: >> [email protected]:5080.0 >> <[email protected]: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 <[email protected]> >> пише: >> >>> 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>: >>> [email protected]:5080.0 >>> <[email protected]:5080.0>* >>> >>> >>> Thank you! >>> >>> чт, 29 квіт. 2021 о 09:58 Daniel-Constantin Mierla <[email protected]> >>> пише: >>> >>>> 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 <[email protected]> >>>> пише: >>>> >>>>> 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 >>>>> * [email protected] >>>>> 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 >>>>> >>>> >>>> __________________________________________________________ >>>> Kamailio - Users Mailing List - Non Commercial Discussions >>>> * [email protected] >>>> 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 >>>> >>>> -- >>>> 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) >>>> * https://www.asipto.com/sw/kamailio-advanced-training-online/ >>>> >>>> -- >>> 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) >>> * https://www.asipto.com/sw/kamailio-advanced-training-online/ >>> >>> -- >> 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) >> * https://www.asipto.com/sw/kamailio-advanced-training-online/ >> >> -- >> 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) >> * https://www.asipto.com/sw/kamailio-advanced-training-online/ >> >> -- > 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) > * https://www.asipto.com/sw/kamailio-advanced-training-online/ > >
__________________________________________________________ Kamailio - Users Mailing List - Non Commercial Discussions * [email protected] 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
