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 > <mico...@gmail.com <mailto:mico...@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@lists.sip-router.org <mailto:sr-users@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
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users