Hi everyone,

I am faced with what strikes me as a genuine mystery.  In the last few 
days, I have encountered several completely unrelated commercial SIP 
UAC implementations that all exhibit the same erroneous behaviour. 
This behaviour, while certainly incorrect as far as I can tell, is 
consistent across three or four completely unrelated stacks, leading 
me to wonder what I am missing.

The scenario is that UAC A places call to UAS B through stateful proxy P:

    A ---> P ---> B

P inserts Record-Route header on the initial INVITE in order to stay 
in the loop on sequential requests.  Nothing eccentric in that 
inherently.

When final 200 OK response to the initial INVITE transaction is 
relayed from P back to A, it contains a normal Contact URI which 
should be used as the remote target URI for sequential requests 
(absent any requests that would refresh it):

    Contact: <sip:x...@a.b.c.d:5060>

It also contains a Record-Route header which has been copied into the 
reply by B, of course, which looks something like this:

    Record-Route: <sip:ip.of.proxy.p;lr;param1=blah1;param2=blah2>

But bizarrely, the end-to-end ACK sent by A to this 2xx response has a 
request line formed not from the Contact in the 2xx reply, but from 
the content of the Record-Route header:

    ACK sip:ip.of.proxy.p;lr;param1=blah1;param2=blah2 SIP/2.0

Naturally, the proxy is quite bewildered and does not propogate this.

3261 scripture seems quite clear--at least, to me--on why this would 
be wrong.  12.2.1.1 ("Generating the [in-dialog] Request") says:

    If the route set is not empty, and the first URI in the route
    set contains the lr parameter (see Section 19.1.1), the UAC
    MUST place the remote target URI into the Request-URI and
    MUST include a Route header field containing the route set
    values in order, including all parameters.

Other parts of the spec make quite clear that this kind of ACK is an 
in-dialog request, and that the Contact in the 2xx response 
establishes the "remote target URI" aforementioned.  In other words, 
pretty commonsensical stuff.  I think anyone can agree the request 
line of the ACK should be:

    ACK sip:x...@a.b.c.d:5060 SIP/2.0

However, the fact that I have encountered this in completely unrelated 
situations with an improbable frequency leads me to believe that there 
must be some element of this I am failing to grasp.  Is it some sort 
of legacy behaviour and/or RFC 2543 backward compatibility mode that 
is causing this, or perhaps something else?

Thanks,

-- 
Alex Balashov - Principal
Evariste Systems LLC
1170 Peachtree Street
12th Floor, Suite 1200
Atlanta, GA 30309
Tel: +1-678-954-0670
Fax: +1-404-961-1892
Web: http://www.evaristesys.com/
_______________________________________________
Sip-implementors mailing list
Sip-implementors@lists.cs.columbia.edu
https://lists.cs.columbia.edu/cucslists/listinfo/sip-implementors

Reply via email to