< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

[reSIProcate] reINVITE problem


Hi,

I am seeing a race condition where a user agent mistakenly receives an
OnAnswer callback for the wrong sequence (I am using 0.9)

Here is what is happening (I have skipped the 100 Trying and 180 Ringing
messages for clarity):

1) UA1 ---- INVITE ----> UA2
(Cseq: 1 INVITE)

2) UA1 <----OK with SDP ---- UA2
(CSeq: 1 INVITE)
===> fires an OnAnswer callback, this is correct

3) UA1 ------ ACK -----> UA2
(CSeq: 1 ACK)

4) UA1 ---- re INVITE ---> UA2
(CSeq:2 INVITE)

5) UA1 <----OK with SDP ---- UA2
(CSeq: 1 INVITE)
(this one is a resend of 2)
===> fires an OnAnswer callback, this is incorrect (was already fired when
message 2) was received)

6) UA1 ------ ACK -----> UA2
(CSeq: 1 ACK)
(this is an ACK to message 5)

7) UA1 <--- OK with SDP ---- UA2
(CSeq:2 INVITE)
====> this is the response to the second reinvite, doesn't fire an OnAnswer
callback

8) UA1 ------ ACK -----> UA2
(CSeq: 2 ACK)

When my user agent (UA1) receives the retransmitted message 5), it thinks
it is an answer to the reinvite (message 4). However, even if the Call ID
is identical, the call sequence is different. Nonetheless the OnAnswer
callback is fired with the SDP corresponding to the answer to the first
INVITE, not the second.

Has anyone seen this before?

Thanks,
Christian