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

📄 pnlog.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*____________________________________________________________________________
	Copyright (C) 1998 Network Associates, Inc.
	All rights reserved.
	
	PNlog.c - PGPnet log window message procedure
	

	$Id: PNlog.c,v 1.53.4.1 1999/06/08 16:32:07 pbj Exp $
____________________________________________________________________________*/

#include <windows.h>
#include <commctrl.h>
#include "resource.h"

#include "PGPnetApp.h"
#include "pgpNetIPC.h"
#include "pgpNetPaths.h"
#include "pgpNetLog.h"
#include "PGPnetHelp.h"

#include "pgpFileSpec.h"
#include "pgpEndianConversion.h"

#define TOP_LIST_OFFSET			36
#define HOR_LIST_OFFSET			8
#define HOR_CONTROL_OFFSET		8
#define BOTTOM_LIST_OFFSET		50
#define BOTTOM_BUTTON_OFFSET	10
#define BUTTON_HEIGHT			24
#define BUTTON_WIDTH			64
#define BUTTON_SPACING			8

#define TIMECOLWIDTH			120
#define EVENTCOLWIDTH			50
#define IPCOLWIDTH				90
#define MESSAGECOLWIDTH			600

#define COL_TIME				0
#define COL_EVENT				1
#define COL_IP					2
#define COL_MESSAGE				3

#define FILTER_SERVICE			0x01
#define FILTER_IKE				0x02
#define FILTER_PGP				0x04
#define FILTER_SYSTEM			0x08
#define FILTER_IPSEC			0x10
#define FILTER_ALL				0x1F

#define SORT_ASCENDING			1
#define SORT_DESCENDING			-1

static UINT				g_uBottomListOffset		= BOTTOM_LIST_OFFSET;
static UINT				g_uOnOffBoxHeight		= ONOFFBOX_HEIGHT;
static UINT				g_uOnOffBoxWidth		= ONOFFBOX_WIDTH;
static UINT				g_uButtonHeight			= BUTTON_HEIGHT;
static UINT				g_uButtonWidth			= BUTTON_WIDTH;

extern HINSTANCE		g_hinst;
extern INT				g_iMinWindowWidth;
extern PGPContextRef	g_context;
extern APPOPTIONSSTRUCT	g_AOS;
extern CHAR				g_szHelpFile[];
extern BOOL				g_bReadOnly;	

// prototypes
	PGPError 
PGPGetIPsecErrorString(
	PGPError			theError,
	PGPSize				bufferSize,
	char *				theString );

	PGPError 
PGPGetIkeAlertString(
	PGPikeAlert			theAlert,
	PGPSize				bufferSize,
	char *				theString );

	PGPError 
PGPGetIkeInternalAlertString(
	PGPikeInternalAlert	theAlert,
	PGPSize				bufferSize,
	char *				theString );

	PGPError 
PGPnetGetServiceErrorString(
	PGPnetServiceError	theError,
	PGPSize				bufferSize,
	char *				theString );

static struct {
	INT		iTimeWidth;
	INT		iEventWidth;
	INT		iIPWidth;
	INT		iMessageWidth;
	INT		iSortField;
	INT		iSortDirection;
	UINT	uFilterFlags;
} s_LogPrefs;

static INT s_iCurrentIndex		= 0;

static DWORD aLogIds[] = {			// Help IDs
	IDC_LOGLIST,		IDH_PNLOG_LIST,
	IDC_PGPNETON,		IDH_PNMAIN_PGPNETENABLE,
	IDC_PGPNETOFF,		IDH_PNMAIN_PGPNETDISABLE,
	IDC_SAVE,			IDH_PNLOG_SAVE,
	IDC_REMOVE,			IDH_PNLOG_CLEAR,
	IDC_FILTERSERVICE,	IDH_PNLOG_FILTERSERVICE,
	IDC_FILTERIKE,		IDH_PNLOG_FILTERIKE,
	IDC_FILTERIPSEC,	IDH_PNLOG_FILTERIPSEC,
	IDC_FILTERPGP,		IDH_PNLOG_FILTERPGP,
	IDC_FILTERSYSTEM,	IDH_PNLOG_FILTERSYSTEM,
	0,0
};


//	___________________________________________
//
//	Get widths of columns from prefs file

static VOID 
sGetColumnPreferences (VOID)
{
	PGPError			err;
	PGPPrefRef			prefref;
	PGPSize				size;
	PVOID				pvoid;

	s_LogPrefs.iTimeWidth		= TIMECOLWIDTH;
	s_LogPrefs.iEventWidth		= EVENTCOLWIDTH;
	s_LogPrefs.iIPWidth			= IPCOLWIDTH;
	s_LogPrefs.iMessageWidth	= MESSAGECOLWIDTH;
	s_LogPrefs.iSortField		= COL_TIME;
	s_LogPrefs.iSortDirection	= SORT_ASCENDING;
	s_LogPrefs.uFilterFlags		= FILTER_ALL;

	err = PGPnetOpenPrefs (PGPGetContextMemoryMgr (g_context), &prefref);
	if (IsntPGPError (err))
	{
		err = PGPGetPrefData (prefref, 
					kPGPNetPrefAppWinLogWindowData, &size, &pvoid);

		if (IsntPGPError (err)) 
		{
			if (size == sizeof(s_LogPrefs)) 
			{
				memcpy (&s_LogPrefs, pvoid, sizeof(s_LogPrefs));
			}
			PGPDisposePrefData (prefref, pvoid);
		}
		PGPnetClosePrefs (prefref, FALSE);
	}
}


//	___________________________________________
// 
//	Put window position information in registry

static VOID 
sSetColumnPreferences (
		HWND	hwndList) 
{
	PGPError			err;
	PGPPrefRef			prefref;

	err = PGPnetOpenPrefs (PGPGetContextMemoryMgr (g_context), &prefref);
	if (IsntPGPError (err))
	{
		s_LogPrefs.iTimeWidth = 
					ListView_GetColumnWidth (hwndList, COL_TIME);
		s_LogPrefs.iEventWidth = 
					ListView_GetColumnWidth (hwndList, COL_EVENT);
		s_LogPrefs.iIPWidth = 
					ListView_GetColumnWidth (hwndList, COL_IP);
		s_LogPrefs.iMessageWidth = 
					ListView_GetColumnWidth (hwndList, COL_MESSAGE);

		PGPSetPrefData (prefref, 
					kPGPNetPrefAppWinLogWindowData, 
					sizeof(s_LogPrefs), &s_LogPrefs);

		PGPnetClosePrefs (prefref, TRUE);
	}

}

//	____________________________________
//
//	initialize the list control

static VOID
sInitLogList (
		HWND	hwnd)
{
	HWND			hwndList;
	LV_COLUMN		lvc;
	CHAR			sz[64];

	hwndList = GetDlgItem (hwnd, IDC_LOGLIST);

	sGetColumnPreferences ();

	lvc.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	lvc.pszText = sz;

	LoadString (g_hinst, IDS_TIMECOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = s_LogPrefs.iTimeWidth;
	lvc.iSubItem = COL_TIME;
	ListView_InsertColumn (hwndList, COL_TIME, &lvc);

	LoadString (g_hinst, IDS_EVENTCOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = s_LogPrefs.iEventWidth;
	lvc.iSubItem = COL_EVENT;
	ListView_InsertColumn (hwndList, COL_EVENT, &lvc);

	LoadString (g_hinst, IDS_IPADDRESSFIELD, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = s_LogPrefs.iIPWidth;
	lvc.iSubItem = COL_IP;
	ListView_InsertColumn (hwndList, COL_IP, &lvc);

	LoadString (g_hinst, IDS_MESSAGECOLNAME, sz, sizeof(sz));
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = s_LogPrefs.iMessageWidth;
	lvc.iSubItem = COL_MESSAGE;
	ListView_InsertColumn (hwndList, COL_MESSAGE, &lvc);
}


//	____________________________________
//
//	size the list control and move the buttons

static VOID
sSizeControls (
		HWND	hwnd,
		WORD	wXsize,
		WORD	wYsize)
{
	HDWP	hdwp; 

	// size the tree control accordingly
	hdwp = BeginDeferWindowPos (6); 
	DeferWindowPos (hdwp, 
		GetDlgItem (hwnd, IDC_LOGLIST), NULL, 
		HOR_LIST_OFFSET, TOP_LIST_OFFSET, 
		wXsize - (2*HOR_LIST_OFFSET), 
		wYsize - g_uBottomListOffset - TOP_LIST_OFFSET -1,
		SWP_NOZORDER);  
	
	// move the "On/Off" box
	DeferWindowPos (hdwp, 
		GetDlgItem (hwnd, IDC_ONOFFBOX), NULL, 
		HOR_LIST_OFFSET, 
		wYsize - BOTTOM_ONOFF_OFFSET - g_uOnOffBoxHeight, 
		g_uOnOffBoxWidth, g_uOnOffBoxHeight, 
		SWP_NOZORDER); 

	// move the "On" button
	DeferWindowPos (hdwp, 
		GetDlgItem (hwnd, IDC_PGPNETON), NULL, 
		HOR_CONTROL_OFFSET + (g_uOnOffBoxWidth/5), 
		wYsize - g_uBottomListOffset + 
					TOP_ONOFFBOX_OFFSET + (g_uOnOffBoxHeight/3),
		0, 0, 
		SWP_NOZORDER|SWP_NOSIZE); 

	// move the "Off" button
	DeferWindowPos (hdwp, 
		GetDlgItem (hwnd, IDC_PGPNETOFF), NULL, 
		HOR_CONTROL_OFFSET + 3*(g_uOnOffBoxWidth/5), 
		wYsize - g_uBottomListOffset + 
					TOP_ONOFFBOX_OFFSET + (g_uOnOffBoxHeight/3),
		0, 0, 
		SWP_NOZORDER|SWP_NOSIZE); 

	// move the "clear" button
	DeferWindowPos (hdwp, 
		GetDlgItem (hwnd, IDC_REMOVE), NULL, 
		wXsize - HOR_LIST_OFFSET - g_uButtonWidth, 
		wYsize - BOTTOM_BUTTON_OFFSET - g_uButtonHeight, 
		0, 0, 
		SWP_NOZORDER|SWP_NOSIZE); 

	// move the "save" button
	DeferWindowPos (hdwp, 
		GetDlgItem (hwnd, IDC_SAVE), NULL, 
		wXsize - HOR_LIST_OFFSET - BUTTON_SPACING - 2*g_uButtonWidth, 
		wYsize - BOTTOM_BUTTON_OFFSET - g_uButtonHeight, 
		0, 0, 
		SWP_NOZORDER|SWP_NOSIZE); 

	EndDeferWindowPos(hdwp);
}

//	____________________________________
//
//	construct IP address string

static VOID
sConstructIPAddress (
		PGPnetLogEvent*	pevent,
		LPSTR			szIP,
		UINT			uLen)
{
	struct		in_addr ia;

	szIP[0] = '\0';
	if (pevent->ipaddress != 0)
	{
		ia.S_un.S_addr = pevent->ipaddress;
		lstrcpyn (szIP, inet_ntoa (ia), uLen);
	}
}

//	____________________________________
//
//	construct IPSEC message string

static VOID
sConstructIpsecErrorMessage (
		PGPnetLogEvent*	pevent,
		LPSTR			szMessage,
		UINT			uLen)
{
	CHAR		szFmt [64];
	CHAR		szStr [128];
	PGPError	err;

	// try to get IPsec error string
	err = PGPGetIPsecErrorString (
				pevent->info.pgperror.error, sizeof(szStr), szStr);

	if (IsPGPError (err))
	{
		LoadString (g_hinst, IDS_UNKNOWNIPSECERRORFMT, szFmt, sizeof(szFmt));
		wsprintf (szStr, szFmt, pevent->info.pgperror.error);
	}

	lstrcpyn (szMessage, szStr, uLen);
}

//	____________________________________
//
//	construct PGPError message string

static VOID
sConstructPGPErrorMessage (
		PGPnetLogEvent*	pevent,
		LPSTR			szMessage,
		UINT			uLen)
{
	CHAR		szFmt [64];
	CHAR		szStr [128];
	PGPError	err;
#if PGP_DEBUG
	CHAR		szMsg [256];
#endif

	pevent->info.pgperror.filename[
			sizeof(pevent->info.pgperror.filename)-1] = '\0';

	err = PGPGetErrorString (
				pevent->info.pgperror.error, sizeof(szStr), szStr);

	if (IsPGPError (err))
	{
		LoadString (g_hinst, IDS_UNKNOWNPGPERRORFMT, szFmt, sizeof(szFmt));
		wsprintf (szStr, szFmt, pevent->info.pgperror.error);
	}

#if PGP_DEBUG
	LoadString (g_hinst, IDS_PGPERRORFMT, szFmt, sizeof(szFmt));
	wsprintf (szMsg, szFmt,  
				pevent->info.pgperror.filename,
				pevent->info.pgperror.lineno,
				szStr);
	lstrcpyn (szMessage, szMsg, uLen);
#else
	lstrcpyn (szMessage, szStr, uLen);
#endif

}

//	____________________________________
//
//	construct IKE alert message string

static VOID
sConstructIkeAlertMessage (
		PGPnetLogEvent*	pevent,
		LPSTR			szMessage,
		UINT			uLen)
{
	BOOL		bFormatted		= FALSE;
	CHAR		szFmt [64];
	CHAR		szStr [128];
	CHAR		szMsg [256];
	PGPError	err;

	if (pevent->info.ikealert.alert == kPGPike_AL_None)
		err = PGPGetIkeInternalAlertString (
				(PGPikeInternalAlert)pevent->info.ikealert.value, 
				sizeof(szStr), szStr);
	else
	{
		err = PGPGetIkeAlertString (
				pevent->info.ikealert.alert, sizeof(szStr), szStr);
		bFormatted = TRUE;
	}

	if (IsPGPError (err))
	{
		LoadString (g_hinst, IDS_UNKNOWNIKEALERTFMT, szFmt, sizeof(szFmt));
		wsprintf (szStr, szFmt, pevent->info.ikealert.alert);
		bFormatted = TRUE;
	}

	if (bFormatted) 
	{
		if (pevent->info.ikealert.remoteGenerated)
			LoadString (g_hinst, IDS_IKEALERTREMOTEFMT, szFmt, sizeof(szFmt));
		else
			LoadString (g_hinst, IDS_IKEALERTLOCALFMT, szFmt, sizeof(szFmt));

		wsprintf (szMsg, szFmt, szStr, "");
		lstrcpyn (szMessage, szMsg, uLen);
	}
	else
		lstrcpyn (szMessage, szStr, uLen);
}

//	____________________________________
//
//	construct system error message string

static VOID
sConstructSystemErrorMessage (
		PGPnetLogEvent*	pevent,
		LPSTR			szMessage,
		UINT			uLen)
{
	CHAR		szFmt [64];
	CHAR		szStr [128];
	INT			ireturn;
#if PGP_DEBUG
	CHAR		szMsg [256];
#endif

	pevent->info.syserror.filename[
			sizeof(pevent->info.pgperror.filename)-1] = '\0';

	ireturn = FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM,
						NULL,
						pevent->info.syserror.error,
						MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
						szStr, sizeof(szStr), NULL);

	if (ireturn == 0)
	{
		LoadString (g_hinst, IDS_UNKNOWNSYSTEMERRORFMT, szFmt, sizeof(szFmt));
		wsprintf (szStr, szFmt, pevent->info.syserror.error);
	}
	else
	{
		// remove newlines
		LPSTR	p;
		while (p = strchr (szStr, 0x0A)) *p = ' ';
		while (p = strchr (szStr, 0x0D)) *p = ' ';
	}

#if PGP_DEBUG
	LoadString (g_hinst, IDS_SYSTEMERRORFMT, szFmt, sizeof(szFmt));
	wsprintf (szMsg, szFmt, 
				pevent->info.syserror.filename,
				pevent->info.syserror.lineno,
				szStr);
	lstrcpyn (szMessage, szMsg, uLen);
#else
	lstrcpyn (szMessage, szStr, uLen);
#endif

}

//	____________________________________
//
//	construct Service error message string

static VOID
sConstructServiceErrorMessage (
		PGPnetLogEvent*	pevent,
		LPSTR			szMessage,
		UINT			uLen)
{
	CHAR		szFmt [64];
	CHAR		szStr [128];
	PGPError	err;
#if PGP_DEBUG
	CHAR		szMsg [256];
#endif

	err = PGPnetGetServiceErrorString (
				pevent->info.svcerror.error, sizeof(szStr), szStr);
	if (IsPGPError (err))
	{
		LoadString (g_hinst, IDS_UNKNOWNSVCERRORFMT, szFmt, sizeof(szFmt));
		wsprintf (szStr, szFmt, pevent->info.svcerror.error);
	}
	else if (pevent->info.svcerror.error == kPGPnetSrvcError_AuthenticatedKey)
	{
		CHAR	szID[kPGPMaxKeyIDStringSize +1];

		PGPGetKeyIDString (&pevent->info.svcerror.keyID, 
				kPGPKeyIDString_Abbreviated, szID);
		lstrcat (szStr, szID);
	}

#if PGP_DEBUG
	pevent->info.svcerror.filename[
			sizeof(pevent->info.svcerror.filename)-1] = '\0';

	LoadString (g_hinst, IDS_SERVICEERRORFMT, szFmt, sizeof(szFmt));
	wsprintf (szMsg, szFmt,  
				pevent->info.svcerror.filename,
				pevent->info.svcerror.lineno,
				szStr);
	lstrcpyn (szMessage, szMsg, uLen);
#else
	lstrcpyn (szMessage, szStr, uLen);
#endif

}

//	____________________________________
//
//	construct unknown event message string

static VOID
sConstructUnknownEventMessage (
		PGPnetLogEvent*	pevent,
		LPSTR			szMessage,
		UINT			uLen)
{
	CHAR	szFmt[64];
	CHAR	szMsg[128];

	LoadString (g_hinst, IDS_UNKNOWNEVENTMESSAGEFMT, szFmt, sizeof(szFmt));
	wsprintf (szMsg, szFmt, pevent->typeOfEvent);

	lstrcpyn (szMessage, szMsg, uLen);
}

//	____________________________________
//
//	log the incoming event to the window

static VOID
sLogEvent (
		HWND				hwndList,
		PGPnetLogEvent*		pevent)
{
	LV_ITEM		lvi;
	CHAR		sz[128];

	switch (pevent->typeOfEvent) {

⌨️ 快捷键说明

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