📄 ipgatewaydlg.cpp
字号:
case E_STATE_SS1_CALLEE_PICKEDUP:
{
if(S_CALL_PENDING == SsmGetChState(m_SS1Ch[i].nChId))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
else
{
if(Session_IsIpChIdle(m_SS1Ch[i].nIpCh))
{
SsmHangup(m_SS1Ch[i].nChId);
m_SS1Ch[i].Step = E_STATE_SS1_IDLE;
}
}
break;
}
}//? end switch
}//? end if
}
void CIPGatewayDlg::ScanIpCh()
{
for(int i = 0; i < m_nTotalIpCh; i++)
{
switch(m_IpCh[i].Step)
{
// unavailable
case E_STATE_IP_UNAVAILABLE:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId))
{
m_IpCh[i].Step = E_STATE_IP_IDLE;
break;
}
else if(S_CALL_UNAVAILABLE != SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
break;
}
break;
}
// idle
case E_STATE_IP_IDLE:
{
if(S_CALL_RINGING == SsmGetChState(m_IpCh[i].nChId))
{
SsmPickup(m_IpCh[i].nChId);
SsmGetCallerId( m_IpCh[i].nChId, m_IpCh[i].szCallerTelNumber);
m_IpCh[i].Step = E_STATE_IP_WAIT_CALLER_CONNECT;
}
else
{
m_IpCh[i].iDirection = 0;
m_IpCh[i].nLinkCh = -1;
memset(m_IpCh[i].szCalleeTelNumber, 0, 64);
memset(m_IpCh[i].szCallerTelNumber, 0, 64);
if(S_CALL_UNAVAILABLE == SsmGetChState(m_IpCh[i].nChId))
m_IpCh[i].Step = E_STATE_IP_UNAVAILABLE;
}
break;
}
// wait for the caller of this IP channel to connect
case E_STATE_IP_WAIT_CALLER_CONNECT:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(S_CALL_TALKING == SsmGetChState(m_IpCh[i].nChId))
{
m_IpCh[i].Step = E_STATE_IP_PLAY_SELECT1;
}
}
break;
}
// go to play select1 music
case E_STATE_IP_PLAY_SELECT1:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(SsmPlayIndexString(m_IpCh[i].nChId, _T("Select1")) == -1)
{
AppErrorHandler(m_IpCh[i].nChId);
}
else
{
SsmSetDtmfStopPlay(m_IpCh[i].nChId,1); // enable DTMF-Stop-Play function
SsmClearRxDtmfBuf(m_IpCh[i].nChId);
memset(m_IpCh[i].szCalleeTelNumber, 0, 64);
m_IpCh[i].Step = E_STATE_IP_CHECK_PLAY_SELECT1;
}
}
break;
}
// playing select1 music
case E_STATE_IP_CHECK_PLAY_SELECT1:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmStopPlayIndex(m_IpCh[i].nChId);
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(SsmGetRxDtmfLen(m_IpCh[i].nChId) >= 1 && (2 == SsmCheckPlay(m_IpCh[i].nChId) || 1 == SsmCheckPlay(m_IpCh[i].nChId)))
{
char ch;
while(1 == SsmGet1stDtmfClr(m_IpCh[i].nChId, &ch))
{
if('1' == ch)
m_IpCh[i].nLinkType= LINK_WITH_ANALOG;
else if ('2' == ch)
m_IpCh[i].nLinkType = LINK_WITH_SS1;
else
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
break;
}
m_IpCh[i].Step = E_STATE_IP_PLAY_SELECT2;
}
}
}
break;
}
// go to play select2 music
case E_STATE_IP_PLAY_SELECT2:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(-1 == SsmPlayIndexString(m_IpCh[i].nChId, _T("Select2")))
{
AppErrorHandler(m_IpCh[i].nChId);
}
else
{
SsmSetDtmfStopPlay(m_IpCh[i].nChId,1); // enable DTMF-Stop-Play function
SsmClearRxDtmfBuf(m_IpCh[i].nChId);
memset(m_IpCh[i].szCalleeTelNumber, 0, 64);
m_IpCh[i].Step = E_STATE_IP_CHECK_PLAY_SELECT2;
}
}
break;
}
// playing select2 music
case E_STATE_IP_CHECK_PLAY_SELECT2:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmStopPlayIndex(m_IpCh[i].nChId);
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(SsmGetRxDtmfLen(m_IpCh[i].nChId) >= 1 && (2 == SsmCheckPlay(m_IpCh[i].nChId) || 1 == SsmCheckPlay(m_IpCh[i].nChId)))
{
char ch;
while(1 == SsmGet1stDtmfClr(m_IpCh[i].nChId, &ch))
{
if('#' == ch)
{
m_IpCh[i].Step = E_STATE_IP_WAIT_LINKCH_DIAL;
}
else
{
for(int m = 0; m < 63; m++)
{
if('\0' == m_IpCh[i].szCalleeTelNumber[m])
{
m_IpCh[i].szCalleeTelNumber[m] = ch;
break;
}
}
}
}
}
}
break;
}
// wait for the app to dial with linked channel
case E_STATE_IP_WAIT_LINKCH_DIAL:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if('\0' == m_IpCh[i].szCalleeTelNumber[0])
{
m_IpCh[i].Step = E_STATE_IP_PLAY_SELECT2;
}
else
{
int nLinkCh = Session_FindIdleIPLinkCh(m_IpCh[i].nLinkType);
if(-1 != nLinkCh)
{
m_IpCh[i].nLinkCh = nLinkCh;
m_IpCh[i].iDirection = 1;
Session_SetIPLinkChDial(m_IpCh[i].nLinkCh,
m_IpCh[i].nLinkType,
m_IpCh[i].nChId,
m_IpCh[i].szCallerTelNumber,
m_IpCh[i].szCalleeTelNumber,
2);
m_IpCh[i].Step = E_STATE_IP_WAIT_LINKCH_PICKUP;
}
else
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
}
}
break;
}
// wait for the remote user to pick up
case E_STATE_IP_WAIT_LINKCH_PICKUP:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId)|| S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
memset(m_IpCh[i].szCallerTelNumber, 0, 64);
memset(m_IpCh[i].szCalleeTelNumber, 0, 64);
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(Session_IsIPLinkChIdle(m_IpCh[i].nLinkCh, m_IpCh[i].nLinkType))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(Session_IsIPLinkChPickedUp(m_IpCh[i].nLinkCh, m_IpCh[i].nLinkType))
{
SsmTalkWith(m_IpCh[i].nChId, m_IpCh[i].nLinkCh);
m_IpCh[i].Step = E_STATE_IP_WAIT_HANGUP;
}
}
}
break;
}
// the remote user has picked up, wait for anyone to hang up
case E_STATE_IP_WAIT_HANGUP:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmStopTalkWith(m_IpCh[i].nChId, m_IpCh[i].nLinkCh);
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(Session_IsIPLinkChIdle(m_IpCh[i].nLinkCh, m_IpCh[i].nLinkType))
{
SsmStopTalkWith(m_IpCh[i].nChId, m_IpCh[i].nLinkCh);
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
}
break;
}
// go to dial with this IP channel
case E_STATE_IP_CALLOUT:
{
if(Session_IsIPLinkChIdle(m_IpCh[i].nLinkCh, m_IpCh[i].nLinkType))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(SsmAutoDial(m_IpCh[i].nChId, m_IpCh[i].szCalleeTelNumber))
{
AppErrorHandler(m_IpCh[i].nChId);
}
else
{
m_IpCh[i].Step = E_STATE_IP_WAIT_CALLEE_PICKUP;
}
}
break;
}
// wait for the callee of this IP channel to pick up
case E_STATE_IP_WAIT_CALLEE_PICKUP:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(Session_IsIPLinkChIdle(m_IpCh[i].nLinkCh, m_IpCh[i].nLinkType))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(S_CALL_TALKING == SsmGetChState(m_IpCh[i].nChId))
{
m_IpCh[i].Step = E_STATE_IP_CALLEE_PICKEDUP;
}
}
}
break;
}
// the callee of this IP channel has picked up
case E_STATE_IP_CALLEE_PICKEDUP:
{
if(S_CALL_STANDBY == SsmGetChState(m_IpCh[i].nChId) || S_CALL_PENDING == SsmGetChState(m_IpCh[i].nChId))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
else
{
if(Session_IsIPLinkChIdle(m_IpCh[i].nLinkCh, m_IpCh[i].nLinkType))
{
SsmHangup(m_IpCh[i].nChId);
m_IpCh[i].Step = E_STATE_IP_IDLE;
}
}
break;
}
}//? end switch
}//? end if
}
void CIPGatewayDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
for(int i = 0; i < m_nTotalAnalogCh; i++)
{
if(m_AnalogCh[i].Step != E_STATE_ANALOG_IDLE)
{
SsmHangup(m_AnalogCh[i].nChId);
}
}
for(int m = 0; m < m_nTotalSS1Ch; m++)
{
if(m_SS1Ch[m].Step != E_STATE_SS1_IDLE)
{
SsmHangup(m_SS1Ch[m].nChId);
}
}
for(int n = 0; n < m_nTotalIpCh; n++)
{
if(m_IpCh[n].Step != E_STATE_IP_IDLE)
{
SsmHangup(m_IpCh[n].nChId);
}
}
SsmCloseCti();
}
void CIPGatewayDlg::OnDisconnect()
{
// TODO: Add your control notification handler code here
// search selected Analog channel
POSITION pos = m_AnalogChList.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_AnalogChList.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_AnalogCh[nItem].nChId))
{
SsmHangup(m_AnalogCh[nItem].nChId);
Session_SetAnalogChState(m_AnalogCh[nItem].nChId, E_STATE_ANALOG_IDLE);
}
}
}
// search selected SS1 channel
pos = m_SS1ChList.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_SS1ChList.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_SS1Ch[nItem].nChId))
{
SsmHangup(m_SS1Ch[nItem].nChId);
Session_SetSS1ChState(m_SS1Ch[nItem].nChId, E_STATE_SS1_IDLE);
}
}
}
// search selected IP channel
pos = m_IpChList.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_IpChList.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_IpCh[nItem].nChId))
{
SsmHangup(m_IpCh[nItem].nChId);
}
}
}
}
void CIPGatewayDlg::ProtocalType()
{
int nProtocol = GetPrivateProfileInt(_T("CONFIG"), _T("IPProtocol"), 0, _T(".\\IPGateway.ini"));
switch (nProtocol)
{
case 0:
{
m_nIPProtocol = PROTOCOL_H323;
break;
}
case 1:
{
m_nIPProtocol = PROTOCOL_SIP;
break;
}
default:
{
m_nIPProtocol = -1;
break;
}
}
}
void CIPGatewayDlg::ReadIPAddress()
{
CString strFile;
CString strSection;
CString strKey;
for(int a = 0; a < ARRAY_SIZE(m_nIPAddress); a++)
{
memset(m_nIPAddress[a].szAddress, 0, sizeof(m_nIPAddress[a].szAddress));
}
strFile = _T(".\\IPGateway.ini");
strSection = _T("CONFIG");
strKey = _T("TotalAddress");
int nTotal = GetPrivateProfileInt(strSection, strKey, 0, strFile);
if(nTotal > ARRAY_SIZE(m_nIPAddress))
{
nTotal = ARRAY_SIZE(m_nIPAddress);
}
for(int i = 0; i < nTotal; i++)
{
strSection.Format(_T("ADDRESS_%i"), i);
strKey = _T("dtmf");
m_nIPAddress[i].nDTMF = GetPrivateProfileInt(strSection, strKey, 0, strFile);
strKey = _T("ipaddress");
GetPrivateProfileString(strSection, strKey, _T(""), m_nIPAddress[i].szAddress, sizeof(m_nIPAddress[i]) - 1 , strFile);
}
}
void CIPGatewayDlg::AppErrorHandler(int ch)
{
CString cString;
char szErrMsg[124];
SsmGetLastErrMsg(szErrMsg);
cString.LoadString(IDS_GATEWAY51);
m_strErrMsg.Format(cString, szErrMsg, ch);
UpdateData(FALSE);
}
void CIPGatewayDlg::InitLab()
{
if(g_dwLanguageConversion == g_dwCHINESE_TRADITIONAL
||g_dwLanguageConversion == g_dwCHINESE_HONGKONG)
{
SetWindowText(BIG5GATEWAY1);
SetEngWinLab(this, IDC_STATIC_ANALOG, BIG5GATEWAY2);
SetEngWinLab(this, IDC_STATIC_SS1, BIG5GATEWAY2);
SetEngWinLab(this, IDC_STATIC_IP, BIG5GATEWAY3);
SetEngWinLab(this, ID_DISCONNECT, BIG5GATEWAY4);
SetEngWinLab(this, IDOK, BIG5GATEWAY5);
}
else
{
SetWindowText(GATEWAY1);
SetEngWinLab(this, IDC_STATIC_ANALOG, GATEWAY2);
SetEngWinLab(this, IDC_STATIC_SS1, GATEWAY2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -