[OpenSIPS-Users] Opensips and CSeq number handling

Vlad Paiu vladpaiu at opensips.org
Wed Oct 21 11:48:07 CEST 2015


Hello,

Think a SIP trace would help a lot in debugging this situation - my 
guess is that there is sort of a "race" between the RE-INVITE being sent 
out, and in-dialog options pings ( eg. Re-INVITE goes out, then OpenSIPS 
sends in-dialog OPTION pings, then the ACK comes in and it's CSEQ is 
wrongly increased ).

Can you please provide a SIP trace for your scenario ?

Best Regards,

Vlad Paiu
OpenSIPS Developer

On 21.10.2015 12:32, Vlad Paiu wrote:
> Hello,
>
> Yes, if you are using in-dialog OPTIONS pings, OpenSIPS will mangle 
> the CSEQs of all in-dialog requests, after it has sent the first pings.
>
> Just making sure I understand the scenario... so the client is sending 
> a Re-INVITE and immediately after that it sends an UPDATE, and the ACK 
> for the RE-INVITE gets propagated with the CSEQ of the UPDATE ?
>
> Best Regards,
> Vlad Paiu
> OpenSIPS Developer
> On 20.10.2015 21:28, Patrick Wakano wrote:
>> Hi list,
>> An update about this issue.
>> The behavior I mentioned about Opensips incrementing the CSeq values 
>> only after second Re-Invite is incorrect. More tests showed me that 
>> this happens after the in-dialog Options the dialog module sends (I 
>> am creating it with "pP" options). This also explains why Opensips is 
>> changing the CSeq number, because it has to couple the CSeq numbering 
>> of the local generated Options with the original requests of the dialog!
>> The problem regarding the Ack with wrong CSeq number still occurs 
>> anyways. It seems that Opensips is not matching the Ack with the 
>> correct Invite transaction...
>>
>> Patrick
>>
>>
>> On Tue, Oct 20, 2015 at 12:31 PM, Patrick Wakano <pwakano at gmail.com 
>> <mailto:pwakano at gmail.com>> wrote:
>>
>>     Hello Opensips list!
>>
>>     Hope you all doing fine!
>>
>>     The purpose of this e-mail is to explain a problem I am facing
>>     and to understand a little bit more about the handling done by
>>     Opensips over the CSeq number when forwarding messages to the
>>     destination. I couldn't find any real good explanation over this
>>     subject so I wrote this huge e-mail, sorry for that...
>>
>>     I am trying to use the remote ID feature of Asterisk, but in some
>>     transfer scenarios the call gets dropped and after digging the
>>     problem I think it is related to the CSeq handling done by Opensips.
>>     This remote ID feature is configured to use the
>>     P-Asserted-Identity header to transmit the callee ID to the
>>     caller and it causes the exchange of Re-Invites and/or Updates
>>     during the call. The transfer scenario I mentioned is entirely
>>     handled by Asterisk, and as a result of the transfer it sends to
>>     Opensips the identity of the new peer, using a Re-Invite and an
>>     Update.
>>     First I would like to know how Opensips handles the CSeq number
>>     when proxying the Invite from one side to the other? My tests
>>     showed me that Opensips does not change the CSeq for the first
>>     Invite and first Re-invite, however for the second Re-invite and
>>     for requests after that it is always incrementing the value by
>>     one when forwarding it. Although it haven't caused any errors so
>>     far, I am not sure if this is correct. Why is Opensips
>>     incrementing it? My understanding is that the proxy was not
>>     supposed to change this field...
>>
>>     Now the problem I am facing: In a blind transfer scenario, the
>>     remote ID feature causes Asterisk to send a Re-Invite and right
>>     after an Update. Opensips increments the CSeq of both(because
>>     this happens to be the second Re-Invite of the dialog) and
>>     forward them to the destination. Both messages are answered with
>>     200 Ok. This follows by Asterisk sending an Ack with the same
>>     CSeq number used in the Re-Invite. This is the point where
>>     Opensips fails, it gets this Ack and forward it using the CSeq
>>     number of the Update and not the one of the Re-Invite. Because of
>>     this the destination discards this Ack and keeps retransmitting
>>     the 200 Ok for the Re-Invite, eventually the call is dropped by
>>     timeout or because some other Re-Invite happens without the prior
>>     one being properly handled.
>>
>>     Useful information:
>>     - If the Re-Invite followed by the Update is the first of the
>>     dialog, then the problem does not happen. The CSeq numbers are
>>     not incremented and the CSeq for the Ack is correct.
>>     - If due to unknown timing reasons, the Update gets forwarded
>>     before the Re-Invite (even though the Re-Invite is received
>>     first) the problem also does not happen. The CSeq numbers are
>>     incremented but the CSeq for the Ack gets the correct value. So
>>     it seems to me that the Ack is getting the last CSeq used to
>>     forward, and not the one of the corresponding Invite.
>>     - When I enable more traces(debug=4), I always fall in the case
>>     where the Update is forwarded before the Re-Invite and then the
>>     problem doesn't happen.
>>     - In an attended transfer, Asterisk does not send the Update so
>>     the problem does not happen.
>>     - Not sure why Asterisk is sending the Re-Invite immediately
>>     followed by an Update, nevertheless technically I couldn't see a
>>     problem with it.
>>     - I am using Opensips 1.11.3
>>
>>
>>     Best regards for all and sorry again for such a huge e-mail.
>>
>>     Patrick
>>
>>
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20151021/19b0c0b2/attachment-0001.htm>


More information about the Users mailing list