[OpenSIPS-Users] Callpickup using EBR

Bogdan-Andrei Iancu bogdan at opensips.org
Fri Oct 5 12:08:22 EDT 2018


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




More information about the Users mailing list