[OpenSIPS-Users] Callpickup using EBR

Srigo Kanapathipillai ksrigo at gmail.com
Mon Oct 22 08:31:13 EDT 2018


Hi Bogdan,

Any updates regarding this issue?

Thanks
⁣Srigo Kana​

On 8 Oct 2018, 16:58, at 16:58, KSrigo <ksrigo at gmail.com> wrote:
>Hi Bogdan,
>
>- Yes calls to fs and Bob, fs and Charlie are 2 differents calls
>(different from-tag/call-id). 
>- Yes EBR is done on each fs leg.
>
>Yes for some reason when David takes the call, Opensips send an Invite
>to David and Cancel one of fs leg (which is the normal behavior) but
>then it send again an invite to David and Cancel it.
> 
>here is debug log: https://pastebin.com/48xqKi3Y
><https://pastebin.com/48xqKi3Y>
>
>
>
>Thanks in advance 
>Srigo
>
>> On Oct 5, 2018, at 6:08 PM, Bogdan-Andrei Iancu <bogdan at opensips.org>
>wrote:
>> 
>> Hi Srigo,
>> 
>> So, the calls between FS and Bob/Charlie are 2 different SIP calls,
>right ? and you do EBR on each of them (on the OpenSIPS with usrloc,
>rigth ?
>> 
>> As I understand from your description, the faulty step is the last
>one when David takes a CANCEL too, right ? Do you have pcaps + debug
>logs for this scenario ?
>> 
>> Regards,
>> 
>> Bogdan-Andrei Iancu
>> 
>> OpenSIPS Founder and Developer
>>  http://www.opensips-solutions.com
>> OpenSIPS Bootcamp 2018
>>  http://opensips.org/training/OpenSIPS_Bootcamp_2018/
>> 
>> On 10/05/2018 12:40 PM, KSrigo wrote:
>>> Hi,
>>> 
>>> I'm currently trying to add call pickup feature using event_routing
>module. It seems to work fine when I have only ONE inbound call to a
>given call group but when I have two calls to the same call group at
>the same, It's not working properly
>>> 
>>> Here is my scenario:
>>> 
>>> 								--> Opensips1 (usr_loc) --> Bob
>>> Alice --> Opensips1 --> Freeswitch (fork)
>>> 								--> Opensips1 (usr_loc) --> Charlie
>>> 
>>> David tries to pickup the phone ringing on Bob and Call (which is
>the same call because it's a fork but different A leg call_id)
>>> Bob, Charlie and David are in the same pickup group.
>>> 
>>> When Bob and Charlies ring, David dials *0 to pick the call:
>>> 	* Opensips immediately send an Invite to David for one of the
>incoming call (randomly choosen). Let's say for Bob
>>> 	* Opensips send a Cancel to Bob
>>> 	* Opensips send again the previous Invite to David (for the same A
>leg)
>>> 	* Opensips send a Cancel to David
>>> 
>>> 
>>> Here is my opensips code:
>>> 
>>>     dp_translate("DP_FEATURE", "$rU/$rU", "$var(attrs)");
>>>     #Is it a callpickup?
>>>     if($var(attrs) =~ "call_pickup" && $avp(caller_pickup_grp) !=
>"") {
>>>         t_newtran(); # 100 Trying is fired here
>>>         send_reply("480","Gone");
>>> 
>>>         #extension can belong to multiple group so let's raise an
>event for each group
>>>         $var(p) = 0;
>>>         $var(caller_pickup_grp_len) = 0;
>>>         $var(caller_pickup_grp_len) =
>$(avp(caller_pickup_grp){csv.count});
>>>         while ($var(p) < $var(caller_pickup_grp_len)) {
>>>             $avp(attr-name) = "group";
>>>             $avp(attr-val) =
>$(avp(caller_pickup_grp){csv.value,$var(p)});
>>>             xlog("L_NOTICE","$rm $ci hunting2: Caller pickup group
>[$avp(attr-val)] for [$fu]");
>>>             $avp(attr-name) = "picker";
>>>             $avp(attr-val) = $fu;
>>>             raise_event("E_CALL_PICKUP", $avp(attr-name),
>$avp(attr-val));
>>>             $var(p) = $var(p) + 1;
>>>         }
>>>         exit;
>>>     }
>>> 
>>> 
>>>     if (isbflagset(USRLOC_FOUND) && $avp(callee_pickup_grp) != ""){
>>>         t_newtran();
>>>         $var(p) = 0;
>>>         $var(callee_pickup_grp_len) = 0;
>>>         $var(callee_pickup_grp_len) =
>$(avp(callee_pickup_grp){csv.count});
>>>         while ($var(p) < $var(callee_pickup_grp_len)) {
>>>             #$avp(filter) = "group=1";
>>>            
>$var(group)=$(avp(callee_pickup_grp){csv.value,$var(p)});
>>>             $avp(filter) = "group="+$var(group);
>>>             xlog("L_NOTICE","$rm $ci relay: Callee pickup group
>[$var(group)]. Raise event");
>>>            
>notify_on_event("E_CALL_PICKUP","$avp(filter)","handle_pickup", "20");
>>>             $var(p) = $var(p) + 1;
>>>         }
>>>     }
>>> 
>>>     if (!t_relay()) {
>>>         xlog("L_WARN","$rm $ci relay: 500 Internal Server Error
>(t_relay failure)");
>>>         t_reply("500","Internal Server Error");
>>>         $avp(reason) = "SIP;cause=500;text=INTERNAL SERVER ERROR";
>>>         route(REASON);
>>>     }
>>>     exit;
>>> 
>>> 
>>> Any idea, what I missed here?
>>> 
>>> Thanks in advance for your help
>>> Srigo
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> 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/20181022/7b69d68a/attachment.html>


More information about the Users mailing list