📄 pnaddwiz.c
字号:
/*____________________________________________________________________________
Copyright (C) 1998 Network Associates, Inc.
All rights reserved.
PNaddwiz.c - PGPnet add host/gateway wizard
$Id: PNaddwiz.c,v 1.40.4.1.2.1 1999/06/29 18:46:08 pbj Exp $
____________________________________________________________________________*/
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
#include "PGPnetApp.h"
#include "PGPnetHelp.h"
#include "IPAddressControl.h"
#include "PGPnetHelp.h"
#include "pgpBuildFlags.h"
#include "PGPcl.h"
#include "pgpUserInterface.h"
#include "pgpIke.h"
#include "pgpClientLib.h"
#define TIMER_ID 111L
#define TIMER_MS 100L
#define NUMLEDS 10
#define LEDSPACING 2
#define WIZ_HOST 0
#define WIZ_SUBNET 1
#define WIZ_GATEWAY 2
#define ADDWIZ_INTRO 0
#define ADDWIZ_BEHINDGATEWAY 1
#define ADDWIZ_HOSTTYPE 2
#define ADDWIZ_SECURE 3
#define ADDWIZ_HOSTNAME 4
#define ADDWIZ_SUBNETADDRESS 5
#define ADDWIZ_HOSTADDRESS 6
#define ADDWIZ_ADDRESSLOOKUP 7
#define ADDWIZ_USESHAREDSECRET 8
#define ADDWIZ_SHAREDSECRET 9
#define ADDWIZ_IDENTITYTYPE 10
#define ADDWIZ_IDENTITY 11
#define ADDWIZ_ADDMORE 12
#define ADDWIZ_AUTHKEYS 13
#define ADDWIZ_DONE 14
#define NUM_WIZ_PAGES 15
extern HINSTANCE g_hinst;
extern PGPContextRef g_context;
extern CHAR g_szHelpFile[];
extern APPOPTIONSSTRUCT g_AOS;
extern BOOL g_bAuthAccess;
typedef struct {
PGPContextRef context;
HWND hwndThreadParent;
INT iStatusDirection;
INT iStatusValue;
HBITMAP hBitmap;
HPALETTE hPalette;
HWND hwndIPAddress;
BOOL bIPValid;
HWND hwndSubnetMask;
BOOL bSubnetValid;
HWND hwndHostIPAddress;
CHAR szHostName[256];
HWND hwndHostIPAddressLookup;
DWORD dwFoundIPAddress;
BOOL bNeedsAuthKey;
PNCONFIG pncfg;
PGPNetHostEntry* pheNew;
PPNCONFIG ppnconfig;
INT iSelectedHost;
BOOL bBehindGateway;
UINT uHostType;
BOOL bSecure;
BOOL bHideTyping;
HBRUSH hbrushEdit;
BOOL bSharedSecret;
BOOL bFirstTime;
BOOL bFinished;
DWORD dwIdIPAddress;
WNDPROC wpOrigSharedSecret1Proc;
WNDPROC wpOrigSharedSecret2Proc;
HIMAGELIST hil;
} ADDHOSTSTRUCT, *PADDHOSTSTRUCT;
// ______________________________________________
//
// save the host data structure to the prefs file
static INT
sSaveHostEntry (
PADDHOSTSTRUCT pahs)
{
PGPNetHostEntry* pNewHostList;
if (pahs->uHostType == WIZ_GATEWAY)
pahs->pheNew->hostType = kPGPnetSecureGateway;
else
{
if (pahs->bSecure)
pahs->pheNew->hostType = kPGPnetSecureHost;
else
pahs->pheNew->hostType = kPGPnetInsecureHost;
}
//
if (pahs->bBehindGateway)
pahs->pheNew->childOf = pahs->iSelectedHost;
else
pahs->pheNew->childOf = -1;
// set IP address if using IPAddress identification
if (pahs->pheNew->identityType == kPGPike_ID_IPV4_Addr)
pahs->pheNew->identityIPAddress = pahs->dwIdIPAddress;
pNewHostList =
PGPNewData (PGPGetContextMemoryMgr (pahs->context),
(pahs->ppnconfig->uHostCount+1) * sizeof(PGPNetHostEntry),
kPGPMemoryMgrFlags_Clear);
if (pNewHostList)
{
if (pahs->ppnconfig->uHostCount > 0)
pgpCopyMemory (pahs->ppnconfig->pHostList, pNewHostList,
pahs->ppnconfig->uHostCount * sizeof(PGPNetHostEntry));
pgpCopyMemory (pahs->pheNew,
&pNewHostList[pahs->ppnconfig->uHostCount],
sizeof(PGPNetHostEntry));
pahs->ppnconfig->uHostCount++;
if (pahs->ppnconfig->pHostList)
PGPFreeData (pahs->ppnconfig->pHostList);
pahs->ppnconfig->pHostList = pNewHostList;
return pahs->ppnconfig->uHostCount -1;
}
return -1;
}
// ______________________________________________
//
// Check if message is dangerous to pass to shared secret edit box
static BOOL
sWizCommonSharedSecretMsgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch (uMsg) {
case WM_RBUTTONDOWN :
case WM_LBUTTONDBLCLK :
case WM_MOUSEMOVE :
case WM_COPY :
case WM_CUT :
case WM_PASTE :
case WM_CLEAR :
case WM_CONTEXTMENU :
return TRUE;
case WM_LBUTTONDOWN :
if (GetKeyState (VK_SHIFT) & 0x8000) return TRUE;
break;
case WM_PAINT :
if (wParam)
{
PADDHOSTSTRUCT pahs =
(PADDHOSTSTRUCT)GetWindowLong (
GetParent (hwnd), GWL_USERDATA);
SetBkColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
if (pahs->bHideTyping)
SetTextColor ((HDC)wParam, GetSysColor (COLOR_WINDOW));
else
SetTextColor ((HDC)wParam, GetSysColor (COLOR_WINDOWTEXT));
}
break;
case WM_KEYDOWN :
if (GetKeyState (VK_SHIFT) & 0x8000)
{
switch (wParam) {
case VK_HOME :
case VK_END :
case VK_UP :
case VK_DOWN :
case VK_LEFT :
case VK_RIGHT :
case VK_NEXT :
case VK_PRIOR :
return TRUE;
}
}
break;
case WM_SETFOCUS :
SendMessage (hwnd, EM_SETSEL, 0xFFFF, 0xFFFF);
break;
case WM_KILLFOCUS :
break;
}
return FALSE;
}
// ______________________________________________
//
// Shared secret 1 edit box subclass procedure
static LRESULT APIENTRY
sWizSharedSecret1SubclassProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
UINT uQuality;
CHAR szBuf[256];
LRESULT lResult;
PADDHOSTSTRUCT pahs;
if (sWizCommonSharedSecretMsgProc (hwnd, uMsg, wParam, lParam))
return 0;
pahs = (PADDHOSTSTRUCT)GetWindowLong (GetParent (hwnd), GWL_USERDATA);
switch (uMsg) {
case WM_CHAR :
switch (wParam) {
case VK_TAB :
if (GetKeyState (VK_SHIFT) & 0x8000)
SetFocus (GetDlgItem (GetParent (hwnd), IDC_DUMMYSTOP));
else
SetFocus (GetDlgItem (GetParent (hwnd),
IDC_SHAREDSECRET2));
break;
case VK_RETURN :
if (CallWindowProc (pahs->wpOrigSharedSecret1Proc,
hwnd, WM_GETTEXTLENGTH, 0, 0) > 0)
{
HWND hGrandParent = GetParent (GetParent (hwnd));
PropSheet_PressButton (hGrandParent, PSBTN_NEXT);
}
break;
default :
lResult = CallWindowProc (pahs->wpOrigSharedSecret1Proc,
hwnd, uMsg, wParam, lParam);
CallWindowProc (pahs->wpOrigSharedSecret1Proc,
hwnd, WM_GETTEXT, sizeof(szBuf), (LPARAM)szBuf);
uQuality = PGPEstimatePassphraseQuality (szBuf);
memset (szBuf, 0, sizeof(szBuf));
SendDlgItemMessage (GetParent (hwnd), IDC_SECRETQUALITY,
PBM_SETPOS, uQuality, 0);
return lResult;
}
break;
}
return CallWindowProc (pahs->wpOrigSharedSecret1Proc,
hwnd, uMsg, wParam, lParam);
}
// ______________________________________________
//
// Shared secret 2 edit box subclass procedure
static LRESULT APIENTRY
sWizSharedSecret2SubclassProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PADDHOSTSTRUCT pahs;
if (sWizCommonSharedSecretMsgProc (hwnd, uMsg, wParam, lParam))
return 0;
pahs = (PADDHOSTSTRUCT)GetWindowLong (GetParent (hwnd), GWL_USERDATA);
switch (uMsg) {
case WM_CHAR :
switch (wParam) {
case VK_TAB :
if (GetKeyState (VK_SHIFT) & 0x8000)
SetFocus (GetDlgItem (GetParent (hwnd), IDC_SHAREDSECRET1));
else
SetFocus (GetDlgItem (GetParent (hwnd), IDC_HIDETYPING));
break;
case VK_RETURN :
if (CallWindowProc (pahs->wpOrigSharedSecret2Proc,
hwnd, WM_GETTEXTLENGTH, 0, 0) > 0)
{
HWND hGrandParent = GetParent (GetParent (hwnd));
PropSheet_PressButton (hGrandParent, PSBTN_NEXT);
}
break;
}
break;
}
return CallWindowProc (pahs->wpOrigSharedSecret2Proc,
hwnd, uMsg, wParam, lParam);
}
// ____________________________________
//
// Draw the "LED" progress indicator
static VOID
sDrawSendStatus (
HWND hwnd,
PADDHOSTSTRUCT pahs)
{
HBRUSH hBrushLit, hBrushUnlit, hBrushOld;
HPEN hPen, hPenOld;
INT i;
INT itop, ibot, ileft, iright, iwidth;
RECT rc;
HDC hdc;
PAINTSTRUCT ps;
if (pahs->iStatusValue < -1) return;
hdc = BeginPaint (hwnd, &ps);
// draw 3D shadow
GetClientRect (hwnd, &rc);
itop = rc.top+1;
ibot = rc.bottom-2;
iwidth = (rc.right-rc.left) / NUMLEDS;
iwidth -= LEDSPACING;
ileft = rc.left + 4;
for (i=0; i<NUMLEDS; i++) {
iright = ileft + iwidth;
MoveToEx (hdc, ileft, ibot, NULL);
LineTo (hdc, iright, ibot);
LineTo (hdc, iright, itop);
ileft += iwidth + LEDSPACING;
}
hPen = CreatePen (PS_SOLID, 0, RGB (128, 128, 128));
hPenOld = SelectObject (hdc, hPen);
hBrushLit = CreateSolidBrush (RGB (0, 255, 0));
hBrushUnlit = CreateSolidBrush (RGB (0, 128, 0));
ileft = rc.left + 4;
// draw "Knight Rider" LEDs
if (pahs->iStatusDirection) {
hBrushOld = SelectObject (hdc, hBrushUnlit);
for (i=0; i<NUMLEDS; i++) {
iright = ileft + iwidth;
if (i == pahs->iStatusValue) {
SelectObject (hdc, hBrushLit);
Rectangle (hdc, ileft, itop, iright, ibot);
SelectObject (hdc, hBrushUnlit);
}
else {
Rectangle (hdc, ileft, itop, iright, ibot);
}
ileft += iwidth + LEDSPACING;
}
}
// draw "progress bar" LEDs
else {
if (pahs->iStatusValue >= 0)
hBrushOld = SelectObject (hdc, hBrushLit);
else
hBrushOld = SelectObject (hdc, hBrushUnlit);
for (i=0; i<NUMLEDS; i++) {
iright = ileft + iwidth;
if (i > pahs->iStatusValue) {
SelectObject (hdc, hBrushUnlit);
}
Rectangle (hdc, ileft, itop, iright, ibot);
ileft += iwidth + LEDSPACING;
}
}
SelectObject (hdc, hBrushOld);
SelectObject (hdc, hPenOld);
DeleteObject (hPen);
DeleteObject (hBrushLit);
DeleteObject (hBrushUnlit);
EndPaint (hwnd, &ps);
}
// ______________________________________________
//
// thread procedure for looking up IP address
static DWORD WINAPI
sDNSLookupThread (LPVOID pvoid)
{
PADDHOSTSTRUCT pahs = (PADDHOSTSTRUCT)pvoid;
if (PNGetRemoteHostIP (pahs->szHostName, &pahs->dwFoundIPAddress))
{
if (pahs->hwndThreadParent)
SendMessage (pahs->hwndThreadParent, WM_APP, TRUE, 0);
}
else
{
if (pahs->hwndThreadParent)
SendMessage (pahs->hwndThreadParent, WM_APP, FALSE, 0);
}
return 0;
}
// ______________________________________________
//
// Dialog procedure for handling beginning introductory
// dialog.
static LRESULT WINAPI
sAddWizIntroDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PADDHOSTSTRUCT pahs = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
RECT rc;
PROPSHEETPAGE *ppspMsgRec = (PROPSHEETPAGE *) lParam;
pahs = (PADDHOSTSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pahs);
// center dialog on screen
GetWindowRect (GetParent (hwnd), &rc);
SetWindowPos (GetParent (hwnd), NULL,
(GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left))/2,
(GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top))/2,
0, 0, SWP_NOSIZE | SWP_NOZORDER);
break;
}
case WM_ACTIVATE :
InvalidateRect (hwnd, NULL, TRUE);
break;
case WM_PAINT :
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (pahs->hPalette)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint (hwnd, &ps);
SelectPalette (hDC, pahs->hPalette, FALSE);
RealizePalette (hDC);
EndPaint (hwnd, &ps);
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch(pnmh->code) {
case PSN_SETACTIVE:
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
PostMessage (GetParent (hwnd),
PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT);
SendDlgItemMessage (hwnd, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pahs->hBitmap);
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_KILLACTIVE:
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_QUERYCANCEL:
break;
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -