📄 callcontrol.oldc
字号:
//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] == 8 && ptr[1] == 0 ) {
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = 9;
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].boolFxoCall = TRUE;
return eCalleeOk;
}
if ( ptr[0] == 11 && ptr[1] == 11 ) {
return eFuncRedialLast;
}
if ( ptr[0] == 10 && ptr[1] == 10 ) {
// ** 按代接处理
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncReplace;
return eFuncCodeOk;
}
dwNumberLen = m_tGlobalInfo.general.dwFxsTelLength;
dwCodeLen = mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter;
dwCodeLen %= MAX_TELNO_LEN - 2;
for( dwTmp = 0; dwTmp < dwCodeLen; dwTmp ++ ) {
chCommand[dwTmp] = ptr[dwTmp] + '0';
}
chCommand[dwCodeLen] = 0;
switch( ptr[0] ) {
#ifdef SOFT_PBX
case 6:
// 软交换选择功能码
if ( chCode == 11 ) {
goIppbxfx.vSetCallType( dwChannel, 1 );
return eFuncVoip;
}
return eCalleeContinue;
#endif
#if 0
case 8:
if ( m_tGlobalInfo.general.dwDeptFlag > 9 ) {
// 两位局号
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter < 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = ptr[0] * 100 + ptr[1] * 10 + ptr[2];
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].boolFxoCall = TRUE;
if ( gmiLineType[dwChannel] == LINE_FXS ) {
sprintf( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].tSetup.cDispName, "AAA%dAAA%d",
m_tModuleInfo.port.dwTelno[dwChannel], m_tModuleInfo.port.dwTelno[dwChannel] );
}
return eCalleeOk;
} else {
// 一位局号
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter < 2 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = ptr[0] * 10 + ptr[1];
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].boolFxoCall = TRUE;
if ( gmiLineType[dwChannel] == LINE_FXS ) {
sprintf( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].tSetup.cDispName, "AAA%dAAA%d",
m_tModuleInfo.port.dwTelno[dwChannel], m_tModuleInfo.port.dwTelno[dwChannel] );
}
return eCalleeOk;
}
break;
#endif
case 10: // *
if ( dwCodeLen < 3 ) {
return eCalleeContinue;
}
// 所有的功能码都是两位
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cForwardCode, 2 ) ) {
// 呼叫前无条件转移登记功能码
if ( dwCodeLen < dwNumberLen + 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncForwardEnable;
mtFxxAttrib[dwChannel].dwForwardNumber = atoi( chCommand + 3 );
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cAcdBusyMarkCode, 2 ) ) {
if ( dwCodeLen < 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncAcdSetBusyEnable;
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cDelayForwardCode, 2 ) ) {
// 延时呼叫转移登记功能码
if ( dwCodeLen < dwNumberLen + 5 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncDelayForwardEnable;
mtFxxAttrib[dwChannel].dwForwardNumber = atoi( chCommand + 5 );
mtFxxAttrib[dwChannel].dwDelayForwardTimeout = ptr[3] * 10 + ptr[4];
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cFollowMeCode, 2 ) ) {
// 跟我来登记功能码
// Follow me Command: */#FFNNNNPPPPPP, FF is two func_codes, NNNN is three/four port number, PPPPPP is password
if ( dwCodeLen < dwNumberLen + 3 + FXS_PASSWD_LEN ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncFollowmeEnable;
mtFxxAttrib[dwChannel].dwFollowmeNumberSave = 0;
for( dwTmp = 0; dwTmp < dwNumberLen; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwFollowmeNumberSave *= 10;
mtFxxAttrib[dwChannel].dwFollowmeNumberSave += ptr[dwTmp+3];
}
mtFxxAttrib[dwChannel].dwFollowmePassword = atoi( chCommand + 3 + dwNumberLen );
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cCallWaitCode, 2 ) ) {
// 呼叫等待登记功能码
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -