📄 dm3ntsch.c
字号:
}
///////////////////////////////////////////////////////////////////////
// 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 + -