[OpenSIPS-Users] Call pickup

duane.larson at gmail.com duane.larson at gmail.com
Mon Jun 11 22:18:20 CEST 2012


Yeah it makes a little sense. I guess I would need to do a MySQL DB query  
and add the URI into an AVP.

I found this post on Nabble and thought I might be able to use it
http://opensips-open-sip-server.1449251.n2.nabble.com/NEW-exchanging-info-between-dialogs-td4975220.html#a5035451

I will test to see if this works. Here is what I am thinking

C sends a Call Pickup INVITE to PREFIX+A.

OpenSIPS does the following when it gets this INVITE
if(search("^Replaces:.*;")){
# Grab the CallID in the Replaces Header so we can cancel the call to User B
$var(Replacesb2b) = $(hdr(replaces){s.select,0,;});
exec_msg("/usr/local/sbin/opensipsctl fifo t_uac_cancel $var(Replacesb2b)  
2");

# - Set the dialog variables so the B2B dialog can see who we need to fail  
the call over to
store_dlg_value("CallPickupGrabber","$tU"); <-- tU equals the first caller  
- Caller A
# - Set the dialog variables so the B2B dialog can see what CallID to Cancel
store_dlg_value("CallPickupCallID","$ci");
# - Set the value of the new URI the call needs to go to when it fails over
store_dlg_value("CallPickupNewCallee","$fu"); <-- fu equals the person  
trying to capture the Call Pickup - Caller C
};


So a Cancel gets sent to B

Now the first dialog, the B2B dialog, goes to failure route and we need to  
do the following within the failure_route

if(get_dialog_info("CallPickupCallID","$var(x)","CallPickupGrabber","$fU")  
) { <-- fU equals the first caller - Caller A
$dlg_val("CancelCall") = $var(x)
}

if(get_dialog_info("CallPickupNewCallee","$var(y)","CallPickupGrabber","$fU")  
)  
{ <-- fU equals the first caller - Caller A
$dlg_val("NewBranch") = $var(y)
}

# Cancel the call from Caller C who wanted to do a call pickup
exec_msg("/usr/local/sbin/opensipsctl fifo t_uac_cancel  
$dlg_val("CancelCall") 1");

# Set the new Branch call
$ru = "sip:" + $dlg_val("NewBranch");

t_relay();
exit;

So I would think that Caller C will press a softkey when he wants to do a  
CallPickup and by pressing the key the call should be canceled and then  
Caller C's phone will ring and he can then talk to Caller A


Not sure if my logic is correct or if the get_dialog_info will solve my  
problems. Any thoughts on if you think this might work or not (I'll have to  
test later)?




On , Bogdan-Andrei Iancu <bogdan at opensips.org> wrote:
> Well, this is indeed a missing piece - some kind of way to pass  
> information between transactions - either directly append a new branch  
> for another transaction (based on AVP matching ?), either a more generic  
> way to add an AVP to another transaction.



> Does it make sense ?



> Regards,



> Bogdan-Andrei Iancu

> OpenSIPS Founder and Developer

> http://www.opensips-solutions.com





> On 06/11/2012 08:08 PM, duane.larson at gmail.com wrote:


> I was thinking about this last night and with the Snom Phones I am able  
> to do the following.



> I know how to cancel the first call to the PhoneB and I am thinking that  
> I can cancel the call that PhoneC does when it wants to do a Call Pickup.  
> The thing I am not sure about is how on the first call to add a branch to  
> PhoneCs URI. How can I pass PhoneC's URI info to the first call so that I  
> can add the new branch?



> On , Bogdan-Andrei Iancu bogdan at opensips.org> wrote:

> > Hi Duane,

> >

> >

> >

> > How I see this "call pickup" functionality:

> >

> >

> >

> > 1) A calls to B, call is in ringing state

> >

> >

> >

> > 2) C wants to pickup ringing call to B (this means C want to get to his  
> phone the the call ringing from B).

> >

> >

> >

> > 3) C dials PREFIX+B, indicating he wants to grab the call for B)

> >

> >

> >

> > 4) the INVITE for (for the call from C) should add a new branch to C (  
> for the call to B) and to cancel the branch to B

> >

> >

> >

> > 5) as a result, the call from C will be terminated and the call from A  
> will be serially forked to C.

> >

> >

> >

> > This is how I see this scenario.

> >

> >

> >

> > Now there are same small missing pieces to make this happen - the most  
> important is first to decide if the manipulation over the first call  
> (adding a new branch and terminating the ongoing branch) should be done  
> from script or via MI.

> >

> >

> >

> > Regards,

> >

> >

> >

> > Bogdan-Andrei Iancu

> >

> > OpenSIPS Founder and Developer

> >

> > http://www.opensips-solutions.com

> >

> >

> >

> >

> >

> > On 06/10/2012 03:44 AM, osiris123d wrote:

> >

> >

> > Bogdan,

> >

> >

> >

> > I'm trying to figure out how to get Call Pickup working since the PSTN

> >

> > provider can't handle the Replaces: header. Here is my post here

> >

> >

> >

> >  
> http://opensips-open-sip-server.1449251.n2.nabble.com/B2B-with-Call-Pickup-td7580224.html

> >

> >

> >

> > I see in this post you talk about using MI commands and the TM and  
> Dialog

> >

> > modules and the failure route to make this work. I think with the TM  
> module

> >

> > I can send a CANCEL to the original Callee but how would you make the  
> call

> >

> > then fail over to the Failure Route so I can send it to the next callee?

> >

> >

> >

> > --

> >

> > View this message in context:  
> http://opensips-open-sip-server.1449251.n2.nabble.com/Call-pickup-tp7127393p7580251.html

> >

> > Sent from the OpenSIPS - Users mailing list archive at Nabble.com.

> >

> >

> >

> > _______________________________________________

> >

> > 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/20120611/f3536227/attachment.htm>


More information about the Users mailing list