[OpenSER-Devel] [Serdev] Possible bug in the tm module in the presence of packet loss/branches

Anatoly Pidruchny apidruchny at newxt.com
Thu Mar 13 19:49:08 CET 2008


Dan Pascu wrote:
> On Thursday 13 March 2008, Alex Hermann wrote:
>   
>>> I was expressing more of an idea for an alternate approach, out of
>>> the RFC specs, because as it is the RFC seems to not be able to cover
>>> this case. What I meant, is that if the CANCEL is sent after a 200
>>> OK, but before the ACK, it should mean that the call is no longer
>>> desired (it was canceled already).
>>>       
>> The INVITE can't be cancelled anymore because the transaction is
>> deleted in the UAS after sending the 200 OK (and it is not allowed to
>> send more than 1 final response), so there is no way to indicate that
>> the INVITE is cancelled.
>>     
>
> With the current RFC specs, yes. But if the CANCEL would be allowed to be 
> sent until the dialog is confirmed by the ACK, then the UAS would be 
> required to keep the transaction around until ACK-ed and could process 
> this case.
>   

The INVITE transaction IS kept around in the UAS until ACK is received. 
But yes, the dialog is created when 200 OK is sent.
>> If you looking for way to extend/change the SIP rfc's, why not allow a
>> BYE instead of the ACK, or introduce a NACK request to get the wanted
>> behaviour?
>>     
>
> I'm sure there is more than one way to do this. The NACK sounds the 
> simplest and least disruptive of all the ideas mentioned so far.
>   

The NACK may work, but it would be a very big and fundamental RFC 
change. And it would be very disruptive, because it is not compatible 
with the current RFC.

How about my proposal to stop resending INVITE and start resending 
CANCEL in a proxy if a provisional response is not received? May be I am 
wrong, but I think it can help and it is really a minor change in RFC 
that in fact preserves compatibility.

>>> Of course as it is now, any device that is RFC conformant will ignore
>>> that CANCEL, but if this callflow would be a valid one, devices could
>>> cope with scenarios like the ones discussed in this thread.
>>>       
>> What happens (in practice) if you send a BYE instead of the ACK?
>>     
>
> I don't know, but a BYE sounds too much like the sessions is already 
> established and needs to be closed.
>   

BYE is another transaction. BYE in this situation may, just may, work 
for some implementations. But, for example, it will not be pretty for 
proxies that work on transaction level. Terminating the dialog with BYE 
does not mean that the INVITE transaction will be canceled.

Regards,
Anatoly.




More information about the Devel mailing list