[SR-Users] SIP 500 on WSS connection lookup failure
Daniel-Constantin Mierla
miconda at gmail.com
Tue Mar 10 14:14:12 CET 2015
Hello,
On 07/03/15 00:27, Armen Babikyan wrote:
> Hi Daniel,
>
> Thanks for the tip about disabling internal replies in the transaction
> module.
>
> About the new feature in usrloc - it looks like close_expired_tcp
> feature disconnects the connection if contacts on it expire. I'm
> hoping to achieve the reverse, where I get to clean up when a
> connection closes abruptly. To this end, for websockets, will
> Kamailio allow me to use uac_req_send() from within
> event_route[websocket:closed]? I'm looking for a way to generate a
> de-REGISTER packet to send on to my registrar when a client abruptly
> closes their SIP/WS connection. If not, do you have any suggestions
> to achieve something similar?
if you want to avoid attempting to send the sip message when there is no
connection, then the option is to use set_forward_no_connect() before
relaying.
https://www.kamailio.org/wiki/cookbooks/4.2.x/core#set_forward_no_connect
Otherwise, look inside the usrloc module for the option to remove the
record when the connection associated with it is no longer available
(this is done on a timer check). Then you can get the event route
executed for expired contact and there you can trigger something to
trigger an un-register to the other server.
uac_req_send() should work fine in event routes.
Cheers,
Daniel
>
> Thanks again!
>
> Armen
>
>
> On Fri, Mar 6, 2015 at 12:32 PM, Daniel-Constantin Mierla
> <miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>
> Hello,
>
> On 06/03/15 03:38, Armen Babikyan wrote:
> > Hello,
> >
> > I am setting up this scenario using Kamailio 4.2.2:
> >
> > [UA] <-> [kamailio1] <-> [kamailio2] <-> [other stuff]
> >
> > UA connects to kamailio1 using SIP/WSS, kamailio1 proxies request
> > along to kamailio2. Note that my intent here is to have kamailio2
> > provide the registrar functionality. The kamailio2 (or something
> > behind it) can also initiate transactions to UA, like OPTIONS, for
> > example.
> >
> > I'm having an issue though: when the websocket connection between
> > kamailio1 and UA dies, transaction requests from kamailio2 show
> up to
> > kamailio1, and I get errors in kamailio1's logs because the WSS
> > connection is gone. I get messages as follows (debug=2):
> >
> > Mar 6 00:17:33 kamailio1 /usr/local/sbin/kamailio[5653]: WARNING:
> > <core> [msg_translator.c:2778]: via_builder(): TCP/TLS
> connection (id:
> > 0) for WebSocket could not be found
> > Mar 6 00:17:33 kamailio1 /usr/local/sbin/kamailio[5653]: ERROR:
> > <core> [msg_translator.c:1996]: build_req_buf_from_sip_req(): could
> > not create Via header
> > Mar 6 00:17:33 kamailio1 /usr/local/sbin/kamailio[5653]: ERROR: tm
> > [t_fwd.c:527]: prepare_new_uac(): could not build request
> > Mar 6 00:17:33 kamailio1 /usr/local/sbin/kamailio[5653]: ERROR: tm
> > [t_fwd.c:1777]: t_forward_nonack(): ERROR: t_forward_nonack: failure
> > to add branches
> >
> > At debug=4, I get the output here: http://pastebin.com/d3RumekG
> >
> > In a running tshark, I see kamailio1 responding to kamailio2 with a
> > "SIP/2.0 500 No error (2/TM)". It appears to me that this is
> > happening before t_relay() even returns.
> >
> > Is there a way to prevent the SIP 500 from being sent back to the
> > client? I am calling t_on_branch_failure("kam2bf") and
> > t_on_failure("kam2f"), with each of those handlers
> > (event_route[tm:branch-failure:kam2bf] and failure_route[kam2f])
> > written to print a log message, but it appears that neither of those
> > handlers are being called. I tried installing these handlers
> > independently to no avail.
> >
> > I also tried registering a t_on_reply() handler, thinking it was an
> > internally-generated SIP response that might make it through my
> > handler on its way out to kam2, but that is also not getting
> invoked.
> >
> > I want to return a 404 or something similar instead of having a 500
> > auto-returned for me.
> >
> > Related to this, is there a way to query kamailio's in-memory client
> > connectivity data structure for the connectivity status of a client?
> > Or is this something best done by keeping track of every client
> myself
> > using (e.g.) localcache?
> >
> > Any pointers are appreciated. Thanks!
>
> If you want tm not to send an reply internally, see:
>
> -
> http://kamailio.org/docs/modules/4.2.x/modules/tm.html#tm.f.t_set_disable_internal_reply
>
> Also, you can list the details of tcp connections via tcp -- see
> 'kamcmd
> help' for the tcp related commands. Iirc, something similar should be
> for websocket connections.
>
> The usrloc module keeps the id of the tcp connection for the
> client, the
> development version (master branch) has the option to delete the
> record
> if the connection is gone. For older versions there is also an
> option to
> remove those records with some delay
> (http://kamailio.org/docs/modules/4.2.x/modules/usrloc.html#usrloc.p.handle_lost_tcp),
> being a timer based cleanup.
>
> Cheers,
> Daniel
>
> --
> Daniel-Constantin Mierla
> http://twitter.com/#!/miconda <http://twitter.com/#%21/miconda> -
> http://www.linkedin.com/in/miconda
> Kamailio World Conference, May 27-29, 2015
> Berlin, Germany - http://www.kamailioworld.com
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing
> list
> sr-users at lists.sip-router.org <mailto:sr-users at lists.sip-router.org>
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
>
--
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio World Conference, May 27-29, 2015
Berlin, Germany - http://www.kamailioworld.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150310/acfddaae/attachment.html>
More information about the sr-users
mailing list