📄 pbxdlg.cpp
字号:
case PEND_SsxUnusable:
wsprintf(cNewStat,"Unavailable");
break;
case PEND_CircuitReset:
wsprintf(cNewStat,"-1");
break;
case SS1OUT_TALKING_REMOTE_HANGUPED:
wsprintf(cNewStat,"CalleeHangup");
break;
case SS1OUT_NOANSWER:
wsprintf(cNewStat,"WaitCalleeHangupTimeOut");
break;
case SS1OUT_NOBWDACK:
wsprintf(cNewStat,"WaitSeizureAnswerTimeOut");
break;
case SS1OUT_DIALING_BWD_HANGUP:
wsprintf(cNewStat,"Backward disconnect Signal Received");
break;
case SS1OUT_BWD_A5:
wsprintf(cNewStat,"A=5(UNN)Received");
break;
case SS1OUT_BWD_KB5:
wsprintf(cNewStat,"KB=5(UNN)Received");
break;
case SS1OUT_BWD_KB2:
wsprintf(cNewStat,"Subscriber, local busy");
break;
case SS1OUT_BWD_KB3:
wsprintf(cNewStat,"subscriber, toll busy");
break;
case SS1OUT_BWD_A4:
wsprintf(cNewStat,"Key congested");
break;
case SS1OUT_BWD_KB4:
wsprintf(cNewStat,"KB=4 (key congested) received");
break;
case SS1OUT_TIMEOUT_BWD_A:
wsprintf(cNewStat,"wait for backward group A signal is overtime");
break;
case SS1OUT_TIMEOUT_BWD_A_STOP:
wsprintf(cNewStat,"Wait for backward group A to be stopped is overtime ");
break;
case SS1OUT_TIMEOUT_BWD_KB:
wsprintf(cNewStat,"Wait for backward KB signal is overtime");
break;
case SS1OUT_TIMEOUT_BWD_KB_STOP:
wsprintf(cNewStat,"Wait for KB signal to be stopped is overtime ");
break;
case SS1OUT_TIMEOUT_CALLERID_BWD_A1:
wsprintf(cNewStat,"undefined backward group A singal received ");
break;
case SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP:
wsprintf(cNewStat,"wait for backward Group A signal to be stopped in transmission of CallerId is overtime ");
break;
case SS1OUT_UNDEFINED_CALLERID_BWD_A:
wsprintf(cNewStat,"undefined backward Group A received in transmission of CallerId ");
break;
case SS1OUT_UNDEFINED_BWD_A:
wsprintf(cNewStat,"undefined backward Group A received ");
break;
case SS1OUT_UNDEFINED_BWD_KB:
wsprintf(cNewStat,"undefined KB received ");
break;
case ISDN_CALLOVER:
wsprintf(cNewStat,"ISDN: remote end take on-hook");
break;
case ISDN_WAIT_RELEASE:
wsprintf(cNewStat,"ISDN: wait for release");
break;
case ISDN_HANGING:
wsprintf(cNewStat,"ISDN: disconnecting");
break;
case ISDN_RELEASING:
wsprintf(cNewStat,"ISDN:in release");
break;
case ISDN_UNALLOCATED_NUMBER:
wsprintf(cNewStat,"ISDN:unallocated number received");
break;
case ISDN_NETWORK_BUSY:
wsprintf(cNewStat,"ISDN: network busy");
break;
case ISDN_CIRCUIT_NOT_AVAILABLE:
wsprintf(cNewStat,"ISDN:unavailable circuit ");
break;
case ISUP_HardCircuitBlock:
wsprintf(cNewStat,"ISUP:hardware blocked");
break;
case ISUP_RemoteSuspend:
wsprintf(cNewStat,"ISUP: remote subscriber take on-hook");
break;
}
m_ChList.GetItemText(ch, ITEM_PendReason, cOldStat ,600);
if( strcmp(cOldStat,cNewStat) )
{
m_ChList.SetItemText( ch, ITEM_PendReason, cNewStat );
}
}
else
{
}
switch(nNewChState)
{
case S_CALL_STANDBY:
if(ChInfo[ch].nChType == 2)
{
switch( ChInfo[ch].Step )
{
case USER_TALKING: // user channel hangup first
nToTrkCh = ChInfo[ch].nToTrkCh;
SsmStopTalkWith(nToTrkCh, ch);
SsmHangup(nToTrkCh);
ChInfo[ch].Step = USER_IDLE;
ChInfo[ ChInfo[ch].nToTrkCh ].nToUserCh = -1;
ChInfo[ch].nToTrkCh = -1;
break;
case USER_WAIT_HANGUP: // SS7 channel wait user channel hangup
SsmStopSendTone(ch); //stop sending busy tone
SsmClearRxDtmfBuf(ch);
ChInfo[ch].InUse = 0;
ChInfo[ ChInfo[ch].nToTrkCh ].nToUserCh = -1;
ChInfo[ch].nToTrkCh = -1;
ChInfo[ch].Step = USER_IDLE;
break;
case USER_WAIT_PICKUP:
break;
case USER_DIALING:
case USER_WAIT_REMOTE_PICKUP:
nToTrkCh = ChInfo[ch].nToTrkCh;
SsmHangup(nToTrkCh);
ChInfo[ch].Step = USER_IDLE;
ChInfo[ ChInfo[ch].nToTrkCh ].nToUserCh = -1;
ChInfo[ch].nToTrkCh = -1;
break;
default:
if( ChInfo[ch].Step != USER_IDLE)
{
SsmStopSendTone(ch);
SsmClearRxDtmfBuf(ch);
ChInfo[ch].Step = USER_IDLE;
}
break;
}
}
else
{
if(ChInfo[ch].nToUserCh !=-1)
{
SsmStopRing(ChInfo[ch].nToUserCh);
//SsmStopSendTone(ChInfo[ch].nToUserCh); //send ring-echo tone
ChInfo[ChInfo[ch].nToUserCh].nToTrkCh = -1;
ChInfo[ch].nToUserCh = -1;
}
}
break;
case S_CALL_RINGING: // SS7 channel is call in : ring
SsmGetPhoNumStr( ch, szPhoNum);//add by wj
SsmGetCallerId(ch, ChInfo[ch].pCallerId.GetBuffer(50));//add by yxd
if( (nToUserCh = PhoNumToUserCh(szPhoNum)) != -1)
{
if(ChInfo[ch].Step == USER_IDLE )
{
//SsmPickup(ch);
SsmStartRing(nToUserCh);
SsmSendTone(ch,2); //send ring-echo tone
ChInfo[nToUserCh].Step = USER_WAIT_PICKUP; // call in: wait user chanbel pickup
ChInfo[nToUserCh].nToTrkCh = ch;
ChInfo[ch].nToUserCh = nToUserCh;
}
}
else SsmHangup(ch);//end by wj
break;
case S_CALL_PICKUPED:
if(SsmGetChType(ch) == 2 )
{
switch( ChInfo[ch].Step )
{
case USER_WAIT_PICKUP:
SsmStopRing(ch);
SsmPickup(ChInfo[ch].nToTrkCh);
SsmStopSendTone(ChInfo[ch].nToTrkCh);
ChInfo[ch].Step = USER_CONNECT;
break;
case USER_IDLE:
strcpy(ChInfo[ch].pPhoNumBuf,"");
SsmSendTone(ch,0); //send dial tone
ChInfo[ch].dwTimeOut = 0;
ChInfo[ch].Step = USER_GET_PHONE_NUM_0;
// m_ChList.SetItemText( ch, ITEM_PendReason, "" );//yxd
break;
case USER_GET_PHONE_NUM_0:
if( SsmGetRxDtmfLen(ch) >= 1 ) //dtmf key detected
{
SsmStopSendTone(ch); //stop sending dial tone
ChInfo[ch].dwTimeOut = 0;
ChInfo[ch].Step = USER_GET_PHONE_NUM_2;
}
else if(++ChInfo[ch].dwTimeOut > 200) // 10 second time out, no key detected
{
SsmStopSendTone(ch); //stop sending dial tone
SsmSendTone(ch,1); //send busy tone
ChInfo[ch].dwTimeOut = 0;
ChInfo[ch].Step = USER_WAIT_HANGUP;
}
break;
case USER_GET_PHONE_NUM_2:
SsmGetDtmfStr(ch,ChInfo[ch].pPhoNumBuf); //retrieve phone num
ChInfo[ch].PhoNumLen = SsmGetRxDtmfLen(ch);
ChInfo[ch].pPhoNumBuf[ ChInfo[ch].PhoNumLen ] = '\0';
if((nToTrkCh=SsmSearchIdleCallOutCh(62,0)) == -1) //no idle trunk channel available
{
SsmSendTone(ch,1);
ChInfo[ch].Step = USER_WAIT_HANGUP;
}
else
{
SsmPickup(nToTrkCh);
SsmSetTxCallerId(nToTrkCh, ChInfo[ch].szUserNumber);
SsmAutoDial(nToTrkCh, ChInfo[ch].pPhoNumBuf);
ChInfo[ch].nToTrkCh = nToTrkCh;
ChInfo[nToTrkCh].nToUserCh = ch;
ChInfo[ch].Step = USER_DIALING;
}
break;
case USER_DIALING:
nDialResult = SsmChkAutoDial(ChInfo[ch].nToTrkCh);
switch(nDialResult)
{
case 1: //dialing
SsmGetDtmfStr(ch,ChInfo[ch].pPhoNumBuf); //retrieve phone num
nPhoNumLen = SsmGetRxDtmfLen(ch);
ChInfo[ch].pPhoNumBuf[nPhoNumLen] = '\0';
if(nPhoNumLen > ChInfo[ch].PhoNumLen )
{
SsmAppendPhoNum(ChInfo[ch].nToTrkCh,
&ChInfo[ch].pPhoNumBuf[ChInfo[ch].PhoNumLen] );
ChInfo[ch].PhoNumLen = nPhoNumLen;
}
break;
case 2: //ringback tone detected and channel is still in autodial state
SsmSendTone(ch,2);
// ChInfo[ch].Step = USER_WAIT_REMOTE_PICKUP;
break;
case -1: //failed call of the function
case 0: //idle channel which is not in autodial state
case 3: //no dial tone
case 4: //busy tone detected
case 5: //silence after ringback tone
case 6: //silence detected on the line
case 10: //no answer
/*
SsmSendTone(ch,1); // send busy tone
SsmPickup(ChInfo[ch].nToTrkCh);
ChInfo[ch].Step = USER_WAIT_HANGUP;*/
break;
case 7: //Voice is detected and autodial is complete.
case 8: //answer signal of F1 frequency is detected and autodail is complete.
case 9: //answer signal of F2 frequency is detected and autodail is complete.
//Info[ch].Step = USER_CONNECT;
break;
}
nChState = SsmGetChState(ChInfo[ch].nToTrkCh );
if( nChState == S_CALL_TALKING )
{
SsmStopSendTone(ch);
ChInfo[ch].Step = USER_CONNECT;
}
break;
case USER_CONNECT:
SsmTalkWith(ChInfo[ch].nToTrkCh, ch);
SsmClearRxDtmfBuf(ch);
ChInfo[ch].Step = USER_TALKING;
break;
}
}
break;
case S_CALL_TALKING:
break;
case S_CALL_PENDING:
if ( SsmGetChType(ch) == 8 )
{
nToUserCh = ChInfo[ch].nToUserCh;
if( nToUserCh != -1 )
{
switch( ChInfo[nToUserCh].Step)
{
case USER_TALKING :
SsmHangup(ch);
SsmStopTalkWith(ch,nToUserCh);
SsmSendTone(nToUserCh,1); //send busy tone
ChInfo[nToUserCh].Step = USER_WAIT_HANGUP;
break;
case USER_WAIT_PICKUP:
SsmHangup(ch);
SsmStopSendTone(ch);
SsmStopRing(nToUserCh);
break;
case USER_DIALING:
SsmHangup(ch);
SsmSendTone(nToUserCh,1); //send busy tone
ChInfo[nToUserCh].Step = USER_WAIT_HANGUP;
break;
}
}
}
switch( SsmGetPendingReason(ch) )
{
case PEND_WaitBckStpMsg:
SsmGetPhoNumStr( ch, szPhoNum);
if( (nToUserCh = PhoNumToUserCh(szPhoNum)) != -1)
{
if(ChInfo[ch].Step == USER_IDLE )
{
//SsmPickup(ch);
SsmStartRing(nToUserCh);
SsmSendTone(ch,2); //send ring-echo tone
ChInfo[nToUserCh].Step = USER_WAIT_PICKUP; // call in: wait user chanbel pickup
ChInfo[nToUserCh].nToTrkCh = ch;
ChInfo[ch].nToUserCh = nToUserCh;
SsmSetKB(ch,6);
}
SsmSetKB(ch,2);
}
else SsmSetKB(ch,5);
break;
case ANALOGOUT_NO_DIALTONE:
case ANALOGOUT_BUSYTONE:
case ANALOGOUT_ECHO_NOVOICE:
case ANALOGOUT_NOANSWER:
case ANALOGOUT_TALKING_REMOTE_HANGUPED:
case ANALOGOUT_NOVOICE:
case SS1IN_BWD_KB5:
case PEND_RemoteHangupOnTalking:
case PEND_AutoDialFailed:
case PEND_SsxUnusable:
case PEND_CircuitReset:
case SS1OUT_TALKING_REMOTE_HANGUPED:
case SS1OUT_NOANSWER:
case SS1OUT_NOBWDACK:
case SS1OUT_DIALING_BWD_HANGUP:
case SS1OUT_BWD_A5:
case SS1OUT_BWD_KB5:
case SS1OUT_BWD_KB2:
case SS1OUT_BWD_KB3:
case SS1OUT_BWD_A4:
case SS1OUT_BWD_KB4:
case SS1OUT_TIMEOUT_BWD_A:
case SS1OUT_TIMEOUT_BWD_A_STOP:
case SS1OUT_TIMEOUT_BWD_KB:
case SS1OUT_TIMEOUT_BWD_KB_STOP:
case SS1OUT_TIMEOUT_CALLERID_BWD_A1:
case SS1OUT_TIMEOUT_CALLERID_BWD_A1_STOP:
case SS1OUT_UNDEFINED_CALLERID_BWD_A:
case SS1OUT_UNDEFINED_BWD_A:
case SS1OUT_UNDEFINED_BWD_KB:
case ISDN_CALLOVER:
case ISDN_WAIT_RELEASE:
case ISDN_HANGING:
case ISDN_RELEASING:
case ISDN_UNALLOCATED_NUMBER:
case ISDN_NETWORK_BUSY:
case ISDN_CIRCUIT_NOT_AVAILABLE:
case ISUP_HardCircuitBlock:
case ISUP_RemoteSuspend:
nToUserCh = ChInfo[ch].nToUserCh;
if( nToUserCh != -1 )
{
switch( ChInfo[nToUserCh].Step)
{
case USER_TALKING :
SsmHangup(ch);
SsmStopTalkWith(ch,nToUserCh);
SsmSendTone(nToUserCh,1); //send busy tone
ChInfo[nToUserCh].Step = USER_WAIT_HANGUP;
break;
case USER_WAIT_PICKUP:
SsmHangup(ch);
SsmStopSendTone(ch);
SsmStopRing(nToUserCh);
break;
case USER_DIALING:
SsmHangup(ch);
SsmSendTone(nToUserCh,1); //send busy tone
ChInfo[nToUserCh].Step = USER_WAIT_HANGUP;
break;
}
}
break;
}
break;
case S_CALL_WAIT_REMOTE_PICKUP:
break;
case S_CALL_LocalBlock:
break;
case S_CALL_RemoteBlock:
break;
case S_CALL_UNAVAILABLE:
nToUserCh = ChInfo[ch].nToUserCh;
if( nToUserCh != -1 )
{
switch( ChInfo[nToUserCh].Step)
{
case USER_TALKING :
SsmHangup(ch);
SsmStopTalkWith(ch,nToUserCh);
SsmSendTone(nToUserCh,1); //send busy tone
ChInfo[nToUserCh].Step = USER_WAIT_HANGUP;
break;
case USER_WAIT_PICKUP:
SsmHangup(ch);
SsmStopSendTone(ch);
SsmStopRing(nToUserCh);
break;
case USER_DIALING:
SsmHangup(ch);
SsmStopSendTone(ch);
SsmStopRing(nToUserCh);
break;
}
}
break;
}
}
CDialog::OnTimer(nIDEvent);
}
int CPbxDlg::ReadConfigFile(char *fnConfig)
{
CFileFind ff;
LPCTSTR lpAppName = "PBX";
char KeyName[50];
int i,ch;
char szConfig[200];
GetCurrentDirectory(200,szConfig);
strcat(szConfig,"\\");
strcat(szConfig,fnConfig);
if(ff.FindFile(fnConfig,0) == 0)
{
for( i=0,ch = 0; ch < nMaxCh; ch++)
{
if( SsmGetChType(ch ) != 2 ) continue;
wsprintf(KeyName,"20%02d",i);
strcpy(PhoNumList[i].szPhoNum ,KeyName);
PhoNumList[i++].nCh = ch;
}
}
else
{
for( i=0,ch = 0; ch < nMaxCh; ch++)
{
if( SsmGetChType(ch ) != 2 ) continue;
wsprintf(KeyName,"UserChPhoNum[%d]",i);
GetPrivateProfileString(lpAppName, KeyName, "XXXXXXXX", PhoNumList[i].szPhoNum, 16, szConfig);
PhoNumList[i++].nCh = ch;
}
}
return 1;
}
void CPbxDlg::OnOK()
{
CDialog::OnOK();
}
void CPbxDlg::OnDestroy()
{
CDialog::OnDestroy();
SsmCloseCti();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -