[SR-Users] WEBRTC Confusion (2)

Colin Morelli colin.morelli at gmail.com
Tue Jul 19 21:51:41 CEST 2016


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20160719/e5274215/attachment.html>


More information about the sr-users mailing list