clprefsnetvpn.c

来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 472 行

C
472
字号
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.
	
	CLprefsNetGen.c - handle PGPnet general preferences dialogs

	$Id: CLprefsNetVPN.c,v 1.12 2002/08/06 20:09:19 dallen Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"

// project header files
#include "PGPclx.h"
#include "PGPvpnHelp.h"
#include "CLprefs.h"
#include "DurationControl.h"

// definitions
#define PHASE1_BYTE_EXPIRATION_GUI_ENABLED	FALSE

#if PHASE1_BYTE_EXPIRATION_GUI_ENABLED
#define MINIKEMEGABYTES			4
#define MAXIKEMEGABYTES			4095
#define MAXIKEMEGABYTESDIGITS	4
#endif // PHASE1_BYTE_EXPIRATION_GUI_ENABLED

#define MINIPSECMEGABYTES		4
#define MAXIPSECMEGABYTES		4095
#define MAXIPSECMEGABYTESDIGITS	4

#if PGP_DEBUG
#define MINEXPIRESECONDS		60
#else
#define MINEXPIRESECONDS		600
#endif

// external globals
extern HINSTANCE	g_hInst;

static DWORD aGeneralIds[] = {			// Help IDs
	IDC_ENABLEVPN,				IDH_PGPCLPREF_ENABLEVPN,
	IDC_ATTEMPTSECURE,			IDH_PGPCLPREF_ATTEMPTSECURECOMM,
	IDC_ALLOWSECURE,			IDH_PGPCLPREF_ALLOWSECURECOMM,
	IDC_REQUIRESECURE,			IDH_PGPCLPREF_REQUIRESECURECOMM,
	IDC_ENABLEIKETIMEEXPIRE,	IDH_PGPCLPREF_IKETIMEEXPIREENABLE,
	IDC_IKETIMEEXPIRE,			IDH_PGPCLPREF_IKETIMEEXPIRETIME,
#if PHASE1_BYTE_EXPIRATION_GUI_ENABLED
	IDC_ENABLEIKEBYTEEXPIRE,	IDH_PGPCLPREF_IKEDATAEXPIREENABLE,
	IDC_IKEBYTES,				IDH_PGPCLPREF_IKEDATAEXPIREBYTES,
#endif // PHASE1_BYTE_EXPIRATION_GUI_ENABLED
	IDC_ENABLEIPSECTIMEEXPIRE,	IDH_PGPCLPREF_IPSECTIMEEXPIREENABLE,
	IDC_IPSECTIMEEXPIRE,		IDH_PGPCLPREF_IPSECTIMEEXPIRETIME,
	IDC_ENABLEIPSECBYTEEXPIRE,	IDH_PGPCLPREF_IPSECDATAEXPIREENABLE,
	IDC_IPSECBYTES,				IDH_PGPCLPREF_IPSECDATAEXPIREBYTES,
	0,0
};


//	____________________________________
//
//	general options dialog proc

LRESULT WINAPI
CLNetVPNPropDlgProc (
		HWND	hwnd,
		UINT	uMsg,
		WPARAM	wParam,
		LPARAM	lParam)
{
	PPREFSDLGSTRUCT		ppds;

	switch (uMsg)
	{
	case WM_INITDIALOG :
	{
		PGPBoolean	b;
		RECT		rc;
		UINT		u;
		INT			i;
		CHAR		sz[8];
		PGPPrefRef	prefrefNet;

		SetWindowLong (hwnd, GWL_USERDATA, ((PROPSHEETPAGE*)lParam)->lParam);
		ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		if (ppds->bNeedsCentering) 
		{
			PGPclCenterWindowOnMonitor (GetParent (hwnd), kPGPclWindowMonitor);
			ppds->bNeedsCentering = FALSE;
		}

		prefrefNet = CLGetPrefRefNet (ppds);

		// initialize Enable VPN controls
		CLLoadCheckBoxPref (hwnd, IDC_ENABLEVPN, 
				ppds, prefrefNet, kPGPNetPrefEnableVPN);

		// initialize Dynamic VPN controls
		PGPGetPrefNumber (prefrefNet,
				kPGPnetPrefUnconfiguredMode, &u);
		switch (u) {
			case kPGPnet_UM_Attempt:	i = IDC_ATTEMPTSECURE;	break;
			case kPGPnet_UM_Allow:		i = IDC_ALLOWSECURE;	break;
			default:					i = IDC_REQUIRESECURE;	break;
		}
		CheckRadioButton (hwnd, IDC_ATTEMPTSECURE, IDC_REQUIRESECURE, i);
		CLDisablePrefControl (hwnd, IDC_ATTEMPTSECURE, 
				ppds, prefrefNet, kPGPnetPrefUnconfiguredMode);
		CLDisablePrefControl (hwnd, IDC_ALLOWSECURE, 
				ppds, prefrefNet, kPGPnetPrefUnconfiguredMode);
		CLDisablePrefControl (hwnd, IDC_REQUIRESECURE, 
				ppds, prefrefNet, kPGPnetPrefUnconfiguredMode);

		// create and initialize IKE expiration date/time picker control
		GetWindowRect (GetDlgItem (hwnd, IDC_IKETIMEEXPIRE), &rc);
		MapWindowPoints (NULL, hwnd, (LPPOINT)&rc, 2);
		ppds->net.hwndIKETimeExpire = CreateWindowEx (
				WS_EX_CLIENTEDGE, 
				WC_PGPDURATION, "",
				WS_CHILD|WS_TABSTOP|WS_VISIBLE,
				rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 
				hwnd, (HMENU)IDC_IKETIMEEXPIRE, g_hInst, NULL);

		SetWindowPos (ppds->net.hwndIKETimeExpire, 
				GetDlgItem (hwnd, IDC_ENABLEIKETIMEEXPIRE),
				0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);

		LoadString (g_hInst, IDS_EXPIREDAYSTEXT, sz, sizeof(sz));
		SendMessage (ppds->net.hwndIKETimeExpire, PGP_DCM_SETTEXT, 
				(WPARAM)DAYS, (LPARAM)sz);

		LoadString (g_hInst, IDS_EXPIREHOURSTEXT, sz, sizeof(sz));
		SendMessage (ppds->net.hwndIKETimeExpire, PGP_DCM_SETTEXT, 
				(WPARAM)HOURS, (LPARAM)sz);

		LoadString (g_hInst, IDS_EXPIREMINSTEXT, sz, sizeof(sz));
		SendMessage (ppds->net.hwndIKETimeExpire, PGP_DCM_SETTEXT, 
				(WPARAM)MINS, (LPARAM)sz);

		SendMessage (ppds->net.hwndIKETimeExpire, PGP_DCM_SETMINDURATION, 0, 
				(LPARAM)MINEXPIRESECONDS);

		PGPGetPrefNumber (prefrefNet,
				kPGPNetPrefIKETimeExpiration, &u);
		SendMessage (ppds->net.hwndIKETimeExpire, PGP_DCM_SETDURATION, 0, u);


		// initialize IKE time expiration on/off
		b = CLLoadCheckBoxPref (hwnd, IDC_ENABLEIKETIMEEXPIRE,
				ppds, prefrefNet, kPGPNetPrefEnableIKETimeExpiration);
		if (!CLDisablePrefControl (ppds->net.hwndIKETimeExpire, 0, 
				ppds, prefrefNet, kPGPNetPrefIKETimeExpiration))
		{
			EnableWindow (ppds->net.hwndIKETimeExpire, b);
		}

		// initialize IKE byte expiration controls
#if PHASE1_BYTE_EXPIRATION_GUI_ENABLED
		SendDlgItemMessage (hwnd, IDC_IKEBYTESPIN, UDM_SETRANGE,
				0, (LPARAM)MAKELONG (MAXIKEMEGABYTES, MINIKEMEGABYTES));
		SendDlgItemMessage (hwnd, IDC_IKEBYTES, EM_SETLIMITTEXT, 
				MAXIKEMEGABYTESDIGITS, 0);

		PGPGetPrefNumber (prefrefNet, 
				kPGPNetPrefIKEKByteExpiration, &u);
		SendDlgItemMessage (hwnd, IDC_IKEBYTESPIN, UDM_SETPOS,
				0, (LPARAM)MAKELONG (u/1024, 0));

		b = CLLoadCheckBoxPref (hwnd, IDC_ENABLEIKEBYTEEXPIRE,
				ppds, prefrefNet, kPGPNetPrefEnableIKEKByteExpiration);
		EnableWindow (GetDlgItem (hwnd, IDC_IKEBYTES), b);
		EnableWindow (GetDlgItem (hwnd, IDC_IKEBYTESPIN), b);

		CLDisablePrefControl (hwnd, IDC_IKEBYTES, 
				ppds, prefrefNet, kPGPNetPrefIKEKByteExpiration);
#endif // PHASE1_BYTE_EXPIRATION_GUI_ENABLED

		// create and initialize IPSEC expiration date/time picker control
		GetWindowRect (GetDlgItem (hwnd, IDC_IPSECTIMEEXPIRE), &rc);
		MapWindowPoints (NULL, hwnd, (LPPOINT)&rc, 2);
		ppds->net.hwndIPSECTimeExpire = CreateWindowEx (
				WS_EX_CLIENTEDGE, 
				WC_PGPDURATION, "",
				WS_CHILD|WS_TABSTOP|WS_VISIBLE,
				rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 
				hwnd, (HMENU)IDC_IPSECTIMEEXPIRE, g_hInst, NULL);
						
		SetWindowPos (ppds->net.hwndIPSECTimeExpire, 
				GetDlgItem (hwnd, IDC_ENABLEIPSECTIMEEXPIRE),
				0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);

		LoadString (g_hInst, IDS_EXPIREDAYSTEXT, sz, sizeof(sz));
		SendMessage (ppds->net.hwndIPSECTimeExpire, PGP_DCM_SETTEXT, 
				(WPARAM)DAYS, (LPARAM)sz);

		LoadString (g_hInst, IDS_EXPIREHOURSTEXT, sz, sizeof(sz));
		SendMessage (ppds->net.hwndIPSECTimeExpire, PGP_DCM_SETTEXT, 
				(WPARAM)HOURS, (LPARAM)sz);

		LoadString (g_hInst, IDS_EXPIREMINSTEXT, sz, sizeof(sz));
		SendMessage (ppds->net.hwndIPSECTimeExpire, PGP_DCM_SETTEXT, 
				(WPARAM)MINS, (LPARAM)sz);

		SendMessage (ppds->net.hwndIPSECTimeExpire, PGP_DCM_SETMINDURATION, 0, 
				(LPARAM)MINEXPIRESECONDS);

		PGPGetPrefNumber (prefrefNet,
				kPGPNetPrefIPSECTimeExpiration, &u);
		SendMessage (ppds->net.hwndIPSECTimeExpire, PGP_DCM_SETDURATION, 0, u);

		// initialize IPSEC time expiration on/off
		b = CLLoadCheckBoxPref (hwnd, IDC_ENABLEIPSECTIMEEXPIRE,
				ppds, prefrefNet, kPGPNetPrefEnableIPSECTimeExpiration);
		if (!CLDisablePrefControl (ppds->net.hwndIPSECTimeExpire, 0, 
				ppds, prefrefNet, kPGPNetPrefIPSECTimeExpiration))
		{
			EnableWindow (ppds->net.hwndIPSECTimeExpire, b);
		}

		// initialize IPSEC byte expiration controls
		SendDlgItemMessage (hwnd, IDC_IPSECBYTESPIN, UDM_SETRANGE,
				0, (LPARAM)MAKELONG (MAXIPSECMEGABYTES, MINIPSECMEGABYTES));
		SendDlgItemMessage (hwnd, IDC_IPSECBYTES, EM_SETLIMITTEXT, 
				MAXIPSECMEGABYTESDIGITS, 0);

		PGPGetPrefNumber (prefrefNet, 
				kPGPNetPrefIPSECKByteExpiration, &u);
		SendDlgItemMessage (hwnd, IDC_IPSECBYTESPIN, UDM_SETPOS,
				0, (LPARAM)MAKELONG (u/1024, 0));

		b = CLLoadCheckBoxPref (hwnd, IDC_ENABLEIPSECBYTEEXPIRE,
				ppds, prefrefNet, kPGPNetPrefEnableIPSECKByteExpiration);
		EnableWindow (GetDlgItem (hwnd, IDC_IPSECBYTES), b);
		EnableWindow (GetDlgItem (hwnd, IDC_IPSECBYTESPIN), b);

		CLDisablePrefControl (hwnd, IDC_IPSECBYTES, 
				ppds, prefrefNet, kPGPNetPrefIPSECKByteExpiration);

		return FALSE;
	}

	case WM_HELP :
	case WM_CONTEXTMENU :
		return PGPclHtmlHelp (hwnd, uMsg, wParam, lParam, 
				(char*)kPGPclNetHelpFile, aGeneralIds);

	case WM_COMMAND :
	{
		PGPPrefRef	prefrefNet;

		ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

		switch (LOWORD (wParam)) {
		case IDC_ENABLEIKETIMEEXPIRE :
			prefrefNet = CLGetPrefRefNet (ppds);
			if (!CLDisablePrefControl (ppds->net.hwndIKETimeExpire, 0, ppds,
					prefrefNet, kPGPNetPrefIKETimeExpiration))
			{
				EnableWindow (ppds->net.hwndIKETimeExpire, 
						IsDlgButtonChecked (hwnd, 
							IDC_ENABLEIKETIMEEXPIRE) == BST_CHECKED);
			}
			break;

#if PHASE1_BYTE_EXPIRATION_GUI_ENABLED
		case IDC_ENABLEIKEBYTEEXPIRE :
			prefrefNet = CLGetPrefRefNet (ppds);
			if (!CLDisablePrefControl (hwnd, IDC_IKEBYTES, ppds,
					prefrefNet, kPGPNetPrefIKEKByteExpiration))
			{
				if (IsDlgButtonChecked (
						hwnd, IDC_ENABLEIKEBYTEEXPIRE) == BST_CHECKED)
				{
					EnableWindow (GetDlgItem (hwnd, IDC_IKEBYTES), TRUE);
					EnableWindow (GetDlgItem (hwnd, IDC_IKEBYTESPIN), TRUE);
				}
				else
				{
					EnableWindow (GetDlgItem (hwnd, IDC_IKEBYTES), FALSE);
					EnableWindow (GetDlgItem (hwnd, IDC_IKEBYTESPIN), FALSE);
				}
			}
			break;
#endif // PHASE1_BYTE_EXPIRATION_GUI_ENABLED

		case IDC_ENABLEIPSECTIMEEXPIRE :
			prefrefNet = CLGetPrefRefNet (ppds);
			if (!CLDisablePrefControl (ppds->net.hwndIPSECTimeExpire, 0, ppds,
					prefrefNet, kPGPNetPrefIPSECTimeExpiration))
			{
				EnableWindow (ppds->net.hwndIPSECTimeExpire, 
						IsDlgButtonChecked (hwnd, 
							IDC_ENABLEIPSECTIMEEXPIRE) == BST_CHECKED);
			}
			break;

		case IDC_ENABLEIPSECBYTEEXPIRE :
			prefrefNet = CLGetPrefRefNet (ppds);
			if (!CLDisablePrefControl (hwnd, IDC_IPSECBYTES, ppds,
					prefrefNet, kPGPNetPrefIPSECKByteExpiration))
			{
				if (IsDlgButtonChecked (
						hwnd, IDC_ENABLEIPSECBYTEEXPIRE) == BST_CHECKED)
				{
					EnableWindow (GetDlgItem (hwnd, IDC_IPSECBYTES), TRUE);
					EnableWindow (GetDlgItem (hwnd, IDC_IPSECBYTESPIN), TRUE);
				}
				else
				{
					EnableWindow (GetDlgItem (hwnd, IDC_IPSECBYTES), FALSE);
					EnableWindow (GetDlgItem (hwnd, IDC_IPSECBYTESPIN), FALSE);
				}
			}
			break;
		}
		break;
	}
	
	case WM_NOTIFY :
	{
		LPNMHDR pnmhdr = (LPNMHDR) lParam;

		switch (pnmhdr->code) {

		case PSN_HELP :
			PGPclHtmlHelp (hwnd, kPGPclHelpContext, 0, 0,
					(char*)kPGPclNetHelpFile, 
					(DWORD*)IDH_PGPCLPREF_NETVPNDIALOG);
			break;

		case PSN_KILLACTIVE :
		{
			INT iMegaBytes;

#if PHASE1_BYTE_EXPIRATION_GUI_ENABLED
			iMegaBytes = GetDlgItemInt (hwnd, IDC_IKEBYTES, NULL, FALSE);

			SetWindowLong (hwnd, DWL_MSGRESULT, FALSE);

			if ((iMegaBytes < MINIKEMEGABYTES) ||
				(iMegaBytes > MAXIKEMEGABYTES))
			{
				CHAR	sz[128];
				CHAR	szMsg[128];
				INT		i;

				LoadString (g_hInst, 
						IDS_INVALIDIKELIMIT, sz, sizeof(sz));
				wsprintf (szMsg, sz, 
						MINIKEMEGABYTES, MAXIKEMEGABYTES);
				LoadString (g_hInst,
						IDS_CAPTIONINFO, sz, sizeof(sz));
				MessageBox (hwnd, szMsg, sz, MB_OK|MB_ICONINFORMATION);

				if (iMegaBytes < MINIKEMEGABYTES)
					i = MINIKEMEGABYTES;
				else
					i = MAXIKEMEGABYTES;

				SetDlgItemInt (hwnd, IDC_IKEBYTES, i, FALSE);
				SetFocus (GetDlgItem (hwnd, IDC_IKEBYTES));
				SendDlgItemMessage (hwnd, 
						IDC_IKEBYTES, EM_SETSEL, 0, -1);

				SetWindowLong (hwnd, DWL_MSGRESULT, TRUE);
				return TRUE;
			}
#endif // PHASE1_BYTE_EXPIRATION_GUI_ENABLED

			iMegaBytes = GetDlgItemInt (hwnd, IDC_IPSECBYTES, NULL, FALSE);

			if ((iMegaBytes < MINIPSECMEGABYTES) ||
				(iMegaBytes > MAXIPSECMEGABYTES))
			{
				CHAR	sz[128];
				CHAR	szMsg[128];
				INT		i;

				LoadString (g_hInst, 
						IDS_INVALIDIPSECLIMIT, sz, sizeof(sz));
				wsprintf (szMsg, sz, 
						MINIPSECMEGABYTES, MAXIPSECMEGABYTES);
				LoadString (g_hInst,
						IDS_CAPTIONINFO, sz, sizeof(sz));
				MessageBox (hwnd, szMsg, sz, MB_OK|MB_ICONINFORMATION);

				if (iMegaBytes < MINIPSECMEGABYTES)
					i = MINIPSECMEGABYTES;
				else
					i = MAXIPSECMEGABYTES;

				SetDlgItemInt (hwnd, IDC_IPSECBYTES, i, FALSE);
				SetFocus (GetDlgItem (hwnd, IDC_IPSECBYTES));
				SendDlgItemMessage (hwnd, 
						IDC_IPSECBYTES, EM_SETSEL, 0, -1);

				SetWindowLong (hwnd, DWL_MSGRESULT, TRUE);
			}
			return TRUE;
		}

		case PSN_APPLY :
		{
			UINT u;

			ppds = (PPREFSDLGSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);

			if (ppds->bUseClientLibNetPrefs && 
				!PGPPrefRefIsValid (ppds->prefrefNet))
			{
				PGPclPeekClientLibPrefRefs (NULL, &ppds->prefrefNet);
			}

			CLSaveCheckBoxPref (hwnd, IDC_ENABLEVPN, 
					ppds->prefrefNet, kPGPNetPrefEnableVPN);

			if (IsDlgButtonChecked (hwnd, IDC_ATTEMPTSECURE) == BST_CHECKED)
				u = kPGPnet_UM_Attempt;
			else if (IsDlgButtonChecked (hwnd, IDC_ALLOWSECURE) == BST_CHECKED)
				u = kPGPnet_UM_Allow;
			else
				u = kPGPnet_UM_Require;

			PGPclErrorBox (hwnd, PGPSetPrefNumber (
					ppds->prefrefNet, kPGPnetPrefUnconfiguredMode, u));

			CLSaveCheckBoxPref (hwnd, IDC_ENABLEIKETIMEEXPIRE, 
					ppds->prefrefNet, kPGPNetPrefEnableIKETimeExpiration);

			SendMessage (ppds->net.hwndIKETimeExpire, 
					PGP_DCM_GETDURATION, 0, (LPARAM)&u);
			PGPSetPrefNumber (ppds->prefrefNet, 
					kPGPNetPrefIKETimeExpiration, u);

#if PHASE1_BYTE_EXPIRATION_GUI_ENABLED
			CLSaveCheckBoxPref (hwnd, IDC_ENABLEIKEBYTEEXPIRE, 
					ppds->prefrefNet, kPGPNetPrefEnableIKEKByteExpiration);

			u = GetDlgItemInt (hwnd, IDC_IKEBYTES, NULL, FALSE) * 1024;
			PGPSetPrefNumber (ppds->prefrefNet, 
					kPGPNetPrefIKEKByteExpiration, u);
#endif // PHASE1_BYTE_EXPIRATION_GUI_ENABLED

			CLSaveCheckBoxPref (hwnd, IDC_ENABLEIPSECTIMEEXPIRE, 
					ppds->prefrefNet, kPGPNetPrefEnableIPSECTimeExpiration);

			SendMessage (ppds->net.hwndIPSECTimeExpire, 
					PGP_DCM_GETDURATION, 0, (LPARAM)&u);
			PGPSetPrefNumber (ppds->prefrefNet, 
					kPGPNetPrefIPSECTimeExpiration, u);

			CLSaveCheckBoxPref (hwnd, IDC_ENABLEIPSECBYTEEXPIRE, 
					ppds->prefrefNet, kPGPNetPrefEnableIPSECKByteExpiration);

			u = GetDlgItemInt (hwnd, IDC_IPSECBYTES, NULL, FALSE) * 1024;
			PGPSetPrefNumber (ppds->prefrefNet, 
					kPGPNetPrefIPSECKByteExpiration, u);

			ppds->net.bPrefsModified = TRUE;
			ppds->returnErr = kPGPError_NoErr;
			SetWindowLong (hwnd, DWL_MSGRESULT, PSNRET_NOERROR);
			return TRUE;
		}
		}
		break;
	}
	}

	return FALSE;
}


⌨️ 快捷键说明

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