Colin, There is gratitude for you for your time and exceptional consideration. I am really indebted, mate! Here in Albanian culture "I owe you a coffee" (no a dinner!) :)
So as per your advice, I shall stick to the run of the mill clients at this stage, rather than reinvent a slightly better wheel. With kindest regards, Zaka On 19 July 2016 at 21:51, Colin Morelli <colin.more...@gmail.com> wrote: > Zakia, > > Alright, starting with the basics: IP based voice/video communications > generally involve two distinct responsibilities: signaling and media. > > The job of the signaling layer is to exchange information about calls > between two parties. For example, if I call you, I use my signaling > protocol to talk to my signaling server to send you an invitation to > connect. The server (somehow - implementation dependent) relays that > information to you. Once you've received the information, you can > answer/ignore/reject the invitation. The signaling layer is responsible for > notifying me about your response. The ultimate goal of the signaling layer > is to exchange media descriptions, that tell each party where/how they can > communicate with each other. SIP is an example of a signaling protocol, and > it uses SDPs to exchange information about media. > > The job of the media layer is to actually exchange the media between two > endpoints. With the job of the signaling layer complete, I should have some > information about how I can talk to you. With that information I received > over the signaling layer, I should be able to open my local audio/video > devices, and stream data to you regardless of where you are. The media > layer is responsible for handling that data and ensuring it gets to its > destination. WebRTC is a spec for a media implementation which uses > STUN/TURN/ICE for NAT traversal and reliable media exchange. While it is > commonly built on top of SIP, there is no reason it needs to be. SIP is not > directly involved in WebRTC at all. Rather, WebRTC-capable SIP endpoints > simply generate an SDP containing all the information WebRTC needs to know > in order to take over the rest (what codecs should be used, ICE candidates > where the remote party can be reached, etc). > > Now, Kamailio is a SIP server/proxy. This means it speaks/understands the > SIP protocol. This also means that its primary concern is with signaling. > If you want to use Kamailio as the signaling layer for your application - > then you'll need to talk to it via SIP. sipml5 is a javascript based SIP > client that can run in browser, but there are others as well (SIP.js, > JsSIP). You'll probably want to use one of these rather than build your > own. Now, because SIP is just the signaling layer - there's no reason you > *need* to use SIP in order to work with WebRTC. However, the Kamailio > group, as well as the SIP client authors, have spent a lot of time building > and refining their products to make them production-grade and robust. > > If you want to use Kamailio, you need a SIP client. Even with WebRTC > (remember, WebRTC is only about media). If you were feeling very > adventurous (although I would never recommend it), you could build your own > signaling layer and use your own custom client. But you'd also have to > build a server component that speaks your new protocol. > > Bottom line: you probably just want to stick with Kamailio + one of the > great javascript SIP clients I mentioned above. They're quite > stable/reliable. > > Hopefully that helps. > > Best, > Colin > > On Tue, Jul 19, 2016 at 3:11 PM Zaka <zaka.bha...@gmail.com> wrote: > >> Hello Colin: >> >> Thanks a lot! It solved the issue. Though I had got a hint by succeeding >> to specify the address using *kamailio -l desired address/port *option, >> yet never noticed the lack of *MY-WS_ADDRESS* >> >> Last, but not the least, in a browser supporting WEBRTC (FF, CHROME) do >> we still need SIP ML5 as on: https://www.doubango.org/sipml5/ >> >> If not, I wonder how will the WS or WSS URL post the login credentials to >> the KAMAILIO WEBRTC server? >> >> BR, >> >> Zaka >> >> >> >> On 16 July 2016 at 18:11, Colin Morelli <colin.more...@gmail.com> wrote: >> >>> Zaka, >>> >>> I could be wrong here but I don't think you ever actually have a >>> "listen" line for MY_WS_ADDR. >>> >>> I believe you have a typo, as you have listen=MY_IP_ADDR twice, once >>> within the guard for WITH_WEBSOCKETS. Replace the one inside the if with >>> MY_WS_ADDR and I think your problem should be resolved. >>> >>> Best, >>> Colin >>> >>> On Sat, Jul 16, 2016 at 3:36 AM Zaka <zaka.bha...@gmail.com> wrote: >>> >>>> Dear List: >>>> >>>> I am still stuck. Still unable to get Kamailio to listen on WEBRTC port* >>>> (in this case 8000)* >>>> >>>> Please advise if it has something to do with disabling TLS/MSRP? >>>> >>>> >>>> Please see the log & related config file in line here: >>>> >>>> *Log:* >>>> >>>> 0(5724) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_WS_PORT!8000!g >>>> >>>> >>>> *and the result of config file check:* >>>> >>>> root@callcntr:/usr/local/etc/kamailio# kamailio -eE -ddd -cf >>>> /usr/local/etc/kamailio/websocket.cfg >>>> 0(5902) INFO: <core> [main.c:1911]: main(): private (per process) >>>> memory: 8388608 bytes >>>> 0(5902) DEBUG: <core> [mem/f_malloc.c:323]: fm_malloc_init(): >>>> fm_malloc_init: F_OPTIMIZE=16384, /ROUNDTO=2048 >>>> 0(5902) DEBUG: <core> [mem/f_malloc.c:325]: fm_malloc_init(): >>>> fm_malloc_init: F_HASH_SIZE=2099, fm_block size=33912 >>>> 0(5902) DEBUG: <core> [mem/f_malloc.c:327]: fm_malloc_init(): >>>> fm_malloc_init(0x7f9ca6e1f010, 8388608), start=0x7f9ca6e1f010 >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac2700)[0] to 0 >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac2680)[0] to 0 >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac26c0)[0] to 0 >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac2720)[0] to 0 >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac26a0)[0] to 0 >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac26e0)[0] to 0 >>>> 0(5902) DEBUG: <core> [pvapi.c:1976]: pv_init_buffer(): PV print >>>> buffer initialized to [10][8192] >>>> 0(5902) DEBUG: <core> [main.c:2097]: main(): read 286773155 from >>>> /dev/urandom >>>> 0(5902) DEBUG: <core> [main.c:2103]: main(): seeding PRNG with >>>> 1755363211 >>>> 0(5902) DEBUG: <core> [main.c:2107]: main(): test random numbers >>>> 726213135 321707966 991183401 >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e3fc48 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !DBURL!mysql://kamailio:kamailiorw@localhost/kamailio!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: DBURL >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [DBURL] value [mysql://kamailio:kamailiorw@localhost >>>> /kamailio] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [DBURL]=[mysql://kamailio:kamailiorw@localhost/kamailio] (0) >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e3ffe8 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_IP_ADDR!192.168.1.16!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> MY_IP_ADDR >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [MY_IP_ADDR] value [192.168.1.16] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [MY_IP_ADDR]=[192.168.1.16] (0) >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e40320 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_DOMAIN!callcntr.com.al!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> MY_DOMAIN >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [MY_DOMAIN] value [callcntr.com.al] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [MY_DOMAIN]=[callcntr.com.al] (0) >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e40658 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_WS_PORT!8000!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> MY_WS_PORT >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [MY_WS_PORT] value [8000] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [MY_WS_PORT]=[8000] (0) >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e40988 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_WSS_PORT!443!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> MY_WSS_PORT >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [MY_WSS_PORT] value [443] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [MY_WSS_PORT]=[443] (0) >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e40cb8 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_MSRP_PORT!9000!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> MY_MSRP_PORT >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [MY_MSRP_PORT] value [9000] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [MY_MSRP_PORT]=[9000] (0) >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=0 >>>> 0(5902) DEBUG: <core> [re.c:455]: subst_run(): matched (16, 10): >>>> [MY_IP_ADDR] >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [ppcfg.c:192]: pp_subst_run(): preprocess subst >>>> applied [#1] to [!MY_WS_ADDR!tcp:MY_IP_ADDR:MY_WS_PORT!g] - returning new >>>> string [!MY_WS_ADDR!tcp:192.168.1.16:MY_WS_PORT!g] >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=0 >>>> 0(5902) DEBUG: <core> [re.c:455]: subst_run(): matched (29, 10): >>>> [MY_WS_PORT] >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [ppcfg.c:192]: pp_subst_run(): preprocess subst >>>> applied [#2] to [!MY_WS_ADDR!tcp:192.168.1.16:MY_WS_PORT!g] - >>>> returning new string [!MY_WS_ADDR!tcp:192.168.1.16:8000!g] >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:436]: subst_run(): running. r=1 >>>> 0(5902) DEBUG: <core> [re.c:505]: subst_str(): no match >>>> 0(5902) DEBUG: <core> [re.c:313]: subst_parser(): ok, se is >>>> 0x7f9ca6e41118 >>>> 0(5902) INFO: <core> [ppcfg.c:82]: pp_subst_add(): ### added subst >>>> expression: !MY_WS_ADDR!tcp:192.168.1.16:8000!g >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> MY_WS_ADDR >>>> 0(5902) DEBUG: <core> [cfg.lex:1776]: pp_define_set(): ### setting >>>> define ID [MY_WS_ADDR] value [tcp:192.168.1.16:8000] >>>> 0(5902) DEBUG: <core> [ppcfg.c:160]: pp_substdef_add(): ### added >>>> substdef: [MY_WS_ADDR]=[tcp:192.168.1.16:8000] (0) >>>> 0(5902) DEBUG: <core> [cfg.lex:1690]: pp_define(): defining id: >>>> WITH_WEBSOCKETS >>>> 0(5902) DEBUG: <core> [cfg.lex:1795]: pp_define_get(): ### returning >>>> define ID [MY_IP_ADDR] value [192.168.1.16] >>>> 0(5902) DEBUG: <core> [cfg.lex:1795]: pp_define_get(): ### returning >>>> define ID [MY_IP_ADDR] value [192.168.1.16] >>>> loading modules under config path: /usr/local/lib64/kamailio/modules/ >>>> 0(5902) DEBUG: <core> [ppcfg.c:223]: pp_ifdef_level_check(): same >>>> number of pairing preprocessor directives #!IF[N]DEF - #!ENDIF >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 0: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:418]: print_action(): external_module_call( >>>> 0(5902) DEBUG: <core> [route_struct.c:467]: print_action(): >>>> f_ptr<0x7f9ca6e4d808> 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 2 0(5902) DEBUG: <core> [route_struct.c:524]: >>>> print_action(): , "L_WARN" 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:418]: >>>> print_action(): external_module_call( 0(5902) DEBUG: <core> >>>> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e443b8> 0(5902) DEBUG: >>>> <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: <core> >>>> [route_struct.c:524]: print_action(): , "403" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "REQINIT" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:421]: print_action(): force_rport( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<0> 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e50ff0> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4d808> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "L_ERR" 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e443b8> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "400" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "WITHINDLG" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e42f78> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e43950> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "AUTH" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4c350> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: >>>> <core> [route_struct.c:543]: print_action(): , type<22> 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e44968> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "REGISTRAR" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e443b8> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "484" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "LOCATION" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "RELAY" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 1: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:418]: print_action(): external_module_call( >>>> 0(5902) DEBUG: <core> [route_struct.c:467]: print_action(): >>>> f_ptr<0x7f9ca6e44460> 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 0 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:519]: >>>> print_action(): } else { 0(5902) DEBUG: <core> [route_struct.c:545]: >>>> print_action(): }; 0(5902) DEBUG: <core> [route_struct.c:338]: >>>> print_action(): drop( 0(5902) DEBUG: <core> [route_struct.c:455]: >>>> print_action(): 1 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 1 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 2: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:418]: print_action(): external_module_call( >>>> 0(5902) DEBUG: <core> [route_struct.c:467]: print_action(): >>>> f_ptr<0x7f9ca6e443b8> 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 2 0(5902) DEBUG: <core> [route_struct.c:524]: >>>> print_action(): , "483" 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:338]: >>>> print_action(): drop( 0(5902) DEBUG: <core> [route_struct.c:455]: >>>> print_action(): 1 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 1 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:519]: >>>> print_action(): } else { 0(5902) DEBUG: <core> [route_struct.c:545]: >>>> print_action(): }; 0(5902) DEBUG: <core> [route_struct.c:401]: >>>> print_action(): if ( 0(5902) DEBUG: <core> [route_struct.c:483]: >>>> print_action(): type<22> 0(5902) DEBUG: <core> [route_struct.c:485]: >>>> print_action(): ) { 0(5902) DEBUG: <core> [route_struct.c:418]: >>>> print_action(): external_module_call( 0(5902) DEBUG: <core> >>>> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4d7d0> 0(5902) DEBUG: >>>> <core> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:524]: print_action(): , "Malformed SIP message from $si:$sp >>>> " 0(5902) DEBUG: <core> [route_struct.c:546]: print_action(): ); >>>> 0(5902) DEBUG: <core> [route_struct.c:338]: print_action(): drop( 0(5902) >>>> DEBUG: <core> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4cdb0> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 3: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: >>>> <core> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4d808> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "L_ERR" 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e443b8> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "400" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:347]: print_action(): route( 0(5902) DEBUG: <core> >>>> [route_struct.c:452]: print_action(): "RELAY" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e42f78> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e443b8> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "404" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 4: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: >>>> <core> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e44460> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 5: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:418]: print_action(): external_module_call( >>>> 0(5902) DEBUG: <core> [route_struct.c:467]: print_action(): >>>> f_ptr<0x7f9ca6e42a70> 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 0 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:418]: >>>> print_action(): external_module_call( 0(5902) DEBUG: <core> >>>> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e44428> 0(5902) DEBUG: >>>> <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: <core> >>>> [route_struct.c:524]: print_action(): , "404" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:442]: print_action(): assign( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<21> 0(5902) DEBUG: <core> >>>> [route_struct.c:517]: print_action(): , type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e42a70> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:448]: print_action(): UNKNOWN( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:517]: print_action(): , type<24> 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): routing table 6: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: >>>> <core> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4e8b8> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "$fd" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4e810> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e443b8> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "403" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): onreply routing >>>> table 0: >>>> 0(5902) DEBUG: <core> [route_struct.c:401]: print_action(): if ( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<22> >>>> 0(5902) DEBUG: <core> [route_struct.c:485]: print_action(): ) { 0(5902) >>>> DEBUG: <core> [route_struct.c:418]: print_action(): external_module_call( >>>> 0(5902) DEBUG: <core> [route_struct.c:467]: print_action(): >>>> f_ptr<0x7f9ca6e4d808> 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 2 0(5902) DEBUG: <core> [route_struct.c:524]: >>>> print_action(): , "L_WARN" 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:338]: >>>> print_action(): drop( 0(5902) DEBUG: <core> [route_struct.c:455]: >>>> print_action(): 0 0(5902) DEBUG: <core> [route_struct.c:493]: >>>> print_action(): , 9 0(5902) DEBUG: <core> [route_struct.c:546]: >>>> print_action(): ); 0(5902) DEBUG: <core> [route_struct.c:519]: >>>> print_action(): } else { 0(5902) DEBUG: <core> [route_struct.c:545]: >>>> print_action(): }; 0(5902) DEBUG: <core> [route_struct.c:401]: >>>> print_action(): if ( 0(5902) DEBUG: <core> [route_struct.c:483]: >>>> print_action(): type<22> 0(5902) DEBUG: <core> [route_struct.c:485]: >>>> print_action(): ) { 0(5902) DEBUG: <core> [route_struct.c:418]: >>>> print_action(): external_module_call( 0(5902) DEBUG: <core> >>>> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e50e68> 0(5902) DEBUG: >>>> <core> [route_struct.c:493]: print_action(): , 0 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): event routing table >>>> 1: >>>> 0(5902) DEBUG: <core> [route_struct.c:448]: print_action(): UNKNOWN( >>>> 0(5902) DEBUG: <core> [route_struct.c:483]: print_action(): type<0> 0(5902) >>>> DEBUG: <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: >>>> <core> [route_struct.c:448]: print_action(): UNKNOWN( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<0> 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4d808> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "L_WARN" 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e50660> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 4 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "403" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4d808> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "L_DBG" 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e4d808> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "L_WARN" 0(5902) DEBUG: >>>> <core> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e50660> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 4 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "403" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:401]: print_action(): if ( 0(5902) DEBUG: <core> >>>> [route_struct.c:483]: print_action(): type<22> 0(5902) DEBUG: <core> >>>> [route_struct.c:485]: print_action(): ) { 0(5902) DEBUG: <core> >>>> [route_struct.c:338]: print_action(): drop( 0(5902) DEBUG: <core> >>>> [route_struct.c:455]: print_action(): 1 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 1 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:519]: print_action(): } else { 0(5902) DEBUG: <core> >>>> [route_struct.c:545]: print_action(): }; 0(5902) DEBUG: <core> >>>> [route_struct.c:418]: print_action(): external_module_call( 0(5902) DEBUG: >>>> <core> [route_struct.c:467]: print_action(): f_ptr<0x7f9ca6e50660> 0(5902) >>>> DEBUG: <core> [route_struct.c:493]: print_action(): , 4 0(5902) DEBUG: >>>> <core> [route_struct.c:524]: print_action(): , "404" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:2132]: print_rl(): event routing table >>>> 2: >>>> 0(5902) DEBUG: <core> [route_struct.c:418]: print_action(): >>>> external_module_call( 0(5902) DEBUG: <core> [route_struct.c:467]: >>>> print_action(): f_ptr<0x7f9ca6e4d808> 0(5902) DEBUG: <core> >>>> [route_struct.c:493]: print_action(): , 2 0(5902) DEBUG: <core> >>>> [route_struct.c:524]: print_action(): , "L_INFO" 0(5902) DEBUG: <core> >>>> [route_struct.c:546]: print_action(): ); 0(5902) DEBUG: <core> >>>> [route.c:2134]: print_rl(): >>>> 0(5902) DEBUG: <core> [route.c:129]: route_add(): mapping routing >>>> block (0xac26e0)[core:receive-parse-error] to 3 >>>> 0(5902) INFO: <core> [sctp_core.c:74]: sctp_core_check_support(): SCTP >>>> API not enabled - if you want to use it, load sctp module >>>> Listening on >>>> udp: 192.168.1.16:5060 >>>> tcp: 192.168.1.16:5060 >>>> Aliases: >>>> tcp: callcntr:5060 >>>> udp: callcntr:5060 >>>> >>>> config file ok, exiting... >>>> root@callcntr:/usr/local/etc/kamailio# >>>> >>>> >>>> >>>> *Config File:* >>>> >>>> #!KAMAILIO >>>> # >>>> # Simple/sample kamailio.cfg for running a proxy/registrar with TLS and >>>> # WebSockets support. >>>> >>>> #!substdef "!DBURL!mysql://kamailio:kamailiorw@localhost/kamailio!g" >>>> #!substdef "!MY_IP_ADDR!192.168.1.16!g" >>>> #!substdef "!MY_DOMAIN!callcntr.com.al!g" >>>> #!substdef "!MY_WS_PORT!8000!g" >>>> #!substdef "!MY_WSS_PORT!443!g" >>>> #!substdef "!MY_MSRP_PORT!9000!g" >>>> #!substdef "!MY_WS_ADDR!tcp:MY_IP_ADDR:MY_WS_PORT!g" >>>> ##!substdef "!MY_WSS_ADDR!tls:MY_IP_ADDR:MY_WSS_PORT!g" >>>> ##!substdef "!MY_MSRP_ADDR!tls:MY_IP_ADDR:MY_MSRP_PORT!g" >>>> ##!substdef "!MSRP_MIN_EXPIRES!1800!g" >>>> ##!substdef "!MSRP_MAX_EXPIRES!3600!g" >>>> >>>> ##!define LOCAL_TEST_RUN >>>> ##!define WITH_TLS >>>> #!define WITH_WEBSOCKETS >>>> ##!define WITH_MSRP >>>> >>>> >>>> ####### Global Parameters ######### >>>> >>>> fork=yes >>>> children=4 >>>> >>>> #!ifdef WITH_TLS >>>> enable_tls=1 >>>> #!endif >>>> >>>> listen=MY_IP_ADDR >>>> #!ifdef WITH_WEBSOCKETS >>>> listen=MY_IP_ADDR >>>> #!ifdef WITH_TLS >>>> #listen=MY_WSS_ADDR >>>> #!endif >>>> #!endif >>>> #!ifdef WITH_MSRP >>>> listen=MY_MSRP_ADDR >>>> #!endif >>>> >>>> tcp_connection_lifetime=3604 >>>> tcp_accept_no_cl=yes >>>> tcp_rd_buf_size=16384 >>>> >>>> #!ifdef LOCAL_TEST_RUN >>>> debug=2 >>>> mpath="modules" >>>> #!else >>>> debug=0 >>>> mpath="/usr/local/lib64/kamailio/modules/" >>>> #!endif >>>> >>>> loadmodule "db_mysql.so" >>>> loadmodule "tm.so" >>>> loadmodule "sl.so" >>>> loadmodule "rr.so" >>>> loadmodule "pv.so" >>>> loadmodule "maxfwd.so" >>>> loadmodule "usrloc.so" >>>> loadmodule "registrar.so" >>>> loadmodule "textops.so" >>>> loadmodule "siputils.so" >>>> loadmodule "xlog.so" >>>> loadmodule "sanity.so" >>>> loadmodule "ctl.so" >>>> loadmodule "auth.so" >>>> loadmodule "auth_db.so" >>>> loadmodule "kex.so" >>>> loadmodule "mi_rpc.so" >>>> loadmodule "corex.so" >>>> #!ifdef WITH_TLS >>>> loadmodule "tls.so" >>>> #!endif >>>> #!ifdef WITH_MSRP >>>> loadmodule "msrp.so" >>>> loadmodule "htable.so" >>>> loadmodule "cfgutils.so" >>>> #!endif >>>> #!ifdef WITH_WEBSOCKETS >>>> loadmodule "xhttp.so" >>>> loadmodule "websocket.so" >>>> loadmodule "nathelper.so" >>>> #!endif >>>> >>>> >>>> #!ifdef WITH_WEBSOCKETS >>>> # ----- nathelper params ----- >>>> modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)") >>>> # Note: leaving NAT pings turned off here as nathelper is _only_ being >>>> used for >>>> # WebSocket connections. NAT pings are not needed as WebSockets >>>> have >>>> # their own keep-alives. >>>> #!endif >>>> >>>> >>>> ####### Routing Logic ######## >>>> >>>> # Main SIP request routing logic >>>> # - processing of any incoming SIP request starts with this route >>>> # - note: this is the same as route { ... } >>>> request_route { >>>> >>>> >>>> * if (($Rp == MY_WS_PORT)) { * >>>> >>>> *#### I deleted/ modified this logical expression ####* >>>> >>>> xlog("L_WARN", "SIP request received on $Rp\n"); >>>> sl_send_reply("403", "Forbidden"); >>>> exit; >>>> } >>>> >>>> # per request initial checks >>>> route(REQINIT); >>>> >>>> #!ifdef WITH_WEBSOCKETS >>>> if (nat_uac_test(64)) { >>>> # Do NAT traversal stuff for requests from a WebSocket >>>> # connection - even if it is not behind a NAT! >>>> # This won't be needed in the future if Kamailio and the >>>> # WebSocket client support Outbound and Path. >>>> force_rport(); >>>> if (is_method("REGISTER")) { >>>> fix_nated_register(); >>>> } else { >>>> if (!add_contact_alias()) { >>>> xlog("L_ERR", "Error aliasing contact <$ct>\n"); >>>> sl_send_reply("400", "Bad Request"); >>>> exit; >>>> } >>>> } >>>> } >>>> #!endif >>>> >>>> # handle requests within SIP dialogs >>>> route(WITHINDLG); >>>> >>>> ### only initial requests (no To tag) >>>> >>>> # CANCEL processing >>>> if (is_method("CANCEL")) { >>>> if (t_check_trans()) { >>>> t_relay(); >>>> } >>>> exit; >>>> } >>>> >>>> t_check_trans(); >>>> >>>> # authentication >>>> route(AUTH); >>>> >>>> # record routing for dialog forming requests (in case they are >>>> routed) >>>> # - remove preloaded route headers >>>> remove_hf("Route"); >>>> if (is_method("INVITE")) { >>>> record_route(); >>>> } >>>> >>>> # handle registrations >>>> route(REGISTRAR); >>>> >>>> if ($rU==$null) { >>>> # request with no Username in RURI >>>> sl_send_reply("484", "Address Incomplete"); >>>> exit; >>>> } >>>> >>>> # user location service >>>> route(LOCATION); >>>> >>>> route(RELAY); >>>> } >>>> >>>> route[RELAY] { >>>> if (!t_relay()) { >>>> sl_reply_error(); >>>> } >>>> exit; >>>> } >>>> >>>> # Per SIP request initial checks >>>> route[REQINIT] { >>>> if (!mf_process_maxfwd_header("10")) { >>>> sl_send_reply("483", "Too Many Hops"); >>>> exit; >>>> } >>>> >>>> if (!sanity_check("1511", "7")) { >>>> xlog("Malformed SIP message from $si:$sp\n"); >>>> exit; >>>> } >>>> >>>> if (uri == myself && is_method("OPTIONS") && >>>> !(uri=~"sip:.*[@]+.*")) { >>>> options_reply(); >>>> exit; >>>> } >>>> } >>>> >>>> # Handle requests within SIP dialogs >>>> route[WITHINDLG] { >>>> if (has_totag()) { >>>> # sequential request withing a dialog should >>>> # take the path determined by record-routing >>>> if (loose_route()) { >>>> #!ifdef WITH_WEBSOCKETS >>>> if ($du == "") { >>>> if (!handle_ruri_alias()) { >>>> xlog("L_ERR", "Bad alias <$ru>\n"); >>>> sl_send_reply("400", "Bad Request"); >>>> exit; >>>> } >>>> } >>>> #!endif >>>> route(RELAY); >>>> } else { >>>> if ( is_method("ACK") ) { >>>> if ( t_check_trans() ) { >>>> # no loose-route, but stateful ACK; >>>> # must be an ACK after a 487 >>>> # or e.g. 404 from upstream server >>>> t_relay(); >>>> exit; >>>> } else { >>>> # ACK without matching transaction... >>>> # ignore and discard >>>> exit; >>>> } >>>> } >>>> sl_send_reply("404", "Not Found"); >>>> } >>>> exit; >>>> } >>>> } >>>> >>>> # Handle SIP registrations >>>> route[REGISTRAR] { >>>> if (is_method("REGISTER")) { >>>> if (!save("location")) { >>>> sl_reply_error(); >>>> } >>>> exit; >>>> } >>>> } >>>> >>>> # USER location service >>>> route[LOCATION] { >>>> if (!is_subscriber("$ru", "subscriber", "1")) { >>>> t_newtran(); >>>> send_reply("404", "Not Found"); >>>> exit; >>>> } >>>> >>>> if (!lookup("location")) { >>>> $var(rc) = $rc; >>>> t_newtran(); >>>> switch ($var(rc)) { >>>> case -1: >>>> send_reply("480", "Temporarily Unavailable"); >>>> exit; >>>> case -2: >>>> send_reply("405", "Method Not Allowed"); >>>> exit; >>>> case -3: >>>> send_reply("500", "Server Internal Error"); >>>> exit; >>>> } >>>> } >>>> } >>>> >>>> # Authentication route >>>> route[AUTH] { >>>> if (is_method("REGISTER") || from_uri==myself) { >>>> # authenticate requests >>>> if (!auth_check("$fd", "subscriber", "1")) { >>>> auth_challenge("$fd", "0"); >>>> exit; >>>> } >>>> # user authenticated - remove auth header >>>> if(!is_method("REGISTER")) { >>>> consume_credentials(); >>>> } >>>> } >>>> # if caller is not local subscriber, then check if it calls >>>> # a local destination, otherwise deny, not an open relay here >>>> if (from_uri!=myself && uri!=myself) { >>>> sl_send_reply("403", "Forbidden"); >>>> exit; >>>> } >>>> } >>>> >>>> #!ifdef WITH_WEBSOCKETS >>>> onreply_route { >>>> if ((($Rp == MY_WS_PORT) >>>> && !(proto == WS)) || $Rp == MY_MSRP_PORT) { >>>> xlog("L_WARN", "SIP response received on $Rp\n"); >>>> drop; >>>> } >>>> >>>> if (nat_uac_test(64)) { >>>> # Do NAT traversal stuff for replies to a WebSocket connection >>>> # - even if it is not behind a NAT! >>>> # This won't be needed in the future if Kamailio and the >>>> # WebSocket client support Outbound and Path. >>>> add_contact_alias(); >>>> } >>>> } >>>> >>>> event_route[xhttp:request] { >>>> set_reply_close(); >>>> set_reply_no_connect(); >>>> >>>> if ($Rp != MY_WS_PORT >>>> #!ifdef WITH_TLS >>>> && $Rp != MY_WSS_PORT >>>> #!endif >>>> ) { >>>> xlog("L_WARN", "HTTP request received on $Rp\n"); >>>> xhttp_reply("403", "Forbidden", "", ""); >>>> exit; >>>> } >>>> >>>> xlog("L_DBG", "HTTP Request Received\n"); >>>> >>>> if ($hdr(Upgrade)=~"websocket" >>>> && $hdr(Connection)=~"Upgrade" >>>> && $rm=~"GET") { >>>> >>>> # Validate Host - make sure the client is using the correct >>>> # alias for WebSockets >>>> if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) { >>>> xlog("L_WARN", "Bad host $hdr(Host)\n"); >>>> xhttp_reply("403", "Forbidden", "", ""); >>>> exit; >>>> } >>>> >>>> # Optional... validate Origin - make sure the client is from an >>>> # authorised website. For example, >>>> # >>>> # if ($hdr(Origin) != "http://communicator.MY_DOMAIN" >>>> # && $hdr(Origin) != "https://communicator.MY_DOMAIN") { >>>> # xlog("L_WARN", "Unauthorised client $hdr(Origin)\n"); >>>> # xhttp_reply("403", "Forbidden", "", ""); >>>> # exit; >>>> # } >>>> >>>> # Optional... perform HTTP authentication >>>> >>>> # ws_handle_handshake() exits (no further configuration file >>>> # processing of the request) when complete. >>>> if (ws_handle_handshake()) >>>> { >>>> # Optional... cache some information about the >>>> # successful connection >>>> exit; >>>> } >>>> } >>>> >>>> xhttp_reply("404", "Not Found", "", ""); >>>> } >>>> >>>> event_route[websocket:closed] { >>>> xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n"); >>>> } >>>> #!endif >>>> >>>> #!ifdef WITH_MSRP >>>> event_route[msrp:frame-in] { >>>> msrp_reply_flags("1"); >>>> >>>> if ((($Rp == MY_WS_PORT || $Rp == MY_WSS_PORT) >>>> && !(proto == WS || proto == WSS)) && $Rp != MY_MSRP_PORT) { >>>> xlog("L_WARN", "MSRP request received on $Rp\n"); >>>> msrp_reply("403", "Action-not-allowed"); >>>> exit; >>>> } >>>> >>>> if (msrp_is_reply()) { >>>> msrp_relay(); >>>> } else if($msrp(method)=="AUTH") { >>>> if($msrp(nexthops)>0) { >>>> msrp_relay(); >>>> exit; >>>> } >>>> >>>> if (!www_authenticate("MY_DOMAIN", "subscriber", >>>> "$msrp(method)")) { >>>> if (auth_get_www_authenticate("MY_DOMAIN", "1", >>>> "$var(wauth)")) { >>>> msrp_reply("401", "Unauthorized", >>>> "$var(wauth)"); >>>> } else { >>>> msrp_reply("500", "Server Error"); >>>> } >>>> exit; >>>> } >>>> >>>> if ($hdr(Expires) != $null) { >>>> $var(expires) = (int) $hdr(Expires); >>>> if ($var(expires) < MSRP_MIN_EXPIRES) { >>>> msrp_reply("423", "Interval Out-of-Bounds", >>>> "Min-Expires: MSRP_MIN_EXPIRES\r\n"); >>>> exit; >>>> } else if ($var(expires) > MSRP_MAX_EXPIRES) { >>>> msrp_reply("423", "Interval Out-of-Bounds", >>>> "Max-Expires: MSRP_MAX_EXPIRES\r\n"); >>>> exit; >>>> } >>>> } else { >>>> $var(expires) = MSRP_MAX_EXPIRES; >>>> } >>>> >>>> $var(cnt) = $var(cnt) + 1; >>>> pv_printf("$var(sessid)", "s.$(pp).$(var(cnt)).$(RANDOM)"); >>>> $sht(msrp=>$var(sessid)::srcaddr) = $msrp(srcaddr); >>>> $sht(msrp=>$var(sessid)::srcsock) = $msrp(srcsock); >>>> $shtex(msrp=>$var(sessid)) = $var(expires) + 5; >>>> # - Use-Path: the MSRP address for server + session id >>>> $var(hdrs) = "Use-Path: msrps://MY_IP_ADDR:MY_MSRP_PORT/" >>>> + $var(sessid) + ";tcp\r\n" >>>> + "Expires: " + $var(expires) + "\r\n"; >>>> msrp_reply("200", "OK", "$var(hdrs)"); >>>> } else if ($msrp(method)=="SEND" || $msrp(method)=="REPORT") { >>>> if ($msrp(nexthops)>1) { >>>> if ($msrp(method)!="REPORT") { >>>> msrp_reply("200", "OK"); >>>> } >>>> msrp_relay(); >>>> exit; >>>> } >>>> $var(sessid) = $msrp(sessid); >>>> if ($sht(msrp=>$var(sessid)::srcaddr) == $null) { >>>> # one more hop, but we don't have address in htable >>>> msrp_reply("481", "Session-does-not-exist"); >>>> exit; >>>> } else if ($msrp(method)!="REPORT") { >>>> msrp_reply("200", "OK"); >>>> } >>>> msrp_relay_flags("1"); >>>> msrp_set_dst("$sht(msrp=>$var(sessid)::srcaddr)", >>>> "$sht(msrp=>$var(sessid)::srcsock)"); >>>> msrp_relay(); >>>> } else { >>>> msrp_reply("501", "Request-method-not-understood"); >>>> } >>>> } >>>> #!endif >>>> >>>> Thanks a million! >>>> >>>> Zaka >>>> >>>> >>>> One accurate measurement is worth more than a thousand expert opinions! >>>> _______________________________________________ >>>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list >>>> sr-users@lists.sip-router.org >>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users >>>> >>> >>> _______________________________________________ >>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list >>> sr-users@lists.sip-router.org >>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users >>> >>> >> _______________________________________________ >> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list >> sr-users@lists.sip-router.org >> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users >> > > _______________________________________________ > SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list > sr-users@lists.sip-router.org > http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users > >
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users