[SR-Users] WEBRTC Confusion (2)
Zaka
zaka.bhatti at gmail.com
Wed Jul 20 10:49:09 CEST 2016
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.morelli at 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.bhatti at 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.morelli at 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.bhatti at 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 at 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 at 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 at 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 at 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 at 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 at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20160720/fcafc61b/attachment.html>
More information about the sr-users
mailing list