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

📄 pnlog.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	case kPGPnetLogEvent_None :
		return;

	case kPGPnetLogEvent_PGPError :
		if (!(s_LogPrefs.uFilterFlags & FILTER_PGP))
			return;
		break;

	case kPGPnetLogEvent_PGPike :
		if (!(s_LogPrefs.uFilterFlags & FILTER_IKE))
			return;
		break;

	case kPGPnetLogEvent_IPSEC :
		if (!(s_LogPrefs.uFilterFlags & FILTER_IPSEC))
			return;
		break;

	case kPGPnetLogEvent_System :
		if (!(s_LogPrefs.uFilterFlags & FILTER_SYSTEM))
			return;
		break;

	case kPGPnetLogEvent_Service :
		if (!(s_LogPrefs.uFilterFlags & FILTER_SERVICE))
			return;
		break;

#if PGP_DEBUG
	case kPGPnetLogEvent_DebugText :
		break;
#endif //PGP_DEBUG

	default :
		return;
	}

	PNConvertTimeToString (pevent->timeOfEvent, sz, sizeof(sz)); 

	lvi.mask = LVIF_TEXT|LVIF_PARAM;
	lvi.iItem = s_iCurrentIndex;
	lvi.iSubItem = COL_TIME;
	lvi.lParam = s_iCurrentIndex;
	lvi.pszText = sz;

	s_iCurrentIndex = ListView_InsertItem (hwndList, &lvi) +1;

	lvi.mask = LVIF_TEXT;
	lvi.iSubItem = COL_IP;
	sConstructIPAddress (pevent, sz, sizeof(sz));
	ListView_SetItem (hwndList, &lvi);

	lvi.iSubItem = COL_EVENT;

	switch (pevent->typeOfEvent) {

	case kPGPnetLogEvent_DebugText :
		LoadString (g_hinst, IDS_DEBUGEVENT, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		lstrcpyn (sz, pevent->info.debug.sztext, 
								sizeof(pevent->info.debug.sztext));
		ListView_SetItem (hwndList, &lvi);
		break;

	case kPGPnetLogEvent_PGPError :
		LoadString (g_hinst, IDS_PGPERROREVENT, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		sConstructPGPErrorMessage (pevent, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
		break;

	case kPGPnetLogEvent_PGPike :
		LoadString (g_hinst, IDS_IKEALERTEVENT, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		sConstructIkeAlertMessage (pevent, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
		break;

	case kPGPnetLogEvent_IPSEC :
		LoadString (g_hinst, IDS_IPSECERROR, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		sConstructIpsecErrorMessage (pevent, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
		break;

	case kPGPnetLogEvent_System :
		LoadString (g_hinst, IDS_SYSTEMERROREVENT, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		sConstructSystemErrorMessage (pevent, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
		break;

	case kPGPnetLogEvent_Service :
		LoadString (g_hinst, IDS_SERVICEERROREVENT, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		sConstructServiceErrorMessage (pevent, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
		break;

	default :
		LoadString (g_hinst, IDS_UNKNOWNEVENT, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);

		lvi.iSubItem = COL_MESSAGE;
		sConstructUnknownEventMessage (pevent, sz, sizeof(sz));
		ListView_SetItem (hwndList, &lvi);
		break;
	}
}

//	____________________________________
//
//	load pre-existing log events into window

static VOID
sLoadLogFile (
		HWND			hwnd)
{
	CHAR				sz[128];
	CHAR				szFile[256];
	LV_ITEM				lvi;
	HWND				hwndList;
	PFLFileSpecRef		filespecLog;
	PGPnetLogRef		logRef;
	PGPUInt32			numberEvents, u;
	PGPnetLogEvent*		pEvents;

	lvi.pszText = sz;
	hwndList = GetDlgItem (hwnd, IDC_LOGLIST);

	PGPnetGetLogFileFullPath (szFile, sizeof(szFile));
	PFLNewFileSpecFromFullPath (
			PGPGetContextMemoryMgr (g_context), szFile, &filespecLog);

	PGPnetOpenLogFile (filespecLog, FALSE, FALSE, &logRef);
	PFLFreeFileSpec (filespecLog);

	PGPnetReadLogData (logRef, &numberEvents, (void**)&pEvents);

	for (u=0; u<numberEvents; u++) 
		sLogEvent (hwndList, &pEvents[u]);

	if (pEvents) {
		EnableWindow (GetDlgItem (hwnd, IDC_REMOVE), !g_bReadOnly);
		EnableWindow (GetDlgItem (hwnd, IDC_SAVE), TRUE);
		PGPnetFreeLogData (pEvents);
	}
	else
	{
		EnableWindow (GetDlgItem (hwnd, IDC_REMOVE), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_SAVE), FALSE);
	}


	PGPnetCloseLogFile (logRef);

	InvalidateRect (hwndList, NULL, FALSE);
}

//	____________________________________
//
//	compare entries for sorting purposes

static INT CALLBACK 
sCompareFunction (
			  LPARAM lParam1, 
			  LPARAM lParam2, 	
			  LPARAM lParamSort)
{
	HWND			hwndList	= (HWND)lParamSort;
	INT				iCmp		= 0;
	LV_FINDINFO		lvfi;
	LV_ITEM			lvi;
	INT				index1, index2;
	CHAR			sz1[32], sz2[32];

	// if we're not sorting on time, we need to get the string
	if (s_LogPrefs.iSortField != COL_TIME)
	{
		lvfi.flags = LVFI_PARAM;
		lvfi.lParam = lParam1;
		index1 = ListView_FindItem (hwndList, -1, &lvfi);
		lvfi.lParam = lParam2;
		index2 = ListView_FindItem (hwndList, -1, &lvfi);

		lvi.mask = LVIF_TEXT;
		lvi.iSubItem = s_LogPrefs.iSortField;

		lvi.iItem = index1;
		lvi.pszText = sz1;
		lvi.cchTextMax = sizeof(sz1);
		ListView_GetItem (hwndList, &lvi);

		lvi.iItem = index2;
		lvi.pszText = sz2;
		lvi.cchTextMax = sizeof(sz2);
		ListView_GetItem (hwndList, &lvi);

		// if we're sorting on IP address, convert the string to a number
		if (s_LogPrefs.iSortField == COL_IP)
		{
			UINT	u, uIP1, uIP2;

			u = inet_addr (sz1);
			PGPUInt32ToEndian (u, kPGPBigEndian, (PGPByte*)&uIP1);

			u = inet_addr (sz2);
			PGPUInt32ToEndian (u, kPGPBigEndian, (PGPByte*)&uIP2);

			if (uIP1 < uIP2) 
				iCmp = -1;
			if (uIP1 > uIP2)
				iCmp =  1;
		}

		// otherwise just compare the strings
		else
			iCmp = lstrcmp (sz1, sz2);
	}

	// if we don't have an order yet, sort on the sequence in the list
	// (i.e. the time)
	if (iCmp == 0)
	{
		if (lParam1 < lParam2)
			iCmp = -1;
		else if (lParam1 > lParam2)
			iCmp = 1;
	}

	return (s_LogPrefs.iSortDirection * iCmp);
}

//	____________________________________
//
//	ask user if OK to clear log, then ask service to do it

static VOID
sClearLogFile (
		HWND	hwnd)
{
	if (PNMessageBox (hwnd, IDS_CAPTION, IDS_CLEARLOGPROMPT,
					MB_YESNO|MB_ICONEXCLAMATION) == IDYES)
	{
		if (!PNSendServiceMessage (PGPNET_M_APPMESSAGE,
					(WPARAM)PGPNET_CLEARLOGFILE, (LPARAM)hwnd))
		{
			PNMessageBox (hwnd, IDS_CAPTION, IDS_SERVICENOTAVAIL,
							MB_OK|MB_ICONSTOP);
		}
	}
}


//	____________________________________
//
//	process log message from service

static VOID
sProcessLogCopyDataMessage (
		HWND			hwnd,
		PCOPYDATASTRUCT	pcds)
{
	HWND	hwndList;

	hwndList = GetDlgItem (hwnd, IDC_LOGLIST);

	switch (pcds->dwData) {
	case PGPNET_LOGUPDATE :
		if ((pcds->cbData == sizeof(PGPnetLogEvent)) &&
			(pcds->lpData != NULL))
		{
			sLogEvent (hwndList, (PGPnetLogEvent*)(pcds->lpData));
			ListView_SortItems (hwndList, sCompareFunction, hwndList);
			InvalidateRect (hwndList, NULL, FALSE);

			EnableWindow (GetDlgItem (hwnd, IDC_REMOVE), !g_bReadOnly);
			EnableWindow (GetDlgItem (hwnd, IDC_SAVE), TRUE);
		}
		break;
	}
}


//	____________________________________
//
//	process log message from service

static VOID
sProcessLogMessage (
		HWND			hwnd,
		WPARAM			wParam)
{
	HWND	hwndList;

	hwndList = GetDlgItem (hwnd, IDC_STATUSLIST);

	switch (wParam) {
	case PGPNET_CLEARLOGFILE :
		ListView_DeleteAllItems (GetDlgItem (hwnd, IDC_LOGLIST));
		s_iCurrentIndex = 0;
		EnableWindow (GetDlgItem (hwnd, IDC_REMOVE), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_SAVE), FALSE);
		break;
	}
}


//	____________________________________
//
//	set filter flags based on checkboxes

static VOID
sSetFilterFlags (
		HWND			hwnd)
{
	s_LogPrefs.uFilterFlags = 0;

	if (IsDlgButtonChecked (hwnd, IDC_FILTERSERVICE) == BST_CHECKED)
		s_LogPrefs.uFilterFlags |= FILTER_SERVICE;

	if (IsDlgButtonChecked (hwnd, IDC_FILTERIKE) == BST_CHECKED)
		s_LogPrefs.uFilterFlags |= FILTER_IKE;

	if (IsDlgButtonChecked (hwnd, IDC_FILTERPGP) == BST_CHECKED)
		s_LogPrefs.uFilterFlags |= FILTER_PGP;

	if (IsDlgButtonChecked (hwnd, IDC_FILTERSYSTEM) == BST_CHECKED)
		s_LogPrefs.uFilterFlags |= FILTER_SYSTEM;

	if (IsDlgButtonChecked (hwnd, IDC_FILTERIPSEC) == BST_CHECKED)
		s_LogPrefs.uFilterFlags |= FILTER_IPSEC;
}


//	____________________________________
//
//	dialog proc of log dialog

BOOL CALLBACK
PNLogDlgProc (
		HWND	hwnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam)
{
	switch (uMsg)
	{
	case WM_INITDIALOG :
	{
		RECT	rc;

		// setup control size values
		GetWindowRect (GetDlgItem (hwnd, IDC_SAVE), &rc);
		g_uButtonWidth = rc.right - rc.left;
		g_uButtonHeight = rc.bottom - rc.top;
		g_uBottomListOffset	= 2 * (rc.bottom - rc.top);

		GetWindowRect (GetDlgItem (hwnd, IDC_ONOFFBOX), &rc);
		g_uOnOffBoxWidth = rc.right - rc.left;
		g_uOnOffBoxHeight = rc.bottom - rc.top;

		GetWindowRect (GetDlgItem (hwnd, IDC_LOGLIST), &rc);
		MapWindowPoints (NULL, hwnd, (LPPOINT)&rc, 2);
		g_iMinWindowWidth = max (g_iMinWindowWidth,
					(rc.right-rc.left) + (6*HOR_TAB_OFFSET));

		sInitLogList (hwnd);
		PNSendServiceMessage (PGPNET_M_APPMESSAGE,
					(WPARAM)PGPNET_ENABLELOGMESSAGES, (LPARAM)hwnd);
		sLoadLogFile (hwnd);
		ListView_SortItems (GetDlgItem (hwnd, IDC_LOGLIST),
						sCompareFunction, GetDlgItem (hwnd, IDC_LOGLIST));

		// initialize filter checkboxes
		if (s_LogPrefs.uFilterFlags & FILTER_SERVICE)
			CheckDlgButton (hwnd, IDC_FILTERSERVICE, BST_CHECKED);

		if (s_LogPrefs.uFilterFlags & FILTER_IKE)
			CheckDlgButton (hwnd, IDC_FILTERIKE, BST_CHECKED);

		if (s_LogPrefs.uFilterFlags & FILTER_IPSEC)
			CheckDlgButton (hwnd, IDC_FILTERIPSEC, BST_CHECKED);

		if (s_LogPrefs.uFilterFlags & FILTER_PGP)
			CheckDlgButton (hwnd, IDC_FILTERPGP, BST_CHECKED);

		if (s_LogPrefs.uFilterFlags & FILTER_SYSTEM)
			CheckDlgButton (hwnd, IDC_FILTERSYSTEM, BST_CHECKED);

		// disable "On/Off" buttons if we don't have privileges
		if (g_bReadOnly)
		{
			EnableWindow (GetDlgItem (hwnd, IDC_PGPNETON), FALSE);
			EnableWindow (GetDlgItem (hwnd, IDC_PGPNETOFF), FALSE);
		}
		return FALSE;
	}

	case PGPNET_M_ACTIVATEPAGE :
		// init on/off buttons
		if (g_AOS.pnconfig.bPGPnetEnabled)
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETON);
		else
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETOFF);
		break;

	case PGPNET_M_SETFOCUS :
		SetFocus (GetDlgItem (hwnd, IDC_LOGLIST));
		break;

	case WM_SIZE :
		sSizeControls (hwnd, LOWORD(lParam), HIWORD(lParam));
		return 0;

	case WM_DESTROY :
		sSetColumnPreferences (GetDlgItem (hwnd, IDC_LOGLIST));
		PNSendServiceMessage (PGPNET_M_APPMESSAGE,
					(WPARAM)PGPNET_DISABLELOGMESSAGES, (LPARAM)hwnd);
		break;

	case PGPNET_M_INTERNALCOPYDATA :
		sProcessLogCopyDataMessage (hwnd, (PCOPYDATASTRUCT)lParam);
		break;

	case PGPNET_M_APPMESSAGE :
		sProcessLogMessage (hwnd, wParam);
		break;

	case WM_NOTIFY :
		if (wParam == IDC_LOGLIST)
		{
			NM_LISTVIEW* pnmlv = (NM_LISTVIEW*)lParam;
			if (pnmlv->hdr.code == LVN_COLUMNCLICK)
			{
				if (s_LogPrefs.iSortField == pnmlv->iSubItem)
				{
					s_LogPrefs.iSortDirection *= -1;
				}
				else 
				{
					s_LogPrefs.iSortField = pnmlv->iSubItem;
					s_LogPrefs.iSortDirection = SORT_ASCENDING;
				}
				ListView_SortItems (GetDlgItem (hwnd, IDC_LOGLIST),
						sCompareFunction, GetDlgItem (hwnd, IDC_LOGLIST));
				InvalidateRect (
						GetDlgItem (hwnd, IDC_LOGLIST), NULL, FALSE);
			}
		}
		break;

	case WM_HELP: 
		WinHelp (((LPHELPINFO) lParam)->hItemHandle, g_szHelpFile, 
			HELP_WM_HELP, (DWORD) (LPSTR) aLogIds); 
		return TRUE; 

	case WM_CONTEXTMENU: 
		WinHelp ((HWND) wParam, g_szHelpFile, HELP_CONTEXTMENU, 
			(DWORD) (LPVOID) aLogIds); 
		return TRUE; 

	case WM_COMMAND :
		switch (LOWORD (wParam)) {
		case IDC_SAVE :
			if (IsWindowEnabled (GetDlgItem (hwnd, IDC_SAVE)))
			{
				PNSaveLogToFile (hwnd);
				SetFocus (GetDlgItem (hwnd, IDC_SAVE));
			}
			break;

		case IDC_REMOVE :
			if (IsWindowEnabled (GetDlgItem (hwnd, IDC_REMOVE)))
			{
				sClearLogFile (hwnd);
				SetFocus (GetDlgItem (hwnd, IDC_REMOVE));
			}
			break;

		case IDC_PGPNETOFF :
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETOFF);
			PNSaveOnOffButtons (hwnd, g_context);
			SetFocus (GetDlgItem (hwnd, IDC_PGPNETOFF));
			break;

		case IDC_PGPNETON :
			CheckRadioButton (hwnd, 
						IDC_PGPNETON, IDC_PGPNETOFF, IDC_PGPNETON);
			PNSaveOnOffButtons (hwnd, g_context);
			SetFocus (GetDlgItem (hwnd, IDC_PGPNETON));
			break;

		case IDC_TOGGLEFILTERSERVICE :
			if (IsDlgButtonChecked (hwnd, IDC_FILTERSERVICE) == BST_CHECKED)
				CheckDlgButton (hwnd, IDC_FILTERSERVICE, BST_UNCHECKED);
			else
				CheckDlgButton (hwnd, IDC_FILTERSERVICE, BST_CHECKED);
			PostMessage (hwnd, WM_COMMAND, IDC_FILTERSERVICE, 0);
			break;

		case IDC_TOGGLEFILTERIKE :
			if (IsDlgButtonChecked (hwnd, IDC_FILTERIKE) == BST_CHECKED)
				CheckDlgButton (hwnd, IDC_FILTERIKE, BST_UNCHECKED);
			else
				CheckDlgButton (hwnd, IDC_FILTERIKE, BST_CHECKED);
			PostMessage (hwnd, WM_COMMAND, IDC_FILTERIKE, 0);
			break;

		case IDC_TOGGLEFILTERIPSEC :
			if (IsDlgButtonChecked (hwnd, IDC_FILTERIPSEC) == BST_CHECKED)
				CheckDlgButton (hwnd, IDC_FILTERIPSEC, BST_UNCHECKED);
			else
				CheckDlgButton (hwnd, IDC_FILTERIPSEC, BST_CHECKED);
			PostMessage (hwnd, WM_COMMAND, IDC_FILTERIPSEC, 0);
			break;

		case IDC_TOGGLEFILTERPGP :
			if (IsDlgButtonChecked (hwnd, IDC_FILTERPGP) == BST_CHECKED)
				CheckDlgButton (hwnd, IDC_FILTERPGP, BST_UNCHECKED);
			else
				CheckDlgButton (hwnd, IDC_FILTERPGP, BST_CHECKED);
			PostMessage (hwnd, WM_COMMAND, IDC_FILTERPGP, 0);
			break;

		case IDC_TOGGLEFILTERSYSTEM :
			if (IsDlgButtonChecked (hwnd, IDC_FILTERSYSTEM) == BST_CHECKED)
				CheckDlgButton (hwnd, IDC_FILTERSYSTEM, BST_UNCHECKED);
			else
				CheckDlgButton (hwnd, IDC_FILTERSYSTEM, BST_CHECKED);
			PostMessage (hwnd, WM_COMMAND, IDC_FILTERSYSTEM, 0);
			break;

		case IDC_FILTERSERVICE :
		case IDC_FILTERIKE :
		case IDC_FILTERIPSEC :
		case IDC_FILTERPGP :
		case IDC_FILTERSYSTEM :
			sSetFilterFlags (hwnd);
			ListView_DeleteAllItems (GetDlgItem (hwnd, IDC_LOGLIST));
			s_iCurrentIndex = 0;
			sLoadLogFile (hwnd);
			ListView_SortItems (GetDlgItem (hwnd, IDC_LOGLIST),
						sCompareFunction, GetDlgItem (hwnd, IDC_LOGLIST));
			break;
		}
		return 0;
	}

	return FALSE;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -