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

📄 pnaddwiz.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*____________________________________________________________________________
	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 + -