[sr-dev] git:master: siputils: added new function is_first_hop()

Daniel-Constantin Mierla daniel at asipto.com
Sat Jun 8 10:11:00 CEST 2013


Hello,

On 6/8/13 8:55 AM, Juha Heinanen wrote:
> daniel,
>
> is_first_hop() readme has this on replies:
>
>    For incoming SIP replies, it means that top Record-Route URI is
>    'myself' and source address is not matching it (to avoid detecting in
>    case of local loops). Note that it does not detect spirals, which can
>    have the condition for replies true also in the case of additional SIP
>    reply receival.
>
> in contact alias tutorial
>
> https://sip-router.org/wiki/tutorials/alias-example?&#in-dialog_requests
>
> i have implemented "is first hop" check by checking that reply does not
> have any other r-r headers except the ones added by the proxy itself
> when it relayed the request:
>
> in request route i set
>
> $avp("rr_count") = $rr_count;
>
> and in reply route, i test
>
> if ($rr_count == $avp(rr_count) + $rr_top_count) ...
>
> i think that this method also works in case of spirals if i understand
> correctly what spirals are.
>
> do you have any comment about possible equivalence or non-equivalence of
> the two methods?  could i safely use is_first_hop test also for replies
> in contact alias tutorial?
Using your approach is safer and good for spirals as well, but requires 
tm module to keep the avp. I need it for a stateless outbound proxy. I 
considered storing the number of r-r as a parameter in the new r-r 
header, but could become too big with ftag, nat, etc...

Detecting the spiral would require to iterate through r-r headers in 
reply, see if there is another match to 'myself' and if yes, check if 
source ip/port/proto matches the previous r-r header. That should make 
it complete. Right now I know if there is a spiral inside my network, like:

UA1 ==== K ==== Media Server ==== K ==== UA2

but is easy to check that source ip is media server.

Cheers,
Daniel

-- 
Daniel-Constantin Mierla
http://www.asipto.com




More information about the sr-dev mailing list