If I remember correctly, the RFC says that:
1) The 2xx ACKs are a new transaction.
2) Each new transaction must have a different branch in the Via header.
So, for the transitive property...
Bye.
Bogdan-Andrei Iancu wrote:
Hi Federico,
I tried to go through the RFC to find something backing up their statement. But lucky for us, I didn't find. Here is the part describing how a 2xx ACK must be build:
13.2.2.4 2xx Responses
The UAC core MUST generate an ACK request for each 2xx received from the transaction layer. The header fields of the ACK are constructed in the same way as for any request sent within a dialog (see Section 12) with the exception of the CSeq and the header fields related to authentication. The sequence number of the CSeq header field MUST be the same as the INVITE being acknowledged, but the CSeq method MUST be ACK. The ACK MUST contain the same credentials as the INVITE. If the 2xx contains an offer (based on the rules above), the ACK MUST carry an answer in its body. If the offer in the 2xx response is not acceptable, the UAC core MUST generate a valid answer in the ACK and then send a BYE immediately.
looking to:
12.2 Requests within a Dialog 12.2.1 UAC Behavior 12.2.1.1 Generating the Request
there are no special requirements for VIA branch. Also in
8.1.1.7 Via
The branch parameter value MUST be unique across space and time for all requests sent by the UA. The exceptions to this rule are CANCEL and ACK for non-2xx responses. As discussed below, a CANCEL request will have the same value of the branch parameter as the request it cancels. As discussed in Section 17.1.1.3, an ACK for a non-2xx response will also have the same branch ID as the INVITE whose response it acknowledges.
there is no limitation about the 2xx ACK branch - it says that it must be the same for non-2xx ACK and CANCEL but this does not imply that for 2xx ACK it *must* be different.
Maybe they can point out more precisely the RFC section that supports their statement.
regards, bogdan
Federico Giannici wrote:
I'm using OpenSER 1.0.0 under OpenBSD 3.9-stable amd64.
An user of our SIP server have a VoIP PBX called "voispeed".
Their calls always hung up after 20 seconds because they say that our SIP server doesn't correctly handle the branch parameter.
They say that RFC3261 specifies that ACK messages for a 2xx reply MUST use a different "branch" parameter (contrary to ACK messages to non 2xx replies). But it seems that OpenSER doesn't recognize these ACKs with different branch parameter and keeps sending the 200 reply.
Can somebody confirm this bug in OpenSER? Ant solution?
Thanks.