⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dm3ntsch.c

📁 ipt网关源码
💻 C
📖 第 1 页 / 共 3 页
字号:
}


///////////////////////////////////////////////////////////////////////
//        NAME : OnNetTscH245DataEvt
// DESCRIPTION : Called when NetTSC_..H245Data event is recieved
//       INPUT : pNetTsc      Pointer to the NetTSC  structure
//               pEvtData     Pointer to the H425 data Structure.
//      OUTPUT : None.
//     RETURNS : A User defineable pointer to VOID
//    CAUTIONS : None.
///////////////////////////////////////////////////////////////////////
LPVOID OnNetTscH245DataEvt (LPDM3NetTSC pNetTsc,
                            NetTSC_EvtH245Data_t *pEvtData)
{
	CallParameters  *lpCallParm;
	GateSession     *lpCamelSession;

	lpCallParm = NETTSC_GET_CALLPARM(pNetTsc);
	lpCamelSession = (GateSession *)(pNetTsc->lpUserInfo);

   switch (pEvtData->Type) {

	   case NetTSC_EvtH245Data_Type_NonStdCmd:

			 gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got NetTSC_EvtH245Data_Type_NonStdCmd"));
	         gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Data length is %d",pEvtData->Length));
			 memcpy((lpCallParm->NonStdCmd).CmdVal,(pEvtData->Value),pEvtData->Length);
			 gateTRACE(lpCamelSession->sessionNumber,
                    (lpCamelSession->LogFile,"Data is %s,\n",(lpCallParm->NonStdCmd.CmdVal)));
		  break;

	   case NetTSC_MsgSendUserInputIndication:
			 gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got NetTSC_EvtH245Data_Type_UII Data is "));
             memcpy(lpCallParm->UII.Val,pEvtData->Value,pEvtData->Length);
			 gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"%s\n",(lpCallParm->UII.Val)));
		  break;

	   default: 
		   gateALERT(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Unknown H245 data event %d.\n",pEvtData->Type));
		  break;
   }

   return (NULL);
}


///////////////////////////////////////////////////////////////////////
//        NAME : NetTsc_Extract_Reply_Info
// DESCRIPTION : Extract reply information 
//       INPUT : lpTsc      Pointer to the TSC structure
//               callInfo   the callInfo structure to extract the reply from
//					  reply      the reply section where the reply exist
//					  pOffset    the updated offset
//      OUTPUT : pOffset    updated the offset
//     RETURNS : A User defineable pointer to VOID
//    CAUTIONS : None.
///////////////////////////////////////////////////////////////////////
LPVOID NetTsc_Extract_Reply_Info (LPDM3TSC         lpTsc, 
                                  TSC_CallInfo_t   callInfo,
								          QMsgRef          reply,
								          UInt32           *pOffset)
{

	LPVOID    lpData;
	GateSession  *lpCamelSession;
    USHORT channel; 

    //add by xuzq 98.7.22
	LPDM3NetTSC    lpDm3NetTsc;
	lpDm3NetTsc = (LPDM3NetTSC)(lpTsc->lpUserInfo);

	lpData = NetTsc_GetCallParmPtr(lpTsc, callInfo.Id);
	lpCamelSession = (GateSession *)(((LPDM3NetTSC)(lpTsc->lpUserInfo))->lpUserInfo);
    channel = lpCamelSession->sessionNumber;

   /* Switch on info Id */
	switch(callInfo.Id) {

	     case CallInfo_RTCPInfo:
            NetTSC_RTCPInfo_get(reply,(NetTSC_RTCPInfo_t *)lpData,*pOffset);
            gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got RTCPInfo LocalSR_TxPackets %d \nLocalRR_FructionLost %d \nRemoteSR_TxPackets %d \nRemoteRR_FructionLost %d \n",
                      ((NetTSC_RTCPInfo_t *)lpData)->LocalSR_TxPackets,          //发送数据包数目
                      ((NetTSC_RTCPInfo_t *)lpData)->LocalRR_FructionLost,       
                      ((NetTSC_RTCPInfo_t *)lpData)->RemoteSR_TxPackets,         //接受数据包数目
                      ((NetTSC_RTCPInfo_t *)lpData)->RemoteRR_FructionLost));
			//记录发送和接受的数据包数目,以备写入数据库之用!
			if (lpDm3NetTsc->fIsInbound!=TRUE) {  //PSTN来话呼叫,记入用户原始信息数据库
			    uta[channel].send_pktnum=((NetTSC_RTCPInfo_t *)lpData)->LocalSR_TxPackets;
			    uta[channel].recv_pktnum=((NetTSC_RTCPInfo_t *)lpData)->RemoteSR_TxPackets;
			}
			else {   //IP来话呼叫,记入网关服务原始记录表中
                gsa[channel].send_pktnum=((NetTSC_RTCPInfo_t *)lpData)->LocalSR_TxPackets;
			    gsa[channel].recv_pktnum=((NetTSC_RTCPInfo_t *)lpData)->RemoteSR_TxPackets;

			}

            break;
   
         case CallInfo_TxCoder:
         case CallInfo_RxCoder:
            NetTSC_Coder_get(reply,(NetTSC_Coder_t *)lpData,*pOffset);
            gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got coder type %d \nFramesPerPkt %d \nFrameSize %d \nRate %d\n",
                      ((NetTSC_Coder_t *)lpData)->CoderType,
					       ((NetTSC_Coder_t *)lpData)->FramesPerPkt,
                      ((NetTSC_Coder_t *)lpData)->FrameSize,
                      ((NetTSC_Coder_t *)lpData)->Rate));
            break;
   
	      case CallInfo_CallerId:
         case CallInfo_Display:
         case CallInfo_UUI:
         case CallInfo_PhoneList:
            qMsgVarFieldGet(reply,1,pOffset,callInfo.Type,lpData);
			   gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got Call Information 0x%x data is %s.\n",
				         callInfo.Id, (char *)lpData));
            break;

         case CallInfo_CallDurationTime:
            qMsgVarFieldGet(reply,1,pOffset,callInfo.Type,lpData);
            gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got Call Duration Time: %d.\n", 
				      *((int *)lpData)));    //通话时长
			//记录通话时长,以备写入数据库之用!
			if (lpDm3NetTsc->fIsInbound!=TRUE) {  //PSTN来话呼叫,记入用户原始信息数据库
			    uta[channel].duration_time=*((int *)lpData);
			}
			else { //IP来话呼叫,记入网关服务原始记录表中
				gsa[channel].duration_time=*((int *)lpData);				 
			}
            break;

         case CallInfo_RemoteCapabilities:
            NetTSC_Capabilities_get(reply,(NetTSC_Capabilities_t *)lpData,*pOffset);
            gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got RemoteCapabilities type %d \nFrameSize %d \nFramesPerPkt %d \nVad %d \nname %s \nObjectId %s \nObjectData %s\n",
                      ((NetTSC_Capabilities_t *)lpData)->CoderType,
					       ((NetTSC_Capabilities_t *)lpData)->FrameSize,
                      ((NetTSC_Capabilities_t *)lpData)->FramesPerPkt,
                      ((NetTSC_Capabilities_t *)lpData)->Vad,
                      ((NetTSC_Capabilities_t *)lpData)->CapabilityName,
                      ((NetTSC_Capabilities_t *)lpData)->ObjectId,
                      ((NetTSC_Capabilities_t *)lpData)->ObjectData));
            break;

#if 0
         case CallInfo_VendorInfo:
            NetTSC_VendorInfo_get(reply,(NetTSC_VendorInfo_t *)lpData,*pOffset);
            gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got Vendor Info CountryCode %d \nExt %d \nManufacturerCode %d \nProductId %s \nVersionId %s \n",
                      ((NetTSC_VendorInfo_t *)lpData)->CountryCode,
                      ((NetTSC_VendorInfo_t *)lpData)->Ext,
                      ((NetTSC_VendorInfo_t *)lpData)->ManufacturerCode,
                      ((NetTSC_VendorInfo_t *)lpData)->ProductId,
                      ((NetTSC_VendorInfo_t *)lpData)->VersionId));
            break;

         case CallInfo_NonStdParm:
            NetTSC_NonStdParm_get(reply,(NetTSC_NonStdParm_t *)lpData,*pOffset);
            gateTRACE(lpCamelSession->sessionNumber,(lpCamelSession->LogFile,"Got NonStdParm ObjId %s \nLength %d \nData %s \n",
                      ((NetTSC_NonStdParm_t *)lpData)->ObjId,
                      ((NetTSC_NonStdParm_t *)lpData)->Length,
                      ((NetTSC_NonStdParm_t *)lpData)->Data));
            break;
#endif

      }


    return(NULL);

}


///////////////////////////////////////////////////////////////////////
//        NAME : NetTsc_GetCallParmPtr
// DESCRIPTION : Gets the appropriate pointer in CallParameters structure
//       INPUT : LPDM3TSC    pTsc   Pointer to the TSC structure
//               UInt32	     Id     the CallInfo Id
//      OUTPUT : None.
//     RETURNS : A User defineable pointer to VOID
//    CAUTIONS : None.
///////////////////////////////////////////////////////////////////////
LPVOID NetTsc_GetCallParmPtr (LPDM3TSC pTsc, 
                              UInt32	Id)
{

   LPDM3NetTSC      lpDm3NetTsc;
	CallParameters   * pCallParm;

   lpDm3NetTsc = (LPDM3NetTSC)(pTsc->lpUserInfo);
	pCallParm = NETTSC_GET_CALLPARM(lpDm3NetTsc);

   switch(Id) {
   
   	case CallInfo_UUI:
   		return( (LPVOID)(pCallParm->IPT_UUI));
   			
   	case CallInfo_Display:
   		return( (LPVOID)(pCallParm->display));
   			
   	case CallInfo_CallerId:
   		return( (LPVOID)(&(pCallParm->callerId)) );
   			
   	case CallInfo_TxCoder:
   		return( (LPVOID)(&(pCallParm->TxCoder[0])));
   			
   	case CallInfo_RxCoder:
   		return( (LPVOID)(&(pCallParm->RxCoder[0])));
   			
   	case CallInfo_PhoneList:
   		return( (LPVOID)(pCallParm->phoneList));
   			
   	case CallInfo_CallDurationTime:
   		return( (LPVOID)(&(pCallParm->callDurationTime)) );
   		break;
   			
   	case CallInfo_RTCPInfo:
   		return( (LPVOID)(&(pCallParm->RTCPInfo)) );
   			
   	case CallInfo_RemoteCapabilities:
   		return( (LPVOID)(&(pCallParm->RemoteCapabilities)) );

#if 0
	case CallInfo_VendorInfo:
   		return( (LPVOID)(&(pCallParm->VendorInfo)) );

      case CallInfo_NonStdParm:
   		return( (LPVOID)(&(pCallParm->NonStdParm)) );
#endif

   	}
			
}

///////////////////////////////////////////////////////////////////////
//        NAME : OnNetTscCallStateEvt
// DESCRIPTION : Called when call state event is recieved 
//       INPUT : pTsc      Pointer to the TSC instance data structure
//             : pEvtData  Pointer to the Call State Structure.
//      OUTPUT : None.
//     RETURNS : A User defineable pointer to VOID
//    CAUTIONS : None.
///////////////////////////////////////////////////////////////////////
LPVOID OnNetTscCallStateEvt (LPDM3TSC pTsc, 
                          TSC_EvtCallState_t *pEvtData)
{

	GateSession       *lpCamelSession;
    gateStateFxn      stateFxn;
	USHORT            sessionNumber;
	BOOL              rc;
	LPDM3NetTSC       lpDm3NetTsc;

	lpCamelSession = ((LPDM3NetTSC)(pTsc->lpUserInfo))->lpUserInfo;
	stateFxn = lpCamelSession->stateFxn;
    lpDm3NetTsc = (LPDM3NetTSC)(pTsc->lpUserInfo);
	sessionNumber = lpCamelSession->sessionNumber;

   //TO DO: Insert application specific processing for this event here
   switch (pEvtData->CallState) {
	   case TSC_EvtCallState_Type_Null:
	   case TSC_EvtCallState_Type_Connected:
	   case TSC_EvtCallState_Type_Disconnected:
	   case TSC_EvtCallState_Type_Failed:
	   case TSC_EvtCallState_Type_Idle:
	   case TSC_EvtCallState_Type_Offered:
           
		   /* Call the appropriate state nachine function in the demo */
           rc = (*stateFxn)(lpDm3NetTsc, pEvtData->CallState,(void *)pEvtData);
		      
            /* Check return code */
            if(rc != DM3SUCCESS) {
               printf("State Machine Error on NetTsc Channel %d Event lx%x\n", 
                      sessionNumber, pEvtData->CallState);
            } 

		break;
   default:
      // Invalid Call State
      printf("Got unexpected event 0x%x.\n", pEvtData->CallState);
      break;
   }


   return (NULL);
}

///////////////////////////////////////////////////////////////////////
//        NAME : OnNetTscGetCallInfoCmplt
// DESCRIPTION : Called when TSC_GetCallInfoCmplt is recieved
//       INPUT : pTsc      Pointer to the TSC instance data structure.
//             : pEvtData  Pointer to the message payload.
//             : pStdErr   Pointer to error information if any.
//      OUTPUT : None.
//     RETURNS : A User defineable pointer to VOID
//    CAUTIONS : None.
///////////////////////////////////////////////////////////////////////
LPVOID OnNetTscGetCallInfoCmplt (LPDM3TSC pTsc, 
                              QMsgRef pReplyMsg,
                              Std_MsgError_t *pStdErr)
{
    UINT           unCount;
    UINT           unOffset = 0;
    GateSession    *lpSession;
    gateStateFxn   stateFxn;
    BOOL           rc;
	 LPDM3NetTSC    lpDm3NetTsc;
    LPVOID         pCallInfoElementData = NULL; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -