📄 callcontrol.c
字号:
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eExtOper ) {
int msg_type;
msg_type=atoi(ptCcUaMsg->u.tExtOper);
if(msg_type==eCallerInfo)
{
int iTelno;
char sCallerName[128]={0};
char *pTmp=strchr(ptCcUaMsg->u.tExtOper,'\t');
sscanf(ptCcUaMsg->u.tExtOper,"%d %d",&msg_type,&iTelno);
pTmp=strchr(pTmp+1,'\t');
strcpy(sCallerName,pTmp+1);
for(int i=0;i<MAX_LINE_NUMBER;i++)
{
if(goCC.m_tModuleInfo.port.dwTelno[i] == iTelno)
{
printf("#####update callername,i:%d,telno:%d,sCallerName:%s\n",i,iTelno,sCallerName);
strcpy(goCC.m_tModuleInfo.port.sCallerName[i],sCallerName);
break;
}
}
}
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eCMConnect ) {
goCC.vReportAll();
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eAudioData ) {
// 语音信息直接传递给DRIVER
iWriteVoiceToDriver( ptCcUaMsg->hdr.dwChannel, ptCcUaMsg->u.tVoiceMsg.pVoiceMessage,
ptCcUaMsg->u.tVoiceMsg.dwLength );
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eGetFxsInfoAns ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tGetFxsInfo.iDestChannel ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
#if 0
if ( ptCcUaMsg->hdr.eMsgType == eRtpSessionInit ) {
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
goCC.vInitSession( ptCcUaMsg );
return;
}
#endif
if ( ptCcUaMsg->hdr.eMsgType == eSetSystemTime ) {
// modify system time
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
//yy goIppbxfx.vSetRTCTime( &( ptCcUaMsg->u.tSetSystemTime.tSys ) );
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eGetFxsInfo ) {
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tGetFxsInfo.iDestChannel ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
// answer information of FXX
ptCcUaMsg->hdr.eMsgType = eGetFxsInfoAns;
ptCcUaMsg->u.tGetFxsInfo.iDestChannel = ptCcUaMsg->u.tGetFxsInfo.dwSrcChannel;
ptCcUaMsg->u.tGetFxsInfo.dwType = 1;
// ptCcUaMsg->u.tGetFxsInfo.dwGrade = goCC.m_tModuleInfo.port.dwGrade[ptCcUaMsg->hdr.dwChannel];
ptCcUaMsg->u.tGetFxsInfo.dwPassword = goCC.m_tModuleInfo.port.dwPwd[ptCcUaMsg->hdr.dwChannel];
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 1;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
// call function of HEGS
vReceiveCCMesg( ptCcUaMsg );
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eFollowme ) {
// followme message must be dealt here
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tFollowme.iSourceNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
goCC.vFollowmeFunc( ptCcUaMsg->hdr.dwChannel, ptCcUaMsg );
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eFollowmeAns ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tFollowmeResult.iSourceNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
if ( ptCcUaMsg->hdr.eMsgType == eFxoFlash ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tFxoFlash.iFxoNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
if ( ptCcUaMsg->hdr.eMsgType == eFxoStatusEnquiry ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tFxoStatusEnquiry.iFxoNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
if ( dwTmp >= MAX_LINE_NUM ) {
return;
}
goCC.vStatusEnquiryAck( ptCcUaMsg->hdr.dwChannel, ptCcUaMsg );
return;
}
if ( ptCcUaMsg->hdr.eMsgType == eFxoStatusAck ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tFxoStatusAck.iFxoNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
if ( dwTmp >= MAX_LINE_NUM ) {
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
return;
}
}
if ( ptCcUaMsg->hdr.eMsgType == eSetAgentModeResult ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tSetAgentModeResultValue.dwChannel ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
if ( dwTmp >= MAX_LINE_NUM ) {
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
return;
}
}
if ( ptCcUaMsg->hdr.eMsgType == eSetAgentArgsResult ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tSetAgentArgsResultValue.dwChannel ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
if ( dwTmp >= MAX_LINE_NUM ) {
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
return;
}
}
if ( ptCcUaMsg->hdr.eMsgType == eInConference ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tInConference.iDstNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
if ( ptCcUaMsg->hdr.eMsgType == eOutConference ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tOutConference.iDstNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
if ( ptCcUaMsg->hdr.eMsgType == eSetCodecType ) {
if ( gboolTraceEnable ) {
ptCcUaMsg->hdr.dwDirection = 0;
ptCcUaMsg->hdr.dwStatus = (DWORD)-1;
iQXput( &gqxQueueTrace, (UCHAR *)ptCcUaMsg );
}
goCC.vSetCodec( ptCcUaMsg->hdr.dwChannel, ptCcUaMsg );
return;
}
#if OLD
if ( ptCcUaMsg->hdr.eMsgType == eDtmfCode ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tDtmfCode.dwDestNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
#endif
if ( ptCcUaMsg->hdr.eMsgType == eCallid ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tCallid.iDestNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
if ( ptCcUaMsg->hdr.eMsgType == eReplaceInform ) {
ptCcUaMsg->hdr.eMsgType = eReplace;
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tReplace.iChannelNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
if ( ptCcUaMsg->hdr.eMsgType == eReplaceFail ) {
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
if ( goCC.m_tModuleInfo.port.dwTelno[dwTmp] == ptCcUaMsg->u.tReplaceFail.iChannelNumber ) {
ptCcUaMsg->hdr.dwChannel = dwTmp;
break;
}
}
}
iQXput( &gqxQueueUaMsg, (UCHAR *)ptCcUaMsg );
}
void CCallControl::vReportAll()
{
DWORD dwTmp;
for( dwTmp = 0; dwTmp < MAX_LINE_NUM; dwTmp ++ ) {
m_mdwReportSame[dwTmp] = 0;
vReportCCStatus( dwTmp );
}
}
DWORD CCallControl::dwGetStatus( DWORD dwChannel )
{
if ( dwChannel >= MAX_LINE_NUM ) {
return 0xFFFFFFFF;
}
return meChannelStatus[dwChannel];
}
eCodeParserResult CCallControl::eCodeParser( DWORD dwChannel, char chCode )
{
DWORD dwIdx, dwTmp;
char *ptr;
DWORD dwNumberLen;
DWORD dwCodeLen;
char chCommand[MAX_TELNO_LEN];
dwIdx = mtFxxAttrib[dwChannel].eActiveCall;
ptr = mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].mchDtmfRecord;
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter < MAX_TELNO_LEN ) {
ptr[mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter] = chCode;
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter ++;
}
// 被叫80转换为9
// 拨号时把有效的被叫号码存到dwDialNumber
// 功能码的结果放到 mtFxxAttrib[dwChannel].eCurrentFuncCode, dwFollowmeNumberSave, mchFollowmePassword
if ( ptr[0] == 4 && ptr[1] == 0 ) {
if(mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter==2)
{
if ( boolAuthorizationFxs( dwChannel, ptr, 2 ) == FALSE ) {
// call is limit
printf("111boolAuthorizationFxs=false\n");
return eCallLimited;
}
/*printf("80dwChannel=%d, ptr=%s, dwCodeLen=%d,%d\n",dwChannel, ptr, dwCodeLen,mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter);
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = 9;
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].boolFxoCall = TRUE;
return eCalleeOk;//modify by lwd*/
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = 9;
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].boolFxoCall = TRUE;
return eCalleeOk;
}
if ( ptr[0] == 11 && ptr[1] == 11 ) {
return eFuncRedialLast;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -