Dialogic 05-2239-009 User Manual

Page of 604
327
Dialogic Corporation
To answer the T.38 offer, the application must associate a Fax device with the Media device and set 
local T.38 media capability before calling the gc_AnswerCall( ) function. The following code 
provides an example: 
INT32 processEvtHandler()
{
   METAEVENT        metaEvent;
   GC_PARM_BLK      *parmblkp = NULL;
   GC_PARM_DATAP    t_gcParmDatap = NULL;
   GC_PARM_BLK      *parmblkp2 = NULL;
   EXTENSIONEVTBLK  *ext_evtblkp = NULL;
   IP_CONNECT       ipConnect;
   IP_CAPABILITY    ipcap;
   :
   switch (evtType)
   {
      case GCEV_OFFERED:
         /* parse PARM_BLK examine data */
         parmblkp = (GC_PARM_BLK *)metaEvent.extevtdatap;
         while (t_gcParmDatap = gc_util_next_parm(parmblkp, t_gcParmDatap))
         {
            switch(t_gcParmDatap->set_ID)
            {
               case IPSET_FOIP:
                  switch(t_gcParmDatap->parm_ID)
                  {
                     case IPPARM_T38_OFFERED:
                         /* connect media with fax devices */
                         ipConnect.version = 0x100;
                         ipConnect.mediaHandle = pline->mediaH;
                         ipConnect.faxHandle = pline->faxH;
                         ipConnect.connectType = IP_FULLDUP;
                         
                         gc_util_insert_parm_ref(&parmblkp2, IPSET_FOIP, IPPARM_T38_CONNECT,
                                                 (sizeof(IP_CONNECT)), (void *)(&ipConnect));
                         gc_SetUserInfo(GCTGT_GCLIB_CRN, pline->crn, parmblkp2, GC_SINGLECALL);
                         gc_util_delete_parm_blk(parmblkp2);
                         
                         /* set T.38 media capability*/
                         ipcap.capability = GCCAP_DATA_t38UDPFax;
                         ipcap.type = GCCAPTYPE_RDATA;
                         ipcap.direction = IP_CAP_DIR_LCLTXRX;
                         ipcap.extra.data.max_bit_rate = 144;
                         
                         gc_util_insert_parm_ref(&parmblkp2, GCSET_CHAN_CAPABILITY,
                                                 IPPARM_LOCAL_CAPABILITY, 
                                                 sizeof(IP_CAPABILITY), &ipcap);
                         gc_SetUserInfo(GCTGT_GCLIB_CRN, pline->crn, pParmBlock2,
                                        GC_SINGLECALL);
                         gc_util_delete_parm_blk(pParmBlock2);
                         /* received completion event for gc_Extension() */
                         gc_AnswerCall(pline->crn, 0, EV_ASYNC);
                      break;
                  }
               break
            }
         }
      break
   }
}