[OpenSIPS-Users] how to cancel an INVITE before the callee receive it?

Liviu Chircu liviu at opensips.org
Tue Mar 3 14:15:23 CET 2015


The previous solution won't work because you can't call 
t_was_cancelled() in the main route... You should:

1) set $T_fr_timeout and $T_fr_inv_timeout to 1
2) t_on_failure(...) [1]
3) t_relay() to a bogus gateway [2]
4) catch the 408 timeout in the failure route. Using an $avp counter, go 
back to step 1) until 30 tries have been done. In this failure route, 
you may now also use t_was_cancelled().

[1] : http://www.opensips.org/Documentation/Script-Routes-2-1#toc3
[2] : http://www.opensips.org/html/docs/modules/2.1.x/tm.html#trelay-1

On 03.03.2015 14:57, Liviu Chircu wrote:
> Hello merlin,
>
> First of all, from a user's perspective, a Post-Dial Delay of up to 30 
> seconds should be quite annoying. Your SIP logic will also increase 
> the amount of traffic received by your platform, due to lots of 
> retransmissions for all failed calls.
>
> That being said, here is what you should add in order to make it work:
>
> t_newtran();
> ...
> while (...) {
>     if (t_was_cancelled()) {
>         t_reply("487", "Request Cancelled");
>         exit;
>     }
>     ...
> }
>
> Best regards,
> Liviu Chircu
> OpenSIPS Developer
> http://www.opensips-solutions.com
> On 03.03.2015 10:45, merlin.li at tsingch.com wrote:
>> Hi,
>>
>> Or is there a way i can break the while loop in the route block when 
>> i receive the CANCEL request?
>>
>> ------------------------------------------------------------------------
>> merlin.li at tsingch.com
>>
>>     *From:* merlin.li at tsingch.com <mailto:merlin.li at tsingch.com>
>>     *Date:* 2015-03-03 16:14
>>     *To:* users <mailto:users at lists.opensips.org>
>>     *Subject:* how to cancel an INVITE before the callee receive it?
>>     Hi all,
>>
>>     Let me describe my scenario first.
>>
>>     if the callee is not online, opensips will wait for 30s.
>>     During the 30s, if the callee be online, opensips will send the
>>     invite to it.
>>
>>          $avp(timeout) = 30 ;
>>                             while( !lookup("location","m") ){
>>                                    if( $avp(timeout)==0 ){
>>                                    send_reply("420","Can not find the callee!");
>>                                     exit;
>>                                 }
>>                                 sleep("1");
>>                                 $avp(timeout) = $avp(timeout)-1;
>>                             }
>>
>>     This works well, the only problem is the caller can not cancel it
>>     during that 30s
>>     t_cancel_branch() only can be used in onreply_route, but at that
>>     time, callee is offline.
>>
>>     My question is :
>>     Is it possible that terminate a request in route block?
>>
>>
>>     ------------------------------------------------------------------------
>>     merlin.li at tsingch.com
>>
>>
>>
>> _______________________________________________
>> 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/20150303/31768207/attachment.htm>


More information about the Users mailing list