Dialogic Dialogic Global Call IP IP Phone User Manual


 
319
Dialogic Corporation
int Gc_HandleXferReq(int channel)
{
if(session[channel].ConfigFileParm.autoRejectCallXfer)
{
printf("GC_APP : [%d] Reject call xfer request\n",channel);
if(GC_SUCCESS != gc_RejectXfer(session[channel].crn, IPEC_SIPReasonStatus502BadGateway,
0, EV_ASYNC))
{
printf("GC_APP : [%d] Reject call xfer failed on device 0x%lx\n", channel,
session[channel].ldev);
PrintEventError(g_evtdev);
return GC_ERROR;
}
}
else
{
printf("GC_APP : [%d] Accept call xfer request\n",channel);
if(GC_SUCCESS != gc_AcceptXfer(session[channel].crn, 0, EV_ASYNC))
{
printf("GC_APP : [%d] Accept call xfer failed on device 0x%lx\n", channel,
session[channel].ldev);
PrintEventError(g_evtdev);
return GC_ERROR;
}
}
return GC_SUCCESS;
}
4.25.5.6 Making a Transferred Call
The following code snippet illustrates how party B makes the transferred call to party C after
accepting transfer request from party A
int Gc_MakeXferCall(int channelPrimary, int channelXfer)
{
GC_PARM_BLK * t_pParmBlk = NULL;
GCLIB_MAKECALL_BLK t_gclibmakecallblk ;
GC_MAKECALL_BLK t_gcmakecallblk = {0};
t_gcmakecallblk.gclib = &t_gclibmakecallblk;
int channelXfer;
memset(&t_gclibmakecallblk, 0, sizeof(GCLIB_MAKECALL_BLK));
gc_util_insert_parm_val(&t_pParmBlk, GCSET_SUPP_XFER, GCPARM_PRIMARYCALL_CRN,
sizeof(unsigned long), session[channelPrimary].crn);
t_gclibmakecallblk.ext_datap = t_pParmBlk;
t_gclibmakecallblk.destination = session[channelPrimary].rerouting_addrblk;
int frc = gc_MakeCall(session[channelXfer].ldev, &session[channelXfer].crn,
NULL, &t_gcmakecallblk, 0, EV_ASYNC);
if((GC_SUCCESS != frc) ||(0 == session[channelXfer].crn))
{
printf("GC_APP : [%d] Gc_MakeCall failed: : crn 0x%lx\n", channelXfer,
session[channelXfer].crn);
PrintGCError(session[channelXfer].ldev);
}
gc_util_delete_parm_blk(t_pParmBlk);
return GC_SUCCESS;
}