www.pudn.com > netcode34.zip > Property.cpp, change:2001-09-10,size:10566b


// Property.cpp : Defines the class behaviors for the application. 
// 
 
#include "stdafx.h" 
#include "Property.h" 
 
#include "GuiRes.h" 
#include ".\MainFrame\MainFrame.h" 
#include ".\MainSheet.h" 
#include "AclSet.h" 
#include "NetTimeSheet.h" 
#include "NetIPAria.h" 
#include "Acl.h" 
#include "Splash.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
//============================================================================================= 
// The one and only CPropertyApp object 
 
CPropertyApp			theApp; 
CAclFile				m_AclFile; 
extern CMainSheet		*dlg; 
extern CAclSet			*dlgAclSet; 
extern CNetTimeSheet	*dlgNetTimeSheet; 
extern CFileDialog		*dlgFile; 
extern CNetIPAria		*dlgNetIPAria; 
extern CSystemTray		m_TrayIcon; 
 
//============================================================================================= 
// CPropertyApp 
 
BEGIN_MESSAGE_MAP(CPropertyApp, CWinApp) 
	//{{AFX_MSG_MAP(CPropertyApp) 
	ON_COMMAND(ID_APP_EXIT,		OnAppExit) 
	ON_COMMAND(ID_ABOUT,		OnAbout) 
	ON_COMMAND(ID_ACL_SET,		OnAclSet) 
	ON_COMMAND(ID_LOG_QUERY,	OnLogQuery) 
	ON_COMMAND(ID_SYSTEM_SET,	OnSystemSet) 
	ON_UPDATE_COMMAND_UI(ID_ABOUT,			OnUpdateAbout) 
	ON_UPDATE_COMMAND_UI(ID_ACL_SET,		OnUpdateAclSet) 
	ON_UPDATE_COMMAND_UI(ID_APP_EXIT,		OnUpdateAppExit) 
	ON_UPDATE_COMMAND_UI(ID_LOG_QUERY,		OnUpdateLogQuery) 
	ON_UPDATE_COMMAND_UI(ID_SYSTEM_SET,		OnUpdateSystemSet) 
	ON_COMMAND(ID_CONTROL_FRAME,			OnControlFrame) 
	ON_UPDATE_COMMAND_UI(ID_CONTROL_FRAME,	OnUpdateControlFrame) 
	ON_COMMAND(ID_PACKET_MONITOR,			OnPacketMonitor) 
	ON_UPDATE_COMMAND_UI(ID_PACKET_MONITOR, OnUpdatePacketMonitor) 
	//}}AFX_MSG_MAP 
	ON_COMMAND(ID_HELP, CWinApp::OnHelp) 
END_MESSAGE_MAP() 
 
//============================================================================================= 
// CPropertyApp construction 
 
CPropertyApp::CPropertyApp() 
{ 
	m_EnablePacketMonitor	= TRUE; 
	m_EnableQueryLog		= TRUE; 
	m_EnableAcl				= TRUE; 
	m_EnableSystemSet		= TRUE; 
	m_EnableAbout			= TRUE; 
	m_EnableExit			= TRUE; 
	m_EnableContolFrame		= TRUE; 
 
	m_XfIoControl			= NULL; 
} 
 
//============================================================================================= 
// CPropertyApp initialization 
 
BOOL CPropertyApp::InitInstance() 
{ 
	TCHAR sPathName[MAX_PATH]; 
	_stprintf(sPathName, _T("%s%s"), m_AclFile.GetAppPath(), XFILTER_SERVICE_DLL_NAME); 
 
	TCHAR sTemp[MAX_PATH]; 
	_stprintf(sTemp, _T("%s%s"), m_AclFile.GetAppPath(), XFILTER_HELP_FILE_NAME); 
	theApp.m_pszHelpFilePath = _tcsdup(sTemp); 
 
	if(_tcscmp(theApp.m_lpCmdLine, _T("-install")) == 0) 
	{ 
		int iRet; 
		if((iRet = m_Install.InstallProvider(sPathName)) != XERR_SUCCESS 
			&& iRet != XERR_PROVIDER_ALREADY_INSTALL) 
			AfxMessageBox(GUI_ACL_MESSAGE_INSTALL_FAILED); 
		SetAutoStart(FALSE); 
		m_RegisterRequest.UserReg(); 
		return FALSE; 
	} 
 
	if(_tcscmp(theApp.m_lpCmdLine, _T("-remove")) == 0) 
	{ 
		m_Install.RemoveProvider(); 
		m_Install.DeleteReg(HKEY_LOCAL_MACHINE, REG_AUTO_START_KEY, REG_AUTO_START_ITEM); 
		return FALSE; 
	} 
 
	if(!m_Install.IsWinsock2()) 
	{ 
		AfxMessageBox(GUI_ACL_MESSAGE_NO_WINSOCK2); 
		return FALSE; 
	} 
 
	CWnd *PrevCWnd = CWnd::FindWindow(NULL, GUI_APP_CAPTION); 
 
	if (PrevCWnd != NULL)  
		return FALSE; 
 
	if(m_AclFile.ReadAcl() != XERR_SUCCESS) 
	{ 
		AfxMessageBox(GUI_ACL_MESSAGE_ACL_READ_ERROR); 
		return FALSE; 
	} 
 
	if(m_AclFile.GetBit(m_AclFile.mAclHeader.bSet, 6)) 
	{ 
		CCommandLineInfo cmdInfo; 
		ParseCommandLine(cmdInfo); 
		CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash); 
	} 
 
	if(!theApp.m_RegisterRequest.InitRegister()) 
		return FALSE; 
 
	if(!m_Install.IsInstalled(sPathName) && m_Install.InstallProvider(sPathName) != XERR_SUCCESS) 
	{ 
		AfxMessageBox(GUI_ACL_MESSAGE_INSTALL_FAILED); 
		return FALSE; 
	} 
 
	if ((m_hTcpIpDog = LoadLibrary(sPathName)) == NULL) 
	{ 
		AfxMessageBox(GUI_ACL_MESSAGE_DLL_NOT_FOUND); 
		return FALSE; 
	} 
 
	m_XfIoControl	= (XF_IO_CONTROL)GetProcAddress(m_hTcpIpDog, _T("XfIoControl")); 
 
	if (m_XfIoControl == NULL) 
	{ 
		AfxMessageBox(GUI_ACL_MESSAGE_FUNCTION_NOT_FOUNT); 
		return FALSE; 
	} 
	 
	if(!InitDllData()) 
	{ 
		AfxMessageBox(GUI_ACL_MESSAGE_INIT_DLL_DATA_ERROR); 
		return FALSE; 
	} 
		 
	CMainFrame* pFrame = new CMainFrame; 
	m_pMainWnd = pFrame; 
	pFrame->Create(NULL,GUI_APP_CAPTION); 
	pFrame->ShowWindow(SW_HIDE); 
	pFrame->UpdateWindow(); 
 
	XFILTER_IO_CONTROL ioControl; 
	ioControl.hwnd = pFrame->m_hWnd; 
	m_XfIoControl(IO_CONTROL_SET_GUI_INSTANCE, &ioControl); 
 
	return TRUE; 
} 
 
BOOL CPropertyApp::InitDllData() 
{ 
	if(m_XfIoControl == NULL) 
		return FALSE; 
 
	XFILTER_IO_CONTROL ioControl; 
 
	if((ioControl.iWorkMode = CAclFile::GetBit(m_AclFile.mAclHeader.bSet, 4, 2)) != XF_QUERY_ALL) 
	{ 
		if(m_XfIoControl(IO_CONTROL_SET_WORK_MODE, &ioControl) != XERR_SUCCESS) 
			return FALSE; 
 
		SetTrayIcon(); 
		return TRUE; 
	} 
 
	ioControl.AclFile.mAclHeader		= m_AclFile.mAclHeader; 
	ioControl.AclFile.mAclIntranetIP	= m_AclFile.mAclIntranetIP; 
	memcpy(ioControl.AclFile.mAclTime	, m_AclFile.mAclTime, ACL_TIME_LENTH * ACL_HEADER_TIME_COUNT) ; 
	memcpy(ioControl.AclFile.mpAcl		, m_AclFile.mpAcl	, ACL_ACL_LENTH * m_AclFile.mAclHeader.ulAclCount); 
	memcpy(ioControl.AclFile.mpAclCustomIP		, m_AclFile.mpAclCustomIP	, ACL_IP_LENTH * m_AclFile.mAclHeader.ulCustomIPCount); 
	memcpy(ioControl.AclFile.mpAclDistrustIP	, m_AclFile.mpAclDistrustIP	, ACL_IP_LENTH * m_AclFile.mAclHeader.ulDistrustIPCount); 
	memcpy(ioControl.AclFile.mpAclTrustIP		, m_AclFile.mpAclTrustIP	, ACL_IP_LENTH * m_AclFile.mAclHeader.ulTrustIPCount); 
 
	if(m_XfIoControl(IO_CONTROL_SET_ACL, &ioControl) != XERR_SUCCESS) 
		return FALSE; 
 
	SetTrayIcon(); 
	return TRUE; 
} 
 
void CPropertyApp::ExitApp() 
{ 
	if(CheckDlg())  
		return; 
 
	if(dlg != NULL) 
	{ 
		if(dlg->GetDlgItem(ID_APPLY_NOW)->IsWindowEnabled()) 
			dlg->OnCancel(); 
 
		dlg->EndDialog(IDCANCEL); 
	} 
 
	m_pMainWnd->DestroyWindow(); 
} 
 
/*--------------------------------------------------------------------------------------------- 
	Return Value:  
		TRUE:	had some sub_dialogs visible  
		FALSE:	no sub_dialogs visible 
*/ 
BOOL CPropertyApp::CheckDlg(BOOL ShowMessage) 
{ 
	if(	CheckDlgVisible		(dlgNetIPAria	, ShowMessage) 
		|| CheckDlgVisible	(dlgNetTimeSheet, ShowMessage) 
		|| CheckDlgVisible	(dlgFile		, ShowMessage) 
		|| CheckDlgVisible	(dlgAclSet		, ShowMessage) 
		) 
		return TRUE; 
 
	return FALSE; 
} 
BOOL CPropertyApp::CheckDlgVisible(void* pdlg, BOOL ShowMessage) 
{ 
	if(pdlg == NULL)  
		return FALSE; 
 
	CDialog* mdlg = (CDialog*)pdlg; 
 
	if(ShowMessage) 
		AfxMessageBox(GUI_ACL_MESSAGE_PLEASE_CLOSE_SUB_WINDOW); 
 
	mdlg->SetFocus(); 
 
	return TRUE; 
} 
 
void CPropertyApp::OnAppExit()  
{ 
	if(!m_EnableExit)  
		return; 
 
	ExitApp(); 
} 
 
void CPropertyApp::OnPacketMonitor()  
{ 
	if(!m_EnablePacketMonitor) 
		return; 
 
	CMainFrame::InitMainSheet(); 
} 
 
void CPropertyApp::OnLogQuery()  
{ 
	if(!m_EnableQueryLog)  
		return; 
 
	CMainFrame::InitMainSheet(1); 
} 
 
void CPropertyApp::OnAclSet()  
{ 
	if(!m_EnableAcl)  
		return; 
 
	CMainFrame::InitMainSheet(2); 
} 
 
void CPropertyApp::OnSystemSet()  
{ 
	if(!m_EnableSystemSet)  
		return; 
 
	CMainFrame::InitMainSheet(3); 
} 
 
void CPropertyApp::OnAbout()  
{ 
	if(!m_EnableAbout)  
		return; 
 
	CMainFrame::InitMainSheet(4); 
} 
 
void CPropertyApp::OnControlFrame()  
{ 
	if(!m_EnableContolFrame)  
		return; 
 
	if(CheckDlg(FALSE))	 
		return; 
 
	CMainFrame::InitMainSheet(-1); 
} 
 
void CPropertyApp::OnUpdateAbout(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnableAbout); 
	pCmdUI->SetText(GUI_MENU_ABOUT); 
} 
 
void CPropertyApp::OnUpdateAclSet(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnableAcl); 
	pCmdUI->SetText(GUI_MENU_ACL); 
} 
 
void CPropertyApp::OnUpdateAppExit(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnableExit); 
	pCmdUI->SetText(GUI_MENU_EXIT); 
} 
 
void CPropertyApp::OnUpdateLogQuery(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnableQueryLog); 
	pCmdUI->SetText(GUI_MENU_LOG_QUERY); 
} 
 
void CPropertyApp::OnUpdatePacketMonitor(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnablePacketMonitor); 
	pCmdUI->SetText(GUI_MENU_PACKET_MONITOR); 
} 
 
void CPropertyApp::OnUpdateSystemSet(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnableSystemSet); 
	pCmdUI->SetText(GUI_MENU_SYSTEM_SET); 
} 
 
void CPropertyApp::OnUpdateControlFrame(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(m_EnableContolFrame); 
	pCmdUI->SetText(GUI_MENU_CONTROL_FRAME); 
} 
 
int CPropertyApp::ExitInstance()  
{ 
	ODS(_T("XFILTER.EXE: ExitInstance Starting...")); 
 
	m_TrayIcon.HideIcon(); 
 
 	if(m_XfIoControl != NULL) 
	{ 
		XFILTER_IO_CONTROL	ioControl; 
		ioControl.iWorkMode = XF_PASS_ALL; 
		ioControl.hwnd		= NULL; 
 
		m_XfIoControl(IO_CONTROL_SET_WORK_MODE, &ioControl); 
		m_XfIoControl(IO_CONTROL_SET_GUI_INSTANCE, &ioControl); 
	} 
 
	if(m_hTcpIpDog != NULL) 
		FreeLibrary(m_hTcpIpDog); 
 
	m_hTcpIpDog	= NULL; 
 
	while(m_DownloadCommand.m_IsConnecting || m_RegisterRequest.m_IsConnecting) 
		Sleep(1000); 
 
	ODS(_T("XFILTER.EXE: ExitInstance Over...")); 
	return CWinApp::ExitInstance(); 
} 
 
BOOL CPropertyApp::PreTranslateMessage(MSG* pMsg) 
{ 
	// CG: The following lines were added by the Splash Screen component.
	if (CSplashWnd::PreTranslateAppMessage(pMsg))
		return TRUE;

	return CWinApp::PreTranslateMessage(pMsg); 
} 
 
void CPropertyApp::SetAutoStart(BOOL IsCheckFromAcl) 
{ 
	BOOL IsCheck	= TRUE; 
 
	if(IsCheckFromAcl) 
		IsCheck = m_AclFile.GetBit(m_AclFile.mAclHeader.bSet, 1); 
 
	if(IsCheck) 
	{ 
		TCHAR tmpStr[MAX_PATH]; 
		strcpy(tmpStr, m_AclFile.GetAppPath(FALSE, NULL, TRUE)); 
 
		m_Install.SaveReg(REG_AUTO_START_ITEM, (BYTE*)tmpStr, _tcslen(tmpStr) 
			, HKEY_LOCAL_MACHINE, REG_AUTO_START_KEY, REG_SZ); 
		return; 
	} 
	 
	m_Install.DeleteReg(HKEY_LOCAL_MACHINE, REG_AUTO_START_KEY, REG_AUTO_START_ITEM); 
} 
 
void CPropertyApp::SetTrayIcon() 
{ 
	int iWorkMode = XF_PASS_ALL; 
 
	if(m_XfIoControl != NULL) 
		iWorkMode = m_XfIoControl(IO_CONTROL_GET_WORK_MODE, NULL); 
 
	if(iWorkMode == XF_PASS_ALL) 
		m_TrayIcon.SetIcon(IDI_SMALL_PASS); 
	else if(iWorkMode == XF_QUERY_ALL) 
		m_TrayIcon.SetIcon(IDI_SMALL_QUERY); 
	else if(iWorkMode == XF_DENY_ALL) 
		m_TrayIcon.SetIcon(IDI_SMALL_DENY); 
	else 
		m_TrayIcon.SetIcon(IDI_SMALL_PASS); 
} 
 
void CPropertyApp::WinHelp(DWORD dwData, UINT nCmd)  
{	 
	HWND hHtmlHelp = HtmlHelp( 
		theApp.m_pMainWnd->m_hWnd,  
		theApp.m_pszHelpFilePath,  
		nCmd,  
		dwData 
		); 
 
	if(hHtmlHelp == 0) 
		AfxMessageBox(GUI_MESSAGE_OPEN_HELP_FAILED); 
}