📄 callcontrol.oldc
字号:
m_mdwReportSame[dwChannel] = 0;
vSendMsgToUA( &tCcUaMsg );
m_mtReportStatus[dwChannel] = tCcUaMsg.u.tReport;
} else {
m_mdwReportSame[dwChannel] ++;
if ( m_mdwReportSame[dwChannel] < 2 ) {
vSendMsgToUA( &tCcUaMsg );
}
}
vSetTimer( dwChannel, eT101, mdwTimeoutLength[eT101] );
}
void CCallControl::vCodeFunc( DWORD dwChannel )
{
tCC_UA_MSG tCcUaMsg;
DWORD dwTmp;
switch( mtFxxAttrib[dwChannel].eCurrentFuncCode ) {
case eFuncForwardEnable: // 设置无条件前转
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eForwardMsg;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tForward );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tForward.dwType = 1;
tCcUaMsg.u.tForward.dwForwardNumber = mtFxxAttrib[dwChannel].dwForwardNumber;
tCcUaMsg.u.tForward.dwChannel = dwChannel;
tCcUaMsg.u.tForward.dwModuleNumber = m_tModuleInfo.general.iModuleIndex;
tCcUaMsg.hdr.dwCcIdx = 0;
tCcUaMsg.hdr.dwUaIdx = 0;
vSendMsgToUA( &tCcUaMsg );
vPlayVoiceFile( dwChannel, eForwardSetOk );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
m_tModuleInfo.port.dwForwardTel[dwChannel] = mtFxxAttrib[dwChannel].dwForwardNumber;
m_tModuleInfo.port.dwDelayTime[dwChannel] = 0;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncForwardDisable: // 取消无条件前转
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eForwardMsg;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tForward );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tForward.dwType = 0;
tCcUaMsg.u.tForward.dwModuleNumber = m_tModuleInfo.general.iModuleIndex;
tCcUaMsg.u.tForward.dwChannel = dwChannel;
tCcUaMsg.hdr.dwCcIdx = 0;
tCcUaMsg.hdr.dwUaIdx = 0;
vSendMsgToUA( &tCcUaMsg );
vPlayVoiceFile( dwChannel, eForwardClearOk );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
m_tModuleInfo.port.dwForwardTel[dwChannel] = 0;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncDelayForwardEnable: // 设置延时前转
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eDelayForwardMsg;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tDelayForward );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tDelayForward.dwType = 1;
tCcUaMsg.u.tDelayForward.dwForwardNumber = mtFxxAttrib[dwChannel].dwForwardNumber;
tCcUaMsg.u.tDelayForward.dwChannel = dwChannel;
tCcUaMsg.u.tDelayForward.dwModuleNumber = m_tModuleInfo.general.iModuleIndex;
tCcUaMsg.u.tDelayForward.dwTimelength = mtFxxAttrib[dwChannel].dwDelayForwardTimeout;
tCcUaMsg.hdr.dwCcIdx = 0;
tCcUaMsg.hdr.dwUaIdx = 0;
vSendMsgToUA( &tCcUaMsg );
vPlayVoiceFile( dwChannel, eDelayForwardSetOk );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
m_tModuleInfo.port.dwDelayTime[dwChannel] = mtFxxAttrib[dwChannel].dwDelayForwardTimeout;
m_tModuleInfo.port.dwForwardTel[dwChannel] = mtFxxAttrib[dwChannel].dwForwardNumber;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncDelayForwardDisable: // 取消延时前转
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eDelayForwardMsg;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tDelayForward );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tDelayForward.dwType = 0;
tCcUaMsg.u.tDelayForward.dwForwardNumber = 0;
tCcUaMsg.u.tDelayForward.dwChannel = dwChannel;
tCcUaMsg.u.tDelayForward.dwModuleNumber = m_tModuleInfo.general.iModuleIndex;
tCcUaMsg.u.tDelayForward.dwTimelength = 0;
tCcUaMsg.hdr.dwCcIdx = 0;
tCcUaMsg.hdr.dwUaIdx = 0;
vSendMsgToUA( &tCcUaMsg );
vPlayVoiceFile( dwChannel, eDelayForwardClearOk );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
m_tModuleInfo.port.dwDelayTime[dwChannel] = 0;
m_tModuleInfo.port.dwForwardTel[dwChannel] = 0;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncFollowmeEnable: // 设置跟我来功能
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eFollowme;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tFollowme );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tFollowme.eType = eF_Set;
tCcUaMsg.u.tFollowme.iDestinationNumber = m_tModuleInfo.port.dwTelno[dwChannel];
tCcUaMsg.u.tFollowme.iSourceNumber = mtFxxAttrib[dwChannel].dwFollowmeNumberSave;
tCcUaMsg.u.tFollowme.iPassword = mtFxxAttrib[dwChannel].dwFollowmePassword;
tCcUaMsg.u.tFollowme.dwModuleNumber = m_tModuleInfo.general.iModuleIndex;
vSendMsgToUA( &tCcUaMsg );
vSetTimer( dwChannel, eT109, mdwTimeoutLength[eT109] );
vChangeCCStatus( dwChannel, eFxs_followme );
break;
case eFuncFollowmeDisable: // 取消跟我来功能
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eFollowme;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tFollowme );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tFollowme.eType = eF_Clear;
tCcUaMsg.u.tFollowme.iDestinationNumber = m_tModuleInfo.port.dwTelno[dwChannel];
tCcUaMsg.u.tFollowme.iSourceNumber = mtFxxAttrib[dwChannel].dwFollowmeNumberSave;
tCcUaMsg.u.tFollowme.iPassword = mtFxxAttrib[dwChannel].dwFollowmePassword;
tCcUaMsg.u.tFollowme.dwModuleNumber = m_tModuleInfo.general.iModuleIndex;
vSendMsgToUA( &tCcUaMsg );
vSetTimer( dwChannel, eT118, mdwTimeoutLength[eT118] );
vChangeCCStatus( dwChannel, eFxs_followme );
break;
case eFuncCallWaitingEnable: // 设置呼叫等待功能
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eCallWaitingCommand;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tCallWaiting );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tCallWaiting.dwChannel = dwChannel;
tCcUaMsg.u.tCallWaiting.dwType = 1;
vSendMsgToUA( &tCcUaMsg );
vPlayVoiceFile( dwChannel, eCallWaitingSet );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
m_tModuleInfo.port.isCallWait[dwChannel] = TRUE;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncCallWaitingDisable: // 取消呼叫等待功能
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eCallWaitingCommand;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tCallWaiting );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tCallWaiting.dwChannel = dwChannel;
tCcUaMsg.u.tCallWaiting.dwType = 0;
vSendMsgToUA( &tCcUaMsg );
vPlayVoiceFile( dwChannel, eCallWaitingClr );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
m_tModuleInfo.port.isCallWait[dwChannel] = FALSE;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncAcdSetBusyEnable: // ACD置忙
mtFxxAttrib[dwChannel].eAcdStatus = eAcdSetBusy;
vPlayVoiceFile( dwChannel, eAcdBusySet );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncAcdSetBusyDisable: // 取消ACD置忙
mtFxxAttrib[dwChannel].eAcdStatus = eAcdIdle;
vPlayVoiceFile( dwChannel, eAcdBusyClr );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncReplace: // 代接
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eReplace;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tReplace );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tReplace.iChannelNumber = m_tModuleInfo.port.dwTelno[dwChannel];
tCcUaMsg.hdr.dwCcIdx = 0;
tCcUaMsg.hdr.dwUaIdx = 0;
vSendMsgToUA( &tCcUaMsg );
vSetTimer( dwChannel, eT108, mdwTimeoutLength[eT108] );
vChangeCCStatus( dwChannel, eFxs_replace );
break;
case eFuncModifyPassword: // 修改密码
if ( mtFxxAttrib[dwChannel].dwNewPasswordFirst != mtFxxAttrib[dwChannel].dwNewPasswordSecond ) {
vPlayVoiceFile( dwChannel, eNewPasswdInvalid );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
}
if ( mtFxxAttrib[dwChannel].dwOldPassword != m_tModuleInfo.port.dwPwd[dwChannel] ) {
vPlayVoiceFile( dwChannel, eOldPasswdError );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
}
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eModifyPassword;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tModifyPasswd );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tModifyPasswd.dwChannel = dwChannel;
tCcUaMsg.u.tModifyPasswd.dwNewPassword = mtFxxAttrib[dwChannel].dwNewPasswordFirst;
vSendMsgToUA( &tCcUaMsg );
m_tModuleInfo.port.dwPwd[dwChannel] = mtFxxAttrib[dwChannel].dwNewPasswordFirst;
vPlayVoiceFile( dwChannel, eModifyPasswdOk );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
case eFuncConference: // 三方通话
break;
case eFuncChangeAgentArgs:
if ( mtFxxAttrib[dwChannel].dwAgentPassword != m_tModuleInfo.port.dwPwd[dwChannel] ) {
vPlayVoiceFile( dwChannel, eOldPasswdError );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
}
for( dwTmp = 0; dwTmp < MAX_CTG_ADMIN_NUMBER; dwTmp ++ ) {
if ( m_tModuleInfo.port.dwTelno[dwChannel] == m_tGlobalInfo.ctg.admin.dwTelno[dwTmp] ) {
break;
}
}
if ( dwTmp >= MAX_CTG_ADMIN_NUMBER ) {
vPlayVoiceFile( dwChannel, eOldPasswdError );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
}
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eSetAgentArgs;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tSetAgentArgsValue );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tSetAgentArgsValue.dwChannel = m_tModuleInfo.port.dwTelno[dwChannel];
tCcUaMsg.u.tSetAgentArgsValue.boolAutoAgentService = mtFxxAttrib[dwChannel].boolAutoAgentService;
tCcUaMsg.u.tSetAgentArgsValue.dwAgentNumber = mtFxxAttrib[dwChannel].dwAgentNumber;
vSendMsgToUA( &tCcUaMsg );
vSetTimer( dwChannel, eT108, mdwTimeoutLength[eT108] );
vChangeCCStatus( dwChannel, eFxs_waitcmdans );
break;
case eFuncChangeAgentStatus:
if ( mtFxxAttrib[dwChannel].dwAgentPassword != m_tModuleInfo.port.dwPwd[dwChannel] ) {
vPlayVoiceFile( dwChannel, eOldPasswdError );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
}
for( dwTmp = 0; dwTmp < MAX_CTG_ADMIN_NUMBER; dwTmp ++ ) {
if ( m_tModuleInfo.port.dwTelno[dwChannel] == m_tGlobalInfo.ctg.admin.dwTelno[dwTmp] ) {
break;
}
}
if ( dwTmp >= MAX_CTG_ADMIN_NUMBER ) {
vPlayVoiceFile( dwChannel, eOldPasswdError );
mtFxxAttrib[dwChannel].dwPlayMode = 1;
vChangeCCStatus( dwChannel, eFxs_playing );
break;
}
memset( (char *)&tCcUaMsg, 0, sizeof(tCcUaMsg) );
tCcUaMsg.hdr.eMsgType = eSetAgentMode;
tCcUaMsg.hdr.length = sizeof( tCcUaMsg.hdr ) + sizeof( tCcUaMsg.u.tSetAgentModeValue );
tCcUaMsg.hdr.dwChannel = dwChannel;
tCcUaMsg.u.tSetAgentModeValue.dwChannel = m_tModuleInfo.port.dwTelno[dwChannel];
tCcUaMsg.u.tSetAgentModeValue.boolAutoAgentService = mtFxxAttrib[dwChannel].boolAutoAgentService;
vSendMsgToUA( &tCcUaMsg );
vSetTimer( dwChannel, eT108, mdwTimeoutLength[eT108] );
vChangeCCStatus( dwChannel, eFxs_waitcmdans );
break;
}
}
void CCallControl::vPlayVoiceFile( DWORD dwChannel, eToneFileId eFileId )
{
boolStopFilePlay( dwChannel );
vPutDriver( dwChannel, eACTION_CHANGE_CODEC, NULL, eG_711_A_LAW );
vPutDriver( dwChannel, eACTION_TALK, NULL, 0 );
mtFxxAttrib[dwChannel].eLastVoiceID = eFileId;
if ( boolStartFilePlay( dwChannel, eFileId ) == FALSE ) {
printf( "StartFilePlay 5\n" );
vPlayFileEnd( dwChannel );
}
}
void CCallControl::vChangeCCStatus( DWORD dwChannel, eCCStatus eStatus )
{
DWORD dwIdx;
dwIdx = mtFxxAttrib[dwChannel].eActiveCall;
meChannelStatus[dwChannel] = eStatus;
// need add more functions here
if ( eStatus == eFxs_playing || eStatus == eFxo_play ) {
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].mchDtmfRecord[0] = 0;
mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDtmfCounter = 0;
}
if ( eStatus == eFxo_end ) {
// if ( mtFxxAttrib[dwChannel].dwBillSn ) {
vReportBill( dwChannel, eBillEnd );
mtFxxAttrib[dwChannel].dwBillSn = 0;
// }
#if 0
goIppbxfx.vSetCoder( dwChannel, eG_711_A_LAW );
#endif
}
if ( eStatus == eFxo_idle ) {
vPutDriver( dwChannel, eACTION_SCE_OFF, NULL, 0 );
mtFxxAttrib[dwChannel].boolInConference = FALSE;
#ifdef SOFT_PBX
mtFxxAttrib[dwChannel].boolCallType = FALSE;
goIppbxfx.vSetCallType( dwChannel, 0 );
#endif
mtFxxAttrib[dwChannel].mtCallInfo[eFirstcall].dwReceivePtr = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eSecondcall].dwReceivePtr = 0;
if ( mtFxxAttrib[dwChannel].mtCallInfo[dwIdx].dwDirectCall == 0 ) {
mtFxxAttrib[dwChannel].mchCallidNumber[0] = 0;
mtFxxAttrib[dwChannel].dwRingCounter = 0;
}
mtFxxAttrib[dwChannel].dwInputFxsNumber = 0;
mtFxxAttrib[dwChannel].dwInputFxsGrade = 0;
mtFxxAttrib[dwChannel].boolSendDtmfEnable = FALSE;
if ( m_tModuleInfo.port.isUsed[dwChannel] == FALSE || m_tModuleInfo.port.dwTelno[dwChannel] == 0 ) {
// disable
meChannelStatus[dwChannel] = eFxx_null;
}
}
if ( eStatus == eFxs_idle ) {
#if 0
goIppbxfx.vSetCoder( dwChannel, eG_711_A_LAW );
#endif
mtFxxAttrib[dwChannel].boolInConference = FALSE;
#ifdef SOFT_PBX
mtFxxAttrib[dwChannel].boolCallType = FALSE;
goIppbxfx.vSetCallType( dwChannel, 0 );
#endif
mtFxxAttrib[dwChannel].dwCallCounter = 0;
mtFxxAttrib[dwChannel].eActiveCall = eFirstcall;
mtFxxAttrib[dwChannel].e2ndCallStatus = e2ndCallNull;
mtFxxAttrib[dwChannel].mtCallInfo[eFirstcall].dwDirectCall = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eFirstcall].dwUaIdx = (DWORD)-1;
mtFxxAttrib[dwChannel].mtCallInfo[eSecondcall].dwDirectCall = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eSecondcall].dwUaIdx = (DWORD)-1;
mtFxxAttrib[dwChannel].boolHoldActive = FALSE;
mtFxxAttrib[dwChannel].boolTransfer = FALSE;
mtFxxAttrib[dwChannel].boolSendDtmfEnable = FALSE;
mtFxxAttrib[dwChannel].mtCallInfo[eFirstcall].dwAcdRetry = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eSecondcall].dwAcdRetry = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eFirstcall].tSetup.dwCallee = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eFirstcall].tSetup.dwCaller = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eSecondcall].tSetup.dwCallee = 0;
mtFxxAttrib[dwChannel].mtCallInfo[eSecondcall].tSetup.dwCaller = 0;
mtFxxAttrib[dwChannel].boolRedialLast = FALSE;
if ( m_tModuleInfo.port.isUsed[dwChannel] == FALSE || m_tModuleInfo.port.dwTelno[dwChannel] == 0 ) {
// disable
meChannelStatus[dwChannel] = eFxx_null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -