[Users] Proxy Route Processing

Klaus Darilion klaus.mailinglists at pernau.at
Thu Mar 29 09:21:03 CEST 2007


The PRACK is an in-dialog request. There is no need to lookup() for 
in-dialog requests as the route and the destination are already known.

In your case the PRACK looks buggy, as the IP address in the RURI is the 
same as the IP address in the Route header. For loose-router in-dialog 
requests the RURI must be the destination SIP URI (the URI in the 
Contact: header of the INVITE) - and this URI can't be the IP address of 
the proxy but must be the IP address of the caller.

If you want the whole truth you have to read RFC 3261. (in dialog 
requests and loose-routing)

regards
klaus

Victor Gamov wrote:
> Klaus Darilion wrote:
>> Does xxx.xxx.xx.xx mean always the same IP address? Then Route header 
>> IP address and From and To would be identical. That would be a bug.
> 
> Yes it's a same IP.
> But why it a bug? I have two clients using the same OpenSER with address 
> XXX.XXX.XXX.XXX. Both clients use this IP as a "SIP proxy" parameter in 
> their equipments and use this address as domain of their AOR
> 
> I still confused with loose_route() behavior: why it use first and 
> single Route header previously placed by this proxy as route-decision 
> element? I hope that this Route must be deleted and R-RURI will be used 
> to make lookup() request.
> 
> BTW: packet in my example coming from ngrep not from OpenSER debug. So 
> it packet really getted by OpenSER for future processing.
> 
>> Thus, if you replace IP addresses make sure you replace them different.
>>
>> e.g. use "proxy.ip" and "gateway.ip" and "client.ip" as placeholder.
>>
>> regards
>> klaus
>>
>> Victor Gamov wrote:
>>> Hi guys!
>>>
>>> May be my previous message was some obscure.  I'll try to make it clear.
>>>
>>> I have following request comes to my OpenSER (xxx.xxx.xxx.xxx is IP of
>>> this OpenSER):
>>>
>>>> PRACK sip:1111 at xxx.xxx.xxx.xxx:5060;nat=yes SIP/2.0
>>>> Via: SIP/2.0/UDP 
>>>> 192.168.100.77:5060;branch=z9hG4bK_00179A52BC45_T59048F1A
>>>> From: "Vit-Horosho" 
>>>> <sip:vit-horosho at xxx.xxx.xxx.xxx>;tag=00179A52BC45_T1304371222
>>>> To: <sip:1111 at xxx.xxx.xxx.xxx:5060>;tag =0015E9A0D47D_T1002915332
>>>> Call-ID: CALL_ID3_00179A52BC45_T2098965184 at 192.168.100.77
>>>> RAck: 1909013112 135588358 INVITE
>>>> CSeq: 135588359 PRACK
>>>> Contact: <sip:vit-horosho at 192.168.100.77:5060>
>>>> Route: <sip:xxx.xxx.xxx.xxx;lr=on;ftag=00179A52BC45_T1304371222>
>>>> Content-Length: 0
>>>
>>> this message processed by OpenSER loose_route() and I found following 
>>> output in OpenSER debug:
>>>
>>>>  0(99796) parse_headers: flags=200
>>>>  0(99796) is_preloaded: No
>>>>  0(99796) grep_sock_info - checking if host==us: 11==11 && 
>>>> [xxx.xxx.xxx.xxx] == [xxx.xxx.xxx.xxx]
>>>>  0(99796) grep_sock_info - checking if port 5060 matches port 5060
>>>>  0(99796) after_strict: Next hop: 
>>>> 'sip:xxx.xxx.xxx.xxx;lr=on;ftag=00179A52BC45_T1304371222' is loose 
>>>> router
>>>>  0(99796) parse_headers: flags=ffffffffffffffff
>>>>  0(99796) rewrite_uri: Rewriting Request-URI with 
>>>> 'sip:xxx.xxx.xxx;lr=on;ftag=00179A52BC45_T1304371222'
>>>>  0(99796) after_strict: The last route URI: 
>>>> 'sip:xxx.xxx.xxx.xxx;lr=on;ftag=00179A52BC45_T1304371222'
>>>>  0(99796) parse_headers: flags=ffffffffffffffff
>>>
>>> It's strange for me why loose_route() change Request-URI with values 
>>> from Route. As I red at RFC3261 "16.12 Summary of Proxy Route 
>>> Processing" part (with my comments):
>>>
>>> 1. Request-URI must be rewrited based on location service (it will be 
>>> done after loose_route)
>>> 2. The proxy will inspect the URI in the topmost Route header
>>> field value. If it indicates this proxy, the proxy removes it
>>> from the Route header field (in my case Route must be removed because 
>>> it indicate this proxy)
>>> 3. Proxy will forward the request to the resource indicated
>>> by the URI in the topmost Route header field value (but we have not
>>> this Route after step 2) or in the Request-URI if no Route header
>>> field is present (so it must be forwarded to URI getted on step 1)
>>>
>>>
>>> So my question:
>>> Is it my misconfiguration and I must call loose_route() not for all
>>> requests coming to my proxy or my misunderstood of RFC3261 ?
>>>
>>> (the part of openser.cfg is followed):
>>>  >
>>>  > ----------- cut here ----------------
>>>  >
>>>  >   # we record-route all messages -- to make sure that
>>>  >   # subsequent messages will go through our proxy; that's
>>>  >   # particularly good if upstream and downstream entities
>>>  >   # use different transport protocol
>>>  >   record_route();
>>>  >
>>>  > #xdbg("\n\troute[0]: before loose_route() ou=$ou; ru=$ru\n");
>>>  >   # subsequent messages withing a dialog should take the
>>>  >   # path determined by record-routing
>>>  >   if ( loose_route() ) {
>>>  >     # mark routing logic in request
>>>  >     append_hf("P-hint: rr-enforced\r\n");
>>>  > #    route(1);
>>>  >   };
>>>  >
>>>  >   force_rport();
>>>
>>> Thanks for advise!
>>>
>>> -- 
>>> CU,
>>> Victor Gamov
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at openser.org
>>> http://openser.org/cgi-bin/mailman/listinfo/users
> 
> 




More information about the Users mailing list