[Asterisk-Dev] SIP-to-SIP release problem on B-side when using reinvite

Markku Korpi Markku at Korpi.de
Fri May 14 07:18:06 MST 2004


For the records:
This problem seems to be solved after changes in the CVS (in channel.c?) 
during the last  weekend. The SIP release with reinvites works now 
properly, both with
chan_sip and chan_sip2u.

Thanks,
-Markku

John Todd wrote:

> At 10:44 AM +0200 on 5/5/04, Markku Korpi wrote:
>
>> There seems to be a bug in release behaviour of *, when a SIP-to-SIP 
>> call is
>> released by A (calling party) and canreinvite=yes.
>> Namely when A hangs up first, then called party B does not get BYE 
>> from *
>> even though * terminates the call. The call continues to exist on the
>> B-side, while B just hears silence. If the call release is initiate 
>> by B,
>> then the release procedure works properly. In hope to find someone who
>> is/was fihgting with this problem, too, I am describing the problem 
>> in a bit
>> more detail, below.
>>
>> The behaviour is the same with this weekends chan_sip and Olle's latest
>> chan_sip2. I am continuing with debugging, but perhaps someone 
>> already has a
>> diff or a pointer/hint for fixing of this bug?
>>
>> The problem does not appear when reinvites are not used, of course. 
>> However
>> in my current case the customer wants to keep the payload traffic 
>> caused by
>> the SIP-to-SIP calls from its servers and therefore wants * to make 
>> use of
>> SIP reinvites.
>>
>> The problem is extremely deterministic, but nobody else seems to have
>> complained, since I could not find any bug report or other 
>> discussions on
>> this subject.
>>
>> For completeness and for the records, this is at first how the call with
>> reinvites is succesfully established (derived from * sip debug output):
>> (BTW: In this test A was Siemens Pylix and B was X-lite.)
>>
>> A ---------Invite----> * -------Invite ----> B
>>                        * <----100 trying---- B
>> A <----180 Ringing---- * <----180 Ringing--- B
>> A <------200 OK------- * <------200 OK------ B
>>                        * -------Ack--------> B
>> A <------200 OK------- * <------200 OK------ B
>> A -------Ack---------> *
>> at this point call is actually already established, but due to
>> canreinvite=yes * continues with reinvites to A and B:
>>
>> A <--------Invite----- * -------Invite ----> B
>>                        * <----100 trying---- B
>>                        * <----200 OK ------- B
>>                        * -------Ack--------> B
>>                        * -------Ack--------> B
>> A -------200 ok------> *
>> A <------Ack---------- *
>> A <================= talking ==============> B
>>
>> Now the call is established, BUT now it goes wrong when call is 
>> released by
>> A:
>>
>> A ---------Bye-------> *
>> A <------200 OK------- * -------Invite ----> B
>>                Note 1) * <----100 trying---- B
>>                        * <----200 OK ------- B
>>                        * <----200 OK ------- B Note 2)
>>                        * <--------Bye------- B
>>                        * -----200 OK ------> B
>>                        * <----200 OK ------- B
>>                        * <----200 OK ------- B
>>
>> Note 1: At this point * sends reinvite to B correctly but immediately 
>> exits
>> the hangup. Instead, * should have waited for 200 and sent Ack in the 
>> same
>> way as it does when B hangs up first (see trace of that case below).
>> Note 2: B is expecting to get SIP Ack from *, but of course it never 
>> comes
>> because * finished the call already. B tries to repeat 200 OK and then
>> finally tries BYE, etc.
>>
>> Now, here is how it works when B releases first, and how it should 
>> work in
>> the above case, too:
>>
>>                        * <--------Bye------- B
>> A <------Invite ------ * -----200 OK ------> B
>> A ------(Trying)-----> *
>> A -------200 OK------> *
>> A <------Ack---------- *
>> A <------Bye---------- *
>> A -------200 OK------> *
>> As you can see, * retrieves at first the call from  the endpoint by 
>> means of
>> the (re)invite , and then executes call clearing. After this A hears 
>> busy
>> tone (from its its VoIP box) and will hang up.
>>
>> Before I start making and applying a bug fix for this: Does this sound
>> familiar to anyone? How did you fix the problem?
>>
>> Markku Korpi
>
>
>
> Yes, it does sound familiar.  I also see failed SIP BYE messages 
> during certain conversations where IAX2 is used as a trunk.  I'm sorry 
> I don't have a lot more data or as well-described a scenario as you 
> have put together above, but my time is very limited these days and I 
> have a tough time spending cycles on Asterisk debugging due to work 
> priorities.  Let me just say that you're on target, and I await your 
> discoveries and repairs.
>
> JT
>



More information about the asterisk-dev mailing list