📄 pnlog.c
字号:
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 + -