[OpenSIPS-Users] CANCEL handling

Bogdan-Andrei Iancu bogdan at opensips.org
Wed Jan 9 14:29:17 CET 2013


Hi Mariana,

According to RFC3261, the CANCEL processing (as cancelling the call) is 
not up to a proxy, but up to the end devices. So a proxy has to simply 
relay all received info (INVITE and CANCEL) - it cannot terminate the 
call by itself.

So you have to relay both INVITE and CANCEL and let the end device to 
reject the call.

Regarding Flavio's suggestion - that function (as name says) solves the 
problem only for the flags, but not for changes as headers or SDP, AVPS, 
etc.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com


On 01/09/2013 02:31 PM, Mariana Arduini wrote:
> Hi All!
>
> Thank you both for the hints and explanation.
>
> The retransmission of CANCEL messages would for sure be really 
> helpful, but we´d like to be able to handle cases where processing the 
> INVITE takes too long. If introducing some huge delays in INVITE 
> processing, OpenSIPS will relay it when the processing finally ends, 
> but UAC had already canceled it, so UAS picks a dead call up.
>
> Flavio´s suggestion looks interesting. I´m just wondering if 
> t_flush_flags() would update all kind of changes in the SIP message. 
> We perform lots of translations in headers and SDP and not applying 
> any of them would totally mess everything up. Any idea of limitations?
>
> I begin to think that including timeouts during INVITE processing with 
> smaller values than the previous hop fr_inv would be less risky. I´d 
> like to hear your oppinions.
>
> Thanks again for the help!
>
> Regards,
> Mariana.
>
>
>
> On Wed, Jan 9, 2013 at 9:54 AM, Bogdan-Andrei Iancu 
> <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>
>     Hi Mariana,
>
>     If CANCEL hits opensips while the the INVITE is still under
>     processing (in a different process), the INVITE transaction will
>     not exist yet (it is created by t_relay), so the t_check_trans()
>     will return false -> script will exit without doing anything for
>     the CANCEL - more or less the CANCEL will be dropped without being
>     replied or fwded. This will force retransmission of Cancel ->
>     buying more time to finish the processing of the INVITE.
>
>     Hope this helped.
>
>     Regards,
>
>     Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com
>
>
>     On 01/08/2013 10:49 PM, Mariana Arduini wrote:
>>     Hello all,
>>
>>     I hope somebody can give me a kind hint on what to do here.
>>
>>     We have this piece of code for CANCEL handling:
>>
>>         # CANCEL processing
>>         if (is_method("CANCEL")) {
>>             if (t_check_trans()) {
>>                 t_relay();
>>             }
>>             exit;
>>         }
>>
>>     What happens is sometimes we take too long to process the INVITE
>>     due to some DB issues, and the UAC sends us a CANCEL before we
>>     relay the INVITE.
>>
>>     We don´t use t_newtran() because of this big warning in docs
>>     saying that "the changes on the request that are made after this
>>     function call will not be saved into transaction!!!". We need to
>>     perform a lot of changes in the requests and I understand this
>>     wouldn´t be possible after calling t_newtran().
>>
>>     So our transaction is not created untill we relay the INVITE,
>>     which means that any CANCEL received before that will be dropped.
>>
>>     We also tried testing the CANCEL messages we´re receiving in
>>     these cases with has_totag() and loose_route(), but they won´t
>>     pass as well.
>>
>>     Is there any way to verify a CANCEL message in this scenario and
>>     relay it in case is belongs to a valid transaction?
>>
>>     Any help will be much appreciated.
>>
>>     Regards,
>>     Mariana.
>>
>>
>>     _______________________________________________
>>     Users mailing list
>>     Users at lists.opensips.org  <mailto: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/20130109/725e5492/attachment.htm>


More information about the Users mailing list