⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netprodlg.cpp

📁 通信增值服务,上网接听电话
💻 CPP
📖 第 1 页 / 共 4 页
字号:
						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 + -