📄 iprouterdlg.cpp
字号:
}
if(m_H323Ch[i].iDirection == 2)
{
strDirection.LoadString(IDS_ROUTER40);
}
else
{
strDirection = "";
}
}
if(m_ChH323List.GetItemText(i,2) != strState)
{
m_ChH323List.SetItemText(i, 2, strState);
}
if(m_ChH323List.GetItemText(i,3) != strDirection)
{
m_ChH323List.SetItemText(i, 3, strDirection);
}
char szChId[3];
if(-1 == m_H323Ch[i].nLinkToCh)
{
strcpy(szChId ,"");
}
else
{
itoa(m_H323Ch[i].nLinkToCh,szChId,10);
}
if(m_ChH323List.GetItemText(i, 4) != szChId)
{
m_ChH323List.SetItemText(i, 4, szChId);
}
if(m_ChH323List.GetItemText(i, 5) != m_H323Ch[i].szCallerTelNumber)
{
m_ChH323List.SetItemText(i, 5, m_H323Ch[i].szCallerTelNumber);
}
if(m_ChH323List.GetItemText(i, 6) != m_H323Ch[i].szCalleeTelNumber)
{
m_ChH323List.SetItemText(i, 6, m_H323Ch[i].szCalleeTelNumber);
}
}
}
void CIPRouterDlg::AppErrorHandler(int ch)
{
CString cString;
char szErrMsg[124];
SsmGetLastErrMsg(szErrMsg);
cString.LoadString(IDS_ROUTER41);
m_strErrMsg.Format(cString, szErrMsg, ch);
UpdateData(FALSE);
}
void CIPRouterDlg::OnExit()
{
// TODO: Add your message handler code here
for(int i = 0; i < m_nTotalSIPCh; i++)
{
if(m_SIPCh[i].Step != E_STATE_IP_IDLE)
{
SsmHangup(m_SIPCh[i].nChId);
}
}
for(int n = 0; n < m_nTotalH323Ch; n++)
{
if(m_H323Ch[n].Step != E_STATE_IP_IDLE)
{
SsmHangup(m_H323Ch[n].nChId);
}
}
SsmCloseCti();
POSITION pos = m_ChSIPList.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_ChSIPList.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_SIPCh[nItem].nChId))
{
SsmHangup(m_SIPCh[nItem].nChId);
m_SIPCh[nItem].nChId = E_STATE_IP_IDLE;
}
}
}
pos = m_ChH323List.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_ChH323List.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_H323Ch[nItem].nChId))
{
SsmHangup(m_H323Ch[nItem].nChId);
m_H323Ch[nItem].nChId = E_STATE_IP_IDLE;
}
}
}
CDialog::OnDestroy();
CDialog::OnCancel();
}
void CIPRouterDlg::OnAutodial()
{
SsmAutoDial(32,"201.123.123.75");
}
int CIPRouterDlg::SearchIdleCh(int protype)
{
int iSearchMode =0;
if(0 == protype) //0,h323;1,sip
{
iSearchMode = 0x200;
}
else if(1 == protype)
{
iSearchMode = 0x100;
}
int nIpCh = SsmSearchIdleCallOutCh(iSearchMode, 0);
if(nIpCh == -1)
{
AppErrorHandler(-1);
return -1;
}
return nIpCh;
}
IPGate* CIPRouterDlg::__GetLinkObject(int chID, int type)
{
if(type==0)
{
for(int i=0; i<m_nTotalH323Ch; i++)
{
if(m_H323Ch[i].nChId == chID)
{
return &m_H323Ch[i];
}
}
}
else if(1 == type)
{
for(int i=0; i<m_nTotalSIPCh; i++)
{
if(m_SIPCh[i].nChId == chID)
{
return &m_SIPCh[i];
}
}
}
return NULL;
}
void CIPRouterDlg::SIPStateEvent()
{
for(int i=0; i<m_nTotalSIPCh; i++)
{
pCh = &m_SIPCh[i];
__StateEvent();
}
}
void CIPRouterDlg::H323StateEvent()
{
for(int i=0; i<m_nTotalH323Ch; i++)
{
pCh = &m_H323Ch[i];
__StateEvent();
}
}
void CIPRouterDlg::__StateEvent()
{
switch(pCh->Step)
{
case E_STATE_IP_IDLE:
{
if(S_CALL_RINGING == SsmGetChState(pCh->nChId))
{
SsmPickup(pCh->nChId);
SsmGetCallerId(pCh->nChId, pCh->szCallerTelNumber);
pCh->Step = E_STATE_IP_WAIT_CONNECT;
}
break;
}
case E_STATE_IP_WAIT_CONNECT:
{
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else
{
int nState = SsmGetChState(pCh->nChId);
if(S_CALL_TALKING == SsmGetChState(pCh->nChId))
{
pCh->Step = E_STATE_IP_PLAY_ADDRBOOK;
}
}
break;
}
case E_STATE_IP_PLAY_ADDRBOOK:
{
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else
{
if(SsmPlayIndexString(pCh->nChId,"RUSelect") == -1)
{
AppErrorHandler(pCh->nChId);
}
else
{
SsmSetDtmfStopPlay(pCh->nChId,1); // enable DTMF-Stop-Play function
SsmClearRxDtmfBuf(pCh->nChId);
memset(pCh->szCalleeTelNumber, 0, 64);
m_CurTimer =0;
pCh->Step = E_STATE_IP_CHECK_PLAY_ADDRBOOK;
}
}
break;
}
case E_STATE_IP_CHECK_PLAY_ADDRBOOK:
{
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
if( 0 == SsmCheckPlay(pCh->nChId) )
{
SsmStopPlayFileList(pCh->nChId);
}
SsmClearRxDtmfBuf(pCh->nChId);
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
if(SsmGetRxDtmfLen(pCh->nChId) >= 3 && (2 == SsmCheckPlay(pCh->nChId) || 1 == SsmCheckPlay(pCh->nChId)))
{
char ch;
while(1 == SsmGet1stDtmfClr(pCh->nChId, &ch))
{
for(int cur = 0; cur < 63; cur++)
{
if('\0' == pCh->szCalleeTelNumber[cur])
{
pCh->szCalleeTelNumber[cur] = ch;
break;
}
}
}
int m = 0;
for(m = 0 ; m<m_UserNumber; m++)
{
if(m_IPAddress[m].dtmf == atoi(pCh->szCalleeTelNumber))
{
strcpy(pCh->szCalleeTelNumber, m_IPAddress[m].ipaddr);
pCh->nLinkProType = m_IPAddress[m].type;
pCh->Step = E_STATE_IP_WAIT_LINKDIAL;
break;
}
}
if(m_UserNumber == m)
{
//SsmPlayIndexString(pCh->nChId,"Select");
SsmClearRxDtmfBuf(pCh->nChId);
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
}//end if
else
{
++m_CurTimer;
if(m_CurTimer >=6000)
{
//SsmPlayIndexString(pCh->nChId,"Select");
SsmClearRxDtmfBuf(pCh->nChId);
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
}
break;
}
case E_STATE_IP_WAIT_LINKDIAL:
{
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else if('\0' == pCh->szCalleeTelNumber[0])
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else
{
int nLinkToCh = SearchIdleCh(pCh->nLinkProType);
if(-1 == nLinkToCh)
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
break;
}
else
{
pCh->nLinkToCh = nLinkToCh;
pCh->iDirection = 1;
pLinkCh = __GetLinkObject(nLinkToCh, pCh->nLinkProType);
pLinkCh->nLinkToCh = pCh->nChId;
pLinkCh->nLinkProType = pCh->ntype; //add
strcpy(pLinkCh->szCallerTelNumber, pCh->szCallerTelNumber);
strcpy(pLinkCh->szCalleeTelNumber, pCh->szCalleeTelNumber);
pLinkCh->iDirection = pCh->iDirection+1;
pLinkCh->Step = E_STATE_IP_CALLOUT;
SsmSendTone(pCh->nChId, 2);
pCh->Step = E_STATE_IP_WAIT_LINKPICK;
}
}
break;
}
case E_STATE_IP_WAIT_LINKPICK:
{
pLinkCh = __GetLinkObject(pCh->nLinkToCh, pCh->nLinkProType);
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
memset(pCh->szCallerTelNumber,0,64);
memset(pCh->szCalleeTelNumber,0,64);
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else if(E_STATE_IP_IDLE == pLinkCh->Step)
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else
{
SsmStopSendTone(pCh->nChId);
int ret=0;
ret = SsmTalkWith(pCh->nChId, pCh->nLinkToCh);
pCh->Step = E_STATE_IP_WAIT_HANGUP;
}
break;
}
case E_STATE_IP_WAIT_HANGUP:
{
pLinkCh = __GetLinkObject(pCh->nLinkToCh, pCh->nLinkProType);
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
SsmStopTalkWith(pCh->nChId, pCh->nLinkToCh);
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else if(S_CALL_STANDBY == SsmGetChState(pLinkCh->nChId) || S_CALL_PENDING == SsmGetChState(pLinkCh->nChId))
{
SsmStopTalkWith(pCh->nChId, pCh->nLinkToCh);
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
break;
}
///////////////////////////////////////////////////////////////////////////////////////////
case E_STATE_IP_CALLOUT:
{
pLinkCh = __GetLinkObject(pCh->nLinkToCh, pCh->nLinkProType);
if(E_STATE_IP_IDLE == pLinkCh->Step)
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else
{
int result = SsmAutoDial(pCh->nChId, pCh->szCalleeTelNumber);
if(-1 == result)
{
result = SsmGetAutoDialFailureReason(pCh->nChId);
AppErrorHandler(pCh->nChId);
}
else
{
pCh->Step = E_STATE_IP_WAIT_CALLEE_PICKUP;
}
}
break;
}
case E_STATE_IP_WAIT_CALLEE_PICKUP:
{
pLinkCh = __GetLinkObject(pCh->nLinkToCh, pCh->nLinkProType);
if(S_CALL_STANDBY == SsmGetChState(pCh->nChId) || S_CALL_PENDING == SsmGetChState(pCh->nChId))
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else if(E_STATE_IP_IDLE == pLinkCh->Step)
{
SsmHangup(pCh->nChId);
pCh->Step = E_STATE_IP_IDLE;
}
else if(S_CALL_TALKING == SsmGetChState(pCh->nChId))
{
pCh->Step = E_STATE_IP_WAIT_HANGUP;
}
break;
}
}//end switch
}//end for
void CIPRouterDlg::__ReadIndexINI(const char* lpFile)
{
LPCTSTR lpSec;
lpSec = "IpRouter";
m_UserNumber = GetPrivateProfileInt(lpSec,"UserNumber",0,lpFile);
char dtmf[50] = {'\0'};
char ipaddr[50] = {'\0'};
char type[50] = {'\0'};
char ss[10];
char* szipaddr="";
for(int i =1; i< m_UserNumber+1; i++)
{
strcpy(dtmf,"dtmf_");
strcpy(ipaddr,"ipaddr_");
strcpy(type,"type_");
itoa(i,ss,10);
strcat(dtmf,ss);
strcat(ipaddr,ss);
strcat(type,ss);
m_IPAddress[i].dtmf = GetPrivateProfileInt(lpSec,dtmf,0,lpFile);
char ipaddr0[50];
GetPrivateProfileString(lpSec,ipaddr,"0.0.0.0", ipaddr0, 50,lpFile);
strcpy(m_IPAddress[i].ipaddr, ipaddr0);
m_IPAddress[i].type = GetPrivateProfileInt(lpSec,type,0,lpFile);
}
}
BOOL CIPRouterDlg::CheckConfigFile(LPSTR lpstrSrc, LPCSTR lpcstrDefault, LPSTR lpstrActual)
{
if( lstrlen(lpstrSrc) == 0 )
{
GetWindowsDirectory(lpstrActual,MAX_PATH);
lstrcat(lpstrActual,"\\");
lstrcat(lpstrActual, lpcstrDefault);
}
else
{
if (strchr(lpstrSrc,':')) lstrcpy(lpstrActual,lpstrSrc);
else
{
GetCurrentDirectory(MAX_PATH,lpstrActual);
lstrcat(lpstrActual,"\\");
lstrcat(lpstrActual,lpstrSrc);
}
}
return TRUE;
}
void CIPRouterDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
// TODO: Add your message handler code here
for(int i = 0; i < m_nTotalSIPCh; i++)
{
if(m_SIPCh[i].Step != E_STATE_IP_IDLE)
{
SsmHangup(m_SIPCh[i].nChId);
}
}
for(int n = 0; n < m_nTotalH323Ch; n++)
{
if(m_H323Ch[n].Step != E_STATE_IP_IDLE)
{
SsmHangup(m_H323Ch[n].nChId);
}
}
SsmCloseCti();
POSITION pos = m_ChSIPList.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_ChSIPList.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_SIPCh[nItem].nChId))
{
SsmHangup(m_SIPCh[nItem].nChId);
m_SIPCh[nItem].nChId = E_STATE_IP_IDLE;
}
}
}
pos = m_ChH323List.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_ChH323List.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
if(S_CALL_TALKING == SsmGetChState(m_H323Ch[nItem].nChId))
{
SsmHangup(m_H323Ch[nItem].nChId);
m_H323Ch[nItem].nChId = E_STATE_IP_IDLE;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -