📄 netprodlg.cpp
字号:
pNode->m_sCallEndTime = m_strCallEndTime;
pNode->m_sState = m_strState;
m_pCallLogList.AddTail(pNode);
}
}
}
}
return TRUE;
}
BOOL CNetproDlg::WriteCallLog(CString m_sFilename, CString m_Section)
{
CString m_strCallLog,CRLF,banner;
CString m_strName,m_strNum,m_strKey,m_strSection;
banner.LoadString(IDS_WARNING);
m_strSection = m_Section;
m_strKey = _T("\t");
CRLF = _T("\r\n");
CFile f;
f.Open(m_sFilename,CFile::modeWrite|CFile::shareDenyRead|CFile::modeCreate);
f.SeekToBegin();
f.Write((LPCTSTR)banner,banner.GetLength());
f.Write((LPCTSTR)m_strSection,m_strSection.GetLength());
f.Write((LPCTSTR)CRLF,CRLF.GetLength());
POSITION pos = m_pCallLogList.GetHeadPosition();
while(pos!=NULL)
{
CALLLOGNODE* pNode = (LPCALLLOGNODE)m_pCallLogList.GetNext(pos);
f.Write((LPCTSTR)pNode->m_sCallNum,pNode->m_sCallNum.GetLength());
f.Write((LPCTSTR)m_strKey,m_strKey.GetLength());
f.Write((LPCTSTR)pNode->m_sCallTime,pNode->m_sCallTime.GetLength());
f.Write((LPCTSTR)m_strKey,m_strKey.GetLength());
f.Write((LPCTSTR)pNode->m_sCallEndTime,pNode->m_sCallEndTime.GetLength());
f.Write((LPCTSTR)m_strKey,m_strKey.GetLength());
f.Write((LPCTSTR)pNode->m_sState,pNode->m_sState.GetLength());
f.Write((LPCTSTR)CRLF,CRLF.GetLength());
delete pNode;
}
f.Close();
return TRUE;
}
HBRUSH CAboutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
LOGBRUSH logbrush;
// TODO: Change any attributes of the DC here
switch (nCtlColor)
{
//Static controls need black text and same background as m_brush
case CTLCOLOR_STATIC:
m_brush.GetLogBrush( &logbrush );
pDC->SetBkColor(logbrush.lbColor);
return m_brush;
case CTLCOLOR_DLG:
return m_brush;
//This shouldn't occurr since we took all the cases, but
//JUST IN CASE, return the new brush
default:
return hbr;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
BOOL CNetproDlg::StartCallTimer()
{
MessageBeep(MB_OK);
m_CallTimerCounter=0;
KillCallTimer();
m_CallTimer = SetTimer(7676,3000,NULL);
// 1800000,
// NULL);
bInCalling = TRUE;
SendCmdToVSLC(2);//ring
return TRUE;
}
BOOL CNetproDlg::KillCallTimer()
{
bInCalling = FALSE;
if(m_CallTimer)
{
KillTimer(m_CallTimer);
m_CallTimer = 0;
}
SendCmdToVSLC(3);//ring off
return TRUE;
}
void CNetproDlg::OnReject()
{
KillCallTimer();
pConf->m_pCallNotify->RejectCall();
DisableButtons(FALSE,FALSE);
m_cStatus.LoadString(IDS_WELCOME_USE_IPHONE);//.Format("欢迎使用 FFCS IP 电话");
/*m_cMsgwnd.m_cStatus = m_cStatus;
if(m_cMsgwnd.IsWindowVisible( ))
{
m_cMsgwnd.PaintFlame();
}*/
m_pMsgWndOwner->SetMsgWndStatus(m_cStatus,0);
}
void CNetproDlg::OnAccept()
{
KillCallTimer();
pConf->m_pCallNotify->AcceptCall();
::EnableWindow(::GetDlgItem(m_hWnd,IDC_ACCEPT),FALSE);
::EnableWindow(::GetDlgItem(m_hWnd,IDC_REJECT),FALSE);
m_cStatus.LoadString(IDS_WELCOME_USE_IPHONE);
/* m_cMsgwnd.m_cStatus = m_cStatus;
if(m_cMsgwnd.IsWindowVisible( ))
{
m_cMsgwnd.PaintFlame();
}
*/
m_pMsgWndOwner->SetMsgWndStatus(m_cStatus,0);
}
void CNetproDlg::PlayCallSound()
{
if(!sndPlaySound("ring.wav",SND_SYNC|SND_NODEFAULT))//播放WAV文件
MessageBeep(MB_OK);
}
void CNetproDlg::DisableButtons(BOOL hangup, BOOL Accept)
{
::EnableWindow(::GetDlgItem(m_hWnd,IDC_CALLHANGUP),hangup);
::EnableWindow(::GetDlgItem(m_hWnd,IDC_ACCEPT),Accept);
::EnableWindow(::GetDlgItem(m_hWnd,IDC_REJECT),Accept);
}
UINT CNetproDlg::ConnectThread(LPVOID pParam)
{
TRACE("Connect Thread started\n");
CNetproDlg* m_pOwner = (CNetproDlg*)pParam;
if(!m_pOwner->ConnectToVSLServer())
m_pOwner->m_cStatus.LoadString(IDS_CONNECT_TO_VSL_NG);
SetEvent(m_pOwner->m_hEventConnectThread);
TRACE("Connect Thread Ended\n");
AfxEndThread(100);
return 0;
}
BOOL CNetproDlg::BeginConnectThread()
{
if(WaitForSingleObject(m_hEventConnectThread,0)!=WAIT_OBJECT_0)
return FALSE;
if (!(m_pThread = AfxBeginThread(ConnectThread, this)))
{
SetEvent(m_hEventConnectThread);
return FALSE;
}
return TRUE;
}
BOOL CNetproDlg::ConnectToVSLServer()
{
UINT LocalPort;
struct sockaddr_in server;
struct sockaddr_in local;
struct hostent *hp;
char server_name[30];
unsigned int addr;
UINT port=7777;
int datasize;
char Buffer[128];
int Result;
SOCKET MySock;
if(!m_oDN.GetLength()||!m_ServerAddr.GetLength())
return FALSE;
strcpy(Buffer,(LPCTSTR)m_oDN);
ASSERT(strlen(Buffer)==m_oDN.GetLength());
strcpy(server_name,(LPCTSTR)m_ServerAddr);
//if (isalpha(server_name[0])) { /* server address is a name */
// hp = gethostbyname(server_name);
//}
//else { /* Convert nnn.nnn address to a usable one */
// addr = inet_addr(server_name);
// hp = gethostbyaddr((char *)&addr,4,AF_INET);
//}
//if (hp == NULL ) {
// TRACE2("Client: Cannot resolve address [%s]: Error %d\n",
// server_name,WSAGetLastError());
//return FALSE;
//}
//
// Copy the resolved information into the sockaddr_in structure
//
memset(&server,0,sizeof(server));
//memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);
//server.sin_family = hp->h_addrtype;
//server.sin_port = htons(port);
server.sin_addr.s_addr = inet_addr(server_name);
server.sin_family = AF_INET;
server.sin_port = htons(port);
memset(&local,0,sizeof(local));
local.sin_family = AF_INET;
local.sin_addr.s_addr = inet_addr((LPCTSTR)m_oIP);
/*
* Port MUST be in Network Byte Order
*/
local.sin_port = htons(0);
MySock = socket(AF_INET,SOCK_STREAM,0);
if (MySock <0 ) {
TRACE1("Client: Error Opening socket: Error %d\n",
WSAGetLastError());
return FALSE;
}
else
{
u_long argp =1;
if(ioctlsocket(MySock,FIONBIO,&argp)== SOCKET_ERROR){
TRACE1("ioctlsocket() failed: %d\n",WSAGetLastError());
closesocket(MySock);
return FALSE;
}
if(bind(MySock,(struct sockaddr*)&local,sizeof(local))== SOCKET_ERROR){
TRACE1("bind() failed: %d\n",WSAGetLastError());
closesocket(MySock);
return FALSE;
}else{
Result = connect(MySock,(struct sockaddr*)&server,sizeof(server));
if(Result== SOCKET_ERROR&&WSAGetLastError()!=WSAEWOULDBLOCK) {
TRACE1("connect() failed\n",WSAGetLastError());
closesocket(MySock);
return FALSE;
}else{
TRACE0("Async connect()\n");
FD_SET fd = {1, MySock};
TIMEVAL tv = {SOCKET_TIMEOUT, 0};
Result = select(0, NULL, &fd, NULL, &tv);
if(Result == SOCKET_ERROR) {
TRACE1("Select() failed: %d\n",WSAGetLastError());
closesocket(MySock);
return FALSE;//Error
//throw new CBlockingSocketException("Send timeout");
}else if(Result ==0){
TRACE0("Socket Timeout\n");
closesocket(MySock);
return FALSE;//Time out
}
if((datasize=send(MySock,Buffer,strlen(Buffer),0)) == SOCKET_ERROR) {
TRACE1("send() failed: error %d\n",WSAGetLastError());
closesocket(MySock);
return FALSE;
}else{
if(datasize!=strlen(Buffer)){
TRACE0("send() Error Wrong Sent size");
closesocket(MySock);
return FALSE;
}
FD_SET fd = {1, MySock};
TIMEVAL tv = {SOCKET_TIMEOUT, 0};
Result = select(0, &fd,NULL, NULL, &tv);
if(Result == SOCKET_ERROR) {
TRACE1("Select() failed: %d\n",WSAGetLastError());
closesocket(MySock);
return FALSE;//Error
//throw new CBlockingSocketException("Send timeout");
}else if(Result ==0){
TRACE0("Socket Timeout\n");
closesocket(MySock);
return FALSE;//Time out
}
if ((datasize=recv(MySock,Buffer,sizeof (Buffer),0 )) == SOCKET_ERROR) {
TRACE1("recv() failed: error %d\n",WSAGetLastError());
closesocket(MySock);
return FALSE;
}else{
if((!datasize)||datasize==128){
TRACE0("recv() Error Wrong Recv size");
closesocket(MySock);
return FALSE;
}
Buffer[datasize]=0;
WPARAM wParam = 0;
if(strcmp(Buffer,"FFIT")==0)
{
wParam =1;
//KillTimer(m_ModemTestTimer);
//m_ModemTestTimer = SetTimer(MODEM_TIMER_ID,2000,NULL);
}else if(strcmp(Buffer,"FAIL")==0)
{
wParam = 0;
}
//m_cMsgwnd.PaintFlame();
closesocket(MySock);
if(GetSafeHwnd()&&IsWindow(GetSafeHwnd())){
::SendMessage(GetSafeHwnd(),WM_RESULT_RECEIVED,wParam,0);
}
return TRUE;
}//Recv success
}//Send Success
}//Connect Success
}//bind Success
}//Create Success
}
BOOL CNetproDlg::RasConfirmHangupAll()
{
RASCONN ras[20];
DWORD dSize, dNumber,dwRet;
char szBuf[256];
HRASCONN hRasConn;
CString s1;
ras[0].dwSize = sizeof( RASCONN );
dSize = sizeof( ras ); // Get active RAS - Connection
dwRet = RasEnumConnections( ras, &dSize, &dNumber );
if ( dwRet != 0 )
{
if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 )
wsprintf( (LPSTR)szBuf, "Undefined RAS Enum Connections error (%ld).", dwRet );
AfxMessageBox( (LPSTR)szBuf);
return FALSE;
}
if(dNumber>0){
s1.LoadString(IDS_CONFIRM_DISCONNECT_RAS);
if(MessageBox(s1,"netpro",MB_ICONQUESTION|MB_YESNO)==IDYES){
Invalidate();
m_pMsgWndOwner->PaintMsgWnd();
for( DWORD dCount = 0; dCount < dNumber; dCount++ )
{
// Hang up that connection
hRasConn = ras[dCount].hrasconn;
dwRet = RasHangUp( hRasConn );
if ( dwRet != 0 )
{
if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 )
wsprintf( (LPSTR)szBuf, "Undefined RAS HangUp Error (%ld).", dwRet );
AfxMessageBox( (LPSTR)szBuf);
return FALSE;
}
}
}else{
return FALSE;
}//用户选择不挂断拨号连接
}
return TRUE;
}
HINSTANCE CNetproDlg::GotoURL(LPCTSTR url, int showcmd)
{
TCHAR key[MAX_PATH + MAX_PATH];
// First try ShellExecute()
HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd);
// If it failed, get the .htm regkey and lookup the program
if ((UINT)result <= HINSTANCE_ERROR) {
if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) {
lstrcat(key, _T("\\shell\\open\\command"));
if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) {
TCHAR *pos;
pos = _tcsstr(key, _T("\"%1\""));
if (pos == NULL) { // No quotes found
pos = strstr(key, _T("%1")); // Check for %1, without quotes
if (pos == NULL) // No parameter at all...
pos = key+lstrlen(key)-1;
else
*pos = '\0'; // Remove the parameter
}
else
*pos = '\0'; // Remove the parameter
lstrcat(pos, _T(" "));
lstrcat(pos, url);
result = (HINSTANCE) WinExec(key,showcmd);
}
}
}
return result;
}
LONG CNetproDlg::GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata)
{
HKEY hkey;
LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey);
if (retval == ERROR_SUCCESS) {
long datasize = MAX_PATH;
TCHAR data[MAX_PATH];
RegQueryValue(hkey, NULL, data, &datasize);
lstrcpy(retdata,data);
RegCloseKey(hkey);
}
return retval;
}
void CNetproDlg::OnResultReceived(WPARAM wParam, LPARAM lParam)
{
switch(wParam)
{
case 0:
m_cStatus.LoadString(IDS_SINGIN_FAILED);
m_pMsgWndOwner->SetMsgWndStatus(m_cStatus,0);
break;
case 1:
m_cStatus.LoadString(IDS_CONNECT_TO_VSL_OK);
m_origDN=m_oDN;
m_origIP=m_oIP;
OneHourCounter = 0;
m_pMsgWndOwner->SetOnline(TRUE);
m_pMsgWndOwner->SetMsgWndStatus(m_cStatus,0);
if(m_ModemTestTimer){
KillTimer(m_ModemTestTimer);
m_ModemTestTimer = SetTimer(MODEM_TIMER_ID,2000,NULL);
}
break;
}
}
LONG CNetproDlg::OnCommunication(WPARAM ch, LPARAM port)
{
if (port <= 0 || port > 4)
return -1;
switch(ch)
{
case 128://挂断
if(pConf){
if (pConf->InConnection())
{
pConf->HangUp();
}
}
break;
case 0://提机
if(pConf){
if (pConf->InConnection())
{
if(bInCalling){
OnAccept();
}
}
}
break;
}
return 0;
}
LONG CNetproDlg::OnCTSDetected(WPARAM ch, LPARAM port)
{
if (port <= 0 || port > 4)
return -1;
CString string;
string = "Clear To Send";
return 0;
}
BOOL CNetproDlg::SendCmdToVSLC(unsigned char cmd)
{
char buf[100];
memset(&buf, 0, sizeof(buf));
switch(cmd)
{
case 0:
buf[0] = GET_PHONE;
break;
case 1:
break;
case 2:
buf[0] = RING_ON;
break;
case 3:
buf[0] = RING_OFF;
break;
default:
break;
}
// m_SerialPort.WriteToPort(buf);
return TRUE;
}
void CNetproDlg::GotoAdURL()
{
if(m_strAdURL!=""){
GotoURL(m_strAdURL,SW_NORMAL);
}
}
void CNetproDlg::PopupSetupDlg()
{
// TODO: Add your command handler code here
CPropertyDlg propertydlg;
int nResponse = propertydlg.DoModal();
if(nResponse == IDOK)
{
CMyRegKey regKey;
long lResult = regKey.Open(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\FFCS\\VSL IPHONE\\Config"));
if(lResult==ERROR_SUCCESS)
{
regKey.Write(_T("TELEPHONENUMBER"),m_oDN);
}
//m_cMsgwnd.m_PhoneNum = m_oDN;
m_pMsgWndOwner->SetMsgWndStatus(m_oDN,4);
}
if ( m_FillDNFirst == FALSE)
{
//m_cMsgwnd.PaintFlame();
}
}
CString CNetproDlg::GetAdURL()
{
return m_strAdURL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -