On 03.10.2011 15:05, Vlad Paiu wrote:
Hello Victor,
Hi Vlad! Thanks for your reply. I see your point of view But one thing: Y.Y.Y.Y is local domain but OpenSIPS listen port 5060 only ACK R-URI and last Route header has port 5080
See my reply in-line. On 10/01/2011 12:23 PM, Victor Gamov wrote:Hi All! I have the following situation with loose_route() which looks strange for me. X.X.X.X is OpenSIPS-1.7.0 Y.Y.Y.Y is next-hop SIP device Z.Z.Z.Z is SIP UAC The following ACK come to OpenSIPS -------------- U 2011/10/01 00:54:49.046875 Z.Z.Z.Z:59343 -> X.X.X.X:5060 ACK sip:[email protected]:5080 SIP/2.0. Via: SIP/2.0/UDP 192.168.0.114:5060;branch=z9hG4bK84de8ff6d771e53a8aee9afc7831780;rport. Route: <sip:X.X.X.X;lr;ftag=1406706537;did=107.420a00d5>. Route: <sip:Y.Y.Y.Y:5080;lr>. From: "myuser" <sip:myuser@mydomain>;tag=1406706537. To: <sip:123456789@mydomain;user=phone>;tag=265de77d7e20be8300f0e1c6014f1c57. Call-ID: 3234622210@192_168_0_114. CSeq: 3 ACK. Contact: <sip:[email protected]:5060>. Content-Length: 0. -------------- Then OpenSIPS do loose_route(): -------------- Oct 1 00:54:49 [80328] DBG:core:parse_headers: flags=200 Oct 1 00:54:49 [80328] DBG:rr:is_preloaded: is_preloaded: No Oct 1 00:54:49 [80328] DBG:core:grep_sock_info: checking if host==us: 12==12 && [Y.Y.Y.Y] == [X.X.X.X] Oct 1 00:54:49 [80328] DBG:core:grep_sock_info: checking if port 5060 matches port 5080 Oct 1 00:54:49 [80328] DBG:core:grep_sock_info: checking if host==us: 12==12 && [Y.Y.Y.Y] == [X.X.X.X] Oct 1 00:54:49 [80328] DBG:core:grep_sock_info: checking if port 5060 matches port 5080 Oct 1 00:54:49 [80328] DBG:core:db_new_result: allocate 48 bytes for result set at 0x6fe0a8 Oct 1 00:54:49 [80328] DBG:db_mysql:db_mysql_get_columns: 1 columns returned from the query Oct 1 00:54:49 [80328] DBG:core:db_allocate_columns: allocate 28 bytes for result columns at 0x6ff320 Oct 1 00:54:49 [80328] DBG:db_mysql:db_mysql_get_columns: RES_NAMES(0x6ff328)[0]=[domain] Oct 1 00:54:49 [80328] DBG:db_mysql:db_mysql_get_columns: use DB_STRING result type Oct 1 00:54:49 [80328] DBG:core:db_allocate_rows: allocate 48 bytes for result rows and values at 0x6fafe0 Oct 1 00:54:49 [80328] DBG:db_mysql:db_mysql_str2val: converting STRING [Y.Y.Y.Y] Oct 1 00:54:49 [80328] DBG:domain:is_domain_local: Realm 'Y.Y.Y.Y' is local Oct 1 00:54:49 [80328] DBG:core:db_free_columns: freeing result columns at 0x6ff320 Oct 1 00:54:49 [80328] DBG:core:db_free_rows: freeing 1 rows Oct 1 00:54:49 [80328] DBG:core:db_free_row: freeing row values at 0x6faff0 Oct 1 00:54:49 [80328] DBG:core:db_free_rows: freeing rows at 0x6fafe0 Oct 1 00:54:49 [80328] DBG:core:db_free_result: freeing result set at 0x6fe0a8 Oct 1 00:54:49 [80328] DBG:rr:after_strict: Next hop: 'sip:X.X.X.X;lr;ftag=1406706537;did=107.420a00d5' is loose router Oct 1 00:54:49 [80328] DBG:core:parse_headers: flags=ffffffffffffffff Oct 1 00:54:49 [80328] DBG:rr:after_strict: The last route URI: 'sip:Y.Y.Y.Y:5080;lr' Oct 1 00:54:49 [80328] DBG:rr:run_rr_callbacks: callback id 1 entered with <> Oct 1 00:54:49 [80328] DBG:dialog:dlg_onroute: Route param 'did' not found route[1]: METHOD=ACK; R-URI=sip:Y.Y.Y.Y:5080;lr; du=sip:X.X.X.X;lr;ftag=1406706537;did=107.420a00d5; mf=2; bf=192; ds=Contact: sip:Y.Y.Y.Y:5080;lr --------------When you use the domain table to add domains to your OpenSIPS, an alias for that domain is automatically added to OpenSIPS. The loose_route() function determines the type of routing done by the previous proxy by checking the R-URI. If the R-URI host part is a local listening socket or one of the aliases, it implies that the previous hop was a Strict-Router and acts accordingly. This is what is happening in your case. Y.Y.Y.Y. is added as an alias by the domain module, so when OpenSIPS sees Y.Y.Y.Y part in R-URI host, it detects the previous host was a strict router because it sees itself in the R-URI, so it will route the request to the URI in the first Route header, which is X.X.X.X in your case, and it will overwrite the R-URI to point to the last route-header.If Y.Y.Y.Y is known as local domain from domain table, then loose_route() decide to send ACK to himself I hope this request will be send to Y.Y.Y.Y because topmost Route indicate this proxy and it will be removed and next Route will be used to route requestThe behaviour that you are describing here is the Loose Router one, but again, in your case, if you add a domain via the domain table, it only seems normal to me that a request to Y.Y.Y.Y. would trigger OpenSIPS to take the Strict Routing behaviour. From my point of view this is not a bug, because if you add a domain to OpenSIPS, it will know that it is responsible for that domain, and act accordingly.
-- CU, Victor Gamov
<<attachment: vit.vcf>>
_______________________________________________ Users mailing list [email protected] http://lists.opensips.org/cgi-bin/mailman/listinfo/users
