Bugs item #1680615, was opened at 2007-03-14 15:10 Message generated for change (Comment added) made by bogdan_iancu You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=743020&aid=1680615&group_id=139143
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: modules Group: ver 1.2.x >Status: Closed >Resolution: Invalid Priority: 5 Private: No Submitted By: Kovalevich Victor (vkc1974) Assigned to: Nobody/Anonymous (nobody) Summary: REGISTRAR & USRLOC: unable to unregister a user properly Initial Comment: It looks like save() function of REGISTRAR module does not remove a registration entry for a user while REGISTER request with Expires: 0 header processing. Such entry is kept within location table (database access schema was set to 3 (DB-Only scheme, see http://www.openser.org/docs/modules/1.2.x/usrloc.html). So that an entry in location table (in internal cache as well) is removed only when it has expired. While time term (since registrations has processed by registration entry will have been removed as time expiration) OpenSER considers that unregistered user as really registered. REGISTRAR module provides two methods using access to usrloc: lookup() and registered() which return true if there is an entry for a contact in the table discussed below. There are a part of openser.cfg script and appropriate part of log are below: xlog("L_DBG", "*** $rm *** Look for valid contact for $ru ($rU)\n"); lookup("location"); switch ($retcode) { case -1: xlog("L_DBG", "*** $rm *** There is no registaration for $ru in usrloc, try to store given message as offline\n"); # # MSILO - storing as offline message if (avp_check("$avp(s:source_site)", "eq/Asterisk PBX")) { remove_hf("User-Agent"); } # # This is amessage to a user in off-line state - try to store it xlog("L_DBG", "*** $rm *** m_store(\"$ru\")\n"); if (m_store("$ru")) { xlog("L_DBG", "*** $rm *** a message has been stored in off-line mode\n"); sl_send_reply("202", "Accepted, message has been stored"); xlog("L_DBG", "*** $rm *** [202, Accepted] has been sent to $fu($fU)\n"); } else { xlog("L_DBG", "*** $rm *** Unable to store a message for $ru\n"); sl_reply_error(); } avp_delete("$avp(s:source_site)"); return(); case -2: xlog("L_DBG", "*** $rm *** There is a valid contact for $ru but it does not support $rm\n"); sl_reply_error(); avp_delete("$avp(s:source_site)"); return(); case -3: xlog("L_DBG", "*** $rm *** Internal error has occured\n"); sl_reply_error(); avp_delete("$avp(s:source_site)"); return(); } xlog("L_DBG", "*** $rm *** $ru ($rU) looks to be on line (has been registered within usrloc)\n"); Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: *** MESSAGE *** Look for valid contact for sip:[EMAIL PROTECTED] (1446721212) Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: parsed uri: type=1 user=<1446721212>(10) passwd=<>(0) host=<192.168.4.44>(12) port=<>(0): 0 params=<>(0) headers=<>(0) Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: uri params: transport=<>, val=<>, proto=0 Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: user-param=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: method=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: ttl=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: maddr=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: lr=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: grep_sock_info - checking if host==us: 12==9 && [192.168.4.44] == [127.0.0.1] Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: grep_sock_info - checking if port 5060 matches port 5060 Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: grep_sock_info - checking if host==us: 12==12 && [192.168.4.44] == [192.168.4.44] Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: grep_sock_info - checking if port 5060 matches port 5060 Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: rewrite_uri: Rewriting Request-URI with 'sip:[EMAIL PROTECTED];LINEID=0fe75b47c6bc' Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: parsed uri: type=1 user=<1446721212>(10) passwd=<>(0) host=<192.168.5.55>(12) port=<>(0): 0 params=<LINEID=0fe75b47c6bc>(19) headers=<>(0) Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: uri params: transport=<>, val=<>, proto=0 Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: user-param=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: method=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: ttl=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: maddr=<>, val=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: lr=<> Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: xl_printf: final buffer length 133 Mar 14 14:35:54 lin-3 /usr/local/openser-1.2.0/sbin/openser[16099]: *** MESSAGE *** sip:[EMAIL PROTECTED];LINEID=0fe75b47c6bc (1446721212) looks to be on line (has been registered within usrloc) Please pay your attention that 1446721212 is really in "off line" state and REGISTER with Expires: 0 header has been sent from 1446721212 user. Described situation can be reproduced on openser v1.0.x and v1.2.0. Please find attached file with detailed log and openser configuration script I used. ---------------------------------------------------------------------- >Comment By: Bogdan (bogdan_iancu) Date: 2007-05-09 18:29 Message: Logged In: YES user_id=1275325 Originator: NO A new bug was opened for the real issue. ---------------------------------------------------------------------- Comment By: Kovalevich Victor (vkc1974) Date: 2007-03-20 13:14 Message: Logged In: YES user_id=490489 Originator: YES So that save() function returns "Ok" state when really following error has occured: no appropriate contact has been found to be deleted from "location" DB, there are no warning/error messages in the log, 200 Ok reply is sent to client site (it is not true as unregistaration has really failed), furthermore invalid contact keeps to be in "location" DB. ---------------------------------------------------------------------- Comment By: Bogdan (bogdan_iancu) Date: 2007-03-15 14:51 Message: Logged In: YES user_id=1275325 Originator: NO Hi, thanks for your troubleshooting - I seet that according to RFC3261 the missing port is equivalent to 5060, but fixing this wil only complicate thinks (imho) - probably the same problem appears when using the transaport parameter (transport=udp versus no param). I found a bit buggy from the client to use different contacts (even if echivalent from RFC point of view) during same session..... As the bug actually resides in a different place as orifinally tbought, please open a new bug report for "contact matching in usrloc" and I will close this one. thanks and regards, bogdan ---------------------------------------------------------------------- Comment By: Kovalevich Victor (vkc1974) Date: 2007-03-15 14:24 Message: Logged In: YES user_id=490489 Originator: YES Client application I use is based on SipX library v2.0. It construct Contact header field for - request #1 (Expires: 3600) REGISTER sip:192.168.4.44 SIP/2.0 From: "%56%69%63%74%6F%72%20%4B%6F%76%61%6C%65%76%69%63%68"<sip:[EMAIL PROTECTED]>;tag=19c77107 To: "%56%69%63%74%6F%72%20%4B%6F%76%61%6C%65%76%69%63%68"<sip:[EMAIL PROTECTED]> Call-Id: ecb028194d55f44897661b73666b7270 Cseq: 101 REGISTER Contact: "%56%69%63%74%6F%72%20%4B%6F%76%61%6C%65%76%69%63%68"<sip:[EMAIL PROTECTED];LINEID=0fe75b47c6bc> Expires: 3600 Date: Thu, 15 Mar 2007 12:07:51 GMT Max-Forwards: 70 User-Agent: Glooip 1.1.21.0 (WinNT) Accept-Language: Supported: replaces Via: SIP/2.0/UDP 192.168.5.55;branch=z9hG4bK-e243b8fa0b52;rport Content-Length: 0 - request #2 (Expires: 0) REGISTER sip:192.168.4.44 SIP/2.0 From: "%56%69%63%74%6F%72%20%4B%6F%76%61%6C%65%76%69%63%68"<sip:[EMAIL PROTECTED]>;tag=19c77107 To: "%56%69%63%74%6F%72%20%4B%6F%76%61%6C%65%76%69%63%68"<sip:[EMAIL PROTECTED]>;tag=329cfeaa6ded039da25ff8cbb8668bd2.003e Call-Id: ecb028194d55f44897661b73666b7270 Cseq: 102 REGISTER Expires: 0 Date: Thu, 15 Mar 2007 12:07:56 GMT Max-Forwards: 70 User-Agent: Glooip 1.1.21.0 (WinNT) Accept-Language: Supported: replaces Via: SIP/2.0/UDP 192.168.5.55:5060;branch=z9hG4bK-85a580ea1819;rport Contact: <sip:[EMAIL PROTECTED]:5060>;LINEID=0fe75b47c6bc Content-Length: 0 Pay your attention to the values of Contact header in both messages: Contact: "%56%69%63%74%6F%72%20%4B%6F%76%61%6C%65%76%69%63%68"<sip:[EMAIL PROTECTED];LINEID=0fe75b47c6bc> Contact: <sip:[EMAIL PROTECTED]:5060>;LINEID=0fe75b47c6bc According to RFC3261 given values are equivalent. But OpenSER extracts a substring between '<' and '>' symbols and considered it as a value (additional parameters beyond '<' '>' are ignored). So that update_contact() routine (module/registrar/save.c) cannot delete appropriate entry from user location DB table. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=743020&aid=1680615&group_id=139143 _______________________________________________ Devel mailing list Devel@openser.org http://openser.org/cgi-bin/mailman/listinfo/devel