📄 callcontrol.c
字号:
}
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;
//////////// 2006-02-27, Yang
printf("dwChannel=%d,dwCodeLen=%d,ptr[dwCodeLen]=%d,%d,%d\n",dwChannel,dwCodeLen,ptr[dwCodeLen-1],ptr[0],dwNumberLen);
if ( boolAuthorizationFxs( dwChannel, ptr, dwCodeLen ) == FALSE ) {
// call is limit
printf("boolAuthorizationFxs=false\n");
return eCallLimited;
}
////////////
for( dwTmp = 0; dwTmp < dwCodeLen; dwTmp ++ ) {
chCommand[dwTmp] = ptr[dwTmp] + '0';
}
chCommand[dwCodeLen] = 0;
switch( ptr[0] ) {
//#ifdef SOFT_PBX
case 8:
// 软交换选择功能码
if ( chCode == 11 ) {
// goIppbxfx.vSetCallType( dwChannel, 1 );
return eFuncVoip;
}
return eCalleeContinue;
//#endif
case 4:
if ( m_tGlobalInfo.general.iLocalDept > 999 ) {
// 两位局号
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter < 5 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = ptr[0] * 10000 + ptr[1] * 1000 + ptr[2] * 100 + ptr[3]* 10 + ptr[4];
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] );
}
printf("999dwDialNumber=%d\n",mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber);
return eCalleeOk;
}
else if ( m_tGlobalInfo.general.iLocalDept > 99 ) {
// 两位局号
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter < 4 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = ptr[0] * 1000 + ptr[1] * 100 + ptr[2] * 10 + ptr[3];
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] );
}
printf("999dwDialNumber=%d\n",mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber);
return eCalleeOk;
}
else if ( m_tGlobalInfo.general.iLocalDept > 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] );
}
printf("99dwDialNumber=%d\n",mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber);
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] );
}
printf("9dwDialNumber=%d\n",mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber);
return eCalleeOk;
}
break;
case 10: // *
if ( dwCodeLen < 3 ) {
return eCalleeContinue;
}
// 所有的功能码都是两位
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cForwardCode, 2 ) ) {
// 呼叫前无条件转移登记功能码
if ( dwCodeLen < dwNumberLen + 3 ) {
return eCalleeContinue;
}
if( atoi( chCommand + 3 )==m_tModuleInfo.port.dwTelno[dwChannel])
{
return eFuncCodeUndefined;
}
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;
}
if(ptr[3] * 10 + ptr[4]>45)
{
return eFuncCodeUndefined;
}
if( atoi( chCommand + 5 )==m_tModuleInfo.port.dwTelno[dwChannel])
{
return eFuncCodeUndefined;
}
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];
}
if(mtFxxAttrib[dwChannel].dwFollowmeNumberSave == m_tModuleInfo.port.dwTelno[dwChannel])
{
mtFxxAttrib[dwChannel].eCurrentFuncCode =eFuncFollowmeDisable;
return eFuncCodeUndefined;
}
mtFxxAttrib[dwChannel].dwFollowmePassword = atoi( chCommand + 3 + dwNumberLen );
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cCallWaitCode, 2 ) ) {
// 呼叫等待登记功能码
if ( dwCodeLen < 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncCallWaitingEnable;
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cReplaceAnswerCode, 2 ) ) {
// 代接组登记功能码
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncReplace;
return eFuncCodeOk;
}
//yy if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cSelectSoftSwitchCode, 2 ) ) {
//yy // 软交换选择功能码
//yy if ( chCode == 11 ) {
//yy return eFuncVoip;
//yy }
//yy return eCalleeContinue;
//yy }
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cUpdatePasswordCode, 2 ) ) {
// 修改电话密码功能码
if ( dwCodeLen < 3 + FXS_PASSWD_LEN * 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncModifyPassword;
mtFxxAttrib[dwChannel].dwOldPassword = 0;
for( dwTmp = 0; dwTmp < FXS_PASSWD_LEN; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwOldPassword *= 10;
mtFxxAttrib[dwChannel].dwOldPassword += ptr[3+dwTmp];
}
mtFxxAttrib[dwChannel].dwNewPasswordFirst = 0;
for( dwTmp = 0; dwTmp < FXS_PASSWD_LEN; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwNewPasswordFirst *= 10;
mtFxxAttrib[dwChannel].dwNewPasswordFirst += ptr[3+FXS_PASSWD_LEN+dwTmp];
}
mtFxxAttrib[dwChannel].dwNewPasswordSecond = 0;
for( dwTmp = 0; dwTmp < FXS_PASSWD_LEN; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwNewPasswordSecond *= 10;
mtFxxAttrib[dwChannel].dwNewPasswordSecond += ptr[3+FXS_PASSWD_LEN*2+dwTmp];
}
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cSwitchCtgWorkModelCode, 2 ) ) {
// 切换电脑话务员工作模式, *98PPPP
if ( dwCodeLen < 7 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].boolAutoAgentService = TRUE;
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncChangeAgentStatus;
mtFxxAttrib[dwChannel].dwAgentPassword = ptr[3] * 1000 + ptr[4] * 100 + ptr[5] * 10 + ptr[6];
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cModifyCtgConfigurationCode, 2 ) ) {
// 修改手动电脑话务员模式下工作参数
if ( ptr[7] != 11 ) {
if ( dwCodeLen < 7 + dwNumberLen ) {
return eCalleeContinue;
}
}
mtFxxAttrib[dwChannel].boolAutoAgentService = TRUE;
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncChangeAgentArgs;
mtFxxAttrib[dwChannel].dwAgentPassword = ptr[3] * 1000 + ptr[4] * 100 + ptr[5] * 10 + ptr[6];
if ( ptr[7] != 11 ) {
mtFxxAttrib[dwChannel].dwAgentNumber = 0;
for( dwTmp = 0; dwTmp < dwNumberLen; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwAgentNumber *= 10;
mtFxxAttrib[dwChannel].dwAgentNumber += ptr[ 7 + dwTmp ];
}
} else {
mtFxxAttrib[dwChannel].dwAgentNumber = 0;
}
return eFuncCodeOk;
}
return eFuncCodeUndefined;
case 11: // #
if ( dwCodeLen < 3 ) {
return eCalleeContinue;
}
// 所有的功能码都是两位
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cForwardCode, 2 ) ) {
// 呼叫前无条件转移登记功能码
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncForwardDisable;
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cDelayForwardCode, 2 ) ) {
// 延时呼叫转移登记功能码
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncDelayForwardDisable;
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cFollowMeCode, 2 ) ) {
// 跟我来登记功能码
// Disable Follow me Command: */#FFNNNN, FF is two func_codes, NNNN is three/four port number
if ( dwCodeLen < dwNumberLen + 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncFollowmeDisable;
mtFxxAttrib[dwChannel].dwFollowmeNumberSave = 0;
for( dwTmp = 0; dwTmp < dwNumberLen; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwFollowmeNumberSave *= 10;
mtFxxAttrib[dwChannel].dwFollowmeNumberSave += ptr[dwTmp+3];
}
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cCallWaitCode, 2 ) ) {
// 呼叫等待登记功能码
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncCallWaitingDisable;
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cUpdatePasswordCode, 2 ) ) {
// 修改电话密码功能码
if ( dwCodeLen < dwNumberLen + 18 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncModifyPassword;
mtFxxAttrib[dwChannel].dwOldPassword = 0;
for( dwTmp = 0; dwTmp < FXS_PASSWD_LEN; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwOldPassword *= 10;
mtFxxAttrib[dwChannel].dwOldPassword += ptr[3+dwTmp];
}
mtFxxAttrib[dwChannel].dwNewPasswordFirst = 0;
for( dwTmp = 0; dwTmp < FXS_PASSWD_LEN; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwNewPasswordFirst *= 10;
mtFxxAttrib[dwChannel].dwNewPasswordFirst += ptr[3+FXS_PASSWD_LEN+dwTmp];
}
mtFxxAttrib[dwChannel].dwNewPasswordSecond = 0;
for( dwTmp = 0; dwTmp < FXS_PASSWD_LEN; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwNewPasswordSecond *= 10;
mtFxxAttrib[dwChannel].dwNewPasswordSecond += ptr[3+FXS_PASSWD_LEN*2+dwTmp];
}
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cAcdBusyMarkCode, 2 ) ) {
if ( dwCodeLen < 3 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncAcdSetBusyDisable;
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cSwitchCtgWorkModelCode, 2 ) ) {
// 切换电脑话务员工作模式
if ( dwCodeLen < 7 ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].boolAutoAgentService = FALSE;
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncChangeAgentStatus;
mtFxxAttrib[dwChannel].dwAgentPassword = ptr[3] * 1000 + ptr[4] * 100 + ptr[5] * 10 + ptr[6];
return eFuncCodeOk;
}
if ( !memcmp( chCommand + 1, m_tGlobalInfo.general.cModifyCtgConfigurationCode, 2 ) ) {
// 修改手动电脑话务员模式下工作参数
if ( ptr[7] != 11 ) {
if ( dwCodeLen < 7 + dwNumberLen ) {
return eCalleeContinue;
}
}
mtFxxAttrib[dwChannel].boolAutoAgentService = FALSE;
mtFxxAttrib[dwChannel].eCurrentFuncCode = eFuncChangeAgentArgs;
mtFxxAttrib[dwChannel].dwAgentPassword = ptr[3] * 1000 + ptr[4] * 100 + ptr[5] * 10 + ptr[6];
if ( ptr[7] != 11 ) {
mtFxxAttrib[dwChannel].dwAgentNumber = 0;
for( dwTmp = 0; dwTmp < dwNumberLen; dwTmp ++ ) {
mtFxxAttrib[dwChannel].dwAgentNumber *= 10;
mtFxxAttrib[dwChannel].dwAgentNumber += ptr[ 7 + dwTmp ];
}
} else {
mtFxxAttrib[dwChannel].dwAgentNumber = 0;
}
return eFuncCodeOk;
}
return eFuncCodeUndefined;
default:
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter < dwNumberLen ) {
return eCalleeContinue;
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber = 0;
for( dwTmp = 0; dwTmp < dwNumberLen; dwTmp ++ ) {
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber *= 10;
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDialNumber += ptr[dwTmp];
}
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].boolFxoCall = FALSE;
return eCalleeOk;
}
return eCalleeContinue;
}
void CCallControl::vReportBill( DWORD dwChannel, eBillType eType )
{
tCC_UA_MSG tCcUaMsg;
DWORD dwIdx, dwTmp;
time_t ttCur;
struct tm *ttTm;
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -