[OpenSIPS-Users] strange (?) loose_route() behaviour

Victor Gamov vit at euro-comm.net
Tue Oct 4 15:04:24 CEST 2011


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:123456789 at Y.Y.Y.Y: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 at mydomain>;tag=1406706537.
>> To:
>> <sip:123456789 at mydomain;user=phone>;tag=265de77d7e20be8300f0e1c6014f1c57.
>> Call-ID: 3234622210 at 192_168_0_114.
>> CSeq: 3 ACK.
>> Contact: <sip:myuser at 192.168.0.114: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 request
>>
>
> The 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vit.vcf
Type: text/x-vcard
Size: 156 bytes
Desc: not available
URL: <http://lists.opensips.org/pipermail/users/attachments/20111004/52fe0d23/attachment.vcf>


More information about the Users mailing list