Just tested the AVP method and that is a lot cleaner since CallerC's
INVITE with the Replaces header gets canceled way before the
failure_route sets the new branch to CallerC. This method also doesn't
give me the issue that I was seeing in the last method where CallerA
hung up and CallerC still thought CallerA was on the phone.
Here is what I did
RouteX
if(search("^Replaces:.*;")){
$var(Replacesb2b) = $(hdr(replaces){s.select,0,;});
exec_msg("/usr/local/sbin/opensipsctl fifo t_uac_cancel
$var(Replacesb2b) 2 > /tmp/test.txt");
t_reply("404", "All Good"); <----------- Can you think of anything
better to do here?
exit;
};
Failure_Route
if(avp_db_load("$ru/username","$avp(callpickupDest)"))
{
if ( $avp(callpickupDest) != null)
{
$rU = $avp(callpickupDest);
alias_db_lookup("dbaliases" , "d");
lookup("location");
t_relay();
exit;
}
}
I'm trying to figure out if there is a better way of using the IF
statement in RouteX instead of looking to see if there is a Replaces
header. With Snom phones I can't put a prefix in front of the number
or else it wouldn't be able to SUBSCRIBE for dialog updates and see if
someone is calling the person. I'm sure there is some way. Might just
need to add a prefix and when the SUBSCRIBE comes in strip it off.
Thanks for the help Bogdan!
On , [email protected] wrote:
> Well using "get_dialog_info" works but on the Snom phone it won't
ring since initially you are already on a call. Then the Call is
canceled and you see that a second line is receiving a call. So with
you select that second line you are connected to CallerA. Its a dirty
hack but works. The only issue I see is when CallerA hangs up CallerC
still thinks he is on the call and the call doesn't terminate. Will
have to see whats going wrong there.
>
>
>
>
>
> I will still try the AVP way and see if that is a cleaner hack.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On , [email protected] wrote:
>
>
> > 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"); # - 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"); };
>
>
> >
>
>
> >
>
>
> > 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")
) { $dlg_val("CancelCall") = $var(x)
>
>
> > }
>
>
> >
>
>
> >
if(get_dialog_info("CallPickupNewCallee","$var(y)","CallPickupGrabber","$fU")
) { $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 [email protected]> 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, [email protected] 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 [email protected]> 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
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > > > [email protected]
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > > > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > > >
>
>
> > >
>
>
> > >
>
>
> > >