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

📄 pnadvanced.c

📁 vc环境下的pgp源码
💻 C
📖 第 1 页 / 共 4 页
字号:
				pIpsec->ah.authAttr = kPGPike_AA_None;
			}

			if (IsDlgButtonChecked (hwnd, IDC_ENABLEESP) == BST_CHECKED)
			{
				pIpsec->useESP = TRUE;

				u = SendDlgItemMessage (
						hwnd, IDC_IPSECESPCIPHERCOMBO, CB_GETCURSEL, 0, 0);
				switch (u) {
				case 0	:	pIpsec->esp.cipher = kPGPike_ET_NULL;		break;
				case 1	:	pIpsec->esp.cipher = kPGPike_ET_CAST;		break;
				case 2	:	pIpsec->esp.cipher = kPGPike_ET_3DES;		break;
				case 3	:	pIpsec->esp.cipher = kPGPike_ET_DES;		break;
				}

				u = SendDlgItemMessage (
						hwnd, IDC_IPSECESPHASHCOMBO, CB_GETCURSEL, 0, 0);
				switch (u) {
				case 0	:	pIpsec->esp.authAttr = kPGPike_AA_None;		break;
				case 1	:	pIpsec->esp.authAttr = kPGPike_AA_HMAC_SHA;	break;
				case 2	:	pIpsec->esp.authAttr = kPGPike_AA_HMAC_MD5;	break;
				}
			}
			else
			{
				pIpsec->useESP = FALSE;
				pIpsec->esp.cipher = kPGPike_ET_NULL;
				pIpsec->esp.authAttr = kPGPike_AA_None;
			}

			if (IsDlgButtonChecked (hwnd, IDC_ENABLECOMP) == BST_CHECKED)
			{
				pIpsec->useIPCOMP = TRUE;

				u = SendDlgItemMessage (
						hwnd, IDC_IPSECCOMPCOMBO, CB_GETCURSEL, 0, 0);
				switch (u) {
				case 0	:	pIpsec->ipcomp.compAlg = kPGPike_IC_LZS;	break;
				case 1	:	pIpsec->ipcomp.compAlg = kPGPike_IC_Deflate;break;
				}
			}
			else
			{
				pIpsec->useIPCOMP = FALSE;
				pIpsec->ipcomp.compAlg = kPGPike_IC_None;
			}

			// check for valid combinations
			if ((!pIpsec->useAH) &&
				(!pIpsec->useESP))
			{
				PNMessageBox (hwnd, IDS_CAPTION, IDS_NEEDAHORESP,
								MB_OK|MB_ICONSTOP);
				break;
			}

			if ((pIpsec->useESP) &&
				(pIpsec->esp.cipher == kPGPike_ET_NULL) &&
				(pIpsec->esp.authAttr == kPGPike_AA_None))
			{
				PNMessageBox (hwnd, IDS_CAPTION, IDS_ESPNEEDSALGORITHM,
								MB_OK|MB_ICONSTOP);
				break;
			}

			// warn user about DES
			if ((pIpsec->esp.cipher == kPGPike_ET_DES_IV64) ||
				(pIpsec->esp.cipher == kPGPike_ET_DES))
			{
				if (PNMessageBox (hwnd, IDS_CAPTION, IDS_DESWARN,
					MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONEXCLAMATION) == IDOK)
					EndDialog (hwnd, 1);
			}
			else
				EndDialog (hwnd, 1);

			break;
		}
		}
		break;
	}

	return FALSE;
}


//	_____________________________________________________
//
//  display IPSEC proposal dialog

static VOID
sNewIpsecProposalDialog (
		PGPContextRef	context,
		HWND			hwnd,
		POPTIONSSTRUCT	pos)
{
	PGPipsecTransform	ipsec;

	ipsec.useAH				= TRUE;
	ipsec.ah.authAlg		= kPGPike_AH_MD5;
	ipsec.ah.authAttr		= kPGPike_AA_HMAC_SHA;
	ipsec.useESP			= TRUE;
	ipsec.esp.cipher		= kPGPike_ET_CAST;
	ipsec.esp.authAttr		= kPGPike_AA_HMAC_SHA;
	ipsec.useIPCOMP			= FALSE;
	ipsec.ipcomp.compAlg	= kPGPike_IC_None;
	ipsec.groupID			= kPGPike_GR_MODPTwo;

	if (DialogBoxParam (g_hinst, MAKEINTRESOURCE(IDD_IPSECPROPOSAL), 
				hwnd, sIpsecProposalDlgProc, (LPARAM)&ipsec))
	{
		PGPipsecTransform*	pIpsec;
		PGPSize				size;
		UINT				uNumProposals;
		
		uNumProposals = ++(pos->pnconfig.IkeIpsecProposalPrefs.
										u.ipsecProposals.numTransforms);

		size = uNumProposals * sizeof(PGPipsecTransform);

		pIpsec = PGPNewData (PGPGetContextMemoryMgr (context),
										size, kPGPMemoryMgrFlags_Clear);
		if (pIpsec)
		{
			pos->pnconfig.IkeIpsecProposalPrefs.
						u.ipsecProposals.numTransforms = uNumProposals;

			pgpCopyMemory (&ipsec, pIpsec, sizeof(PGPipsecTransform));
			pgpCopyMemory (
				pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t,
				&pIpsec[1], (uNumProposals-1)*sizeof(PGPipsecTransform));

			PGPFreeData (
				pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t);
			pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.t = pIpsec;

			sLoadIpsecProposalList (
					hwnd, &pos->pnconfig.IkeIpsecProposalPrefs);

			sSelectItem (hwnd, IDC_IPSECPROPOSALLIST, 0);
			g_iSelectedIpsecItem = 0;
		}
	}
}


//	_____________________________________________________
//
//  post "New" button context menu 

static VOID
sNewProposalContextMenu (
		HWND			hwnd,
		POPTIONSSTRUCT	pos)
{
	HMENU			hMC;
	HMENU			hMenuTrackPopup;
	RECT			rc;
	INT				iNumItems;

	hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUNEWPROPOSAL));
	hMenuTrackPopup = GetSubMenu (hMC, 0);

	iNumItems = 
		pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.numTransforms;

	if (iNumItems >= MAXPROPOSALS)
		EnableMenuItem (hMenuTrackPopup, IDM_NEWIKEPROPOSAL, 
							MF_BYCOMMAND | MF_GRAYED);

	iNumItems = 
		pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.numTransforms;

	if (iNumItems >= MAXPROPOSALS)
		EnableMenuItem (hMenuTrackPopup, IDM_NEWIPSECPROPOSAL, 
							MF_BYCOMMAND | MF_GRAYED);

	GetWindowRect (GetDlgItem (hwnd, IDC_NEWPROPOSAL), &rc);
	TrackPopupMenu (hMenuTrackPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
					rc.left, rc.bottom, 0, hwnd, NULL);

	DestroyMenu (hMC);
}


//	_____________________________________________________
//
//  set proposal button states 

static VOID
sEnableProposalButtons (
		HWND			hwnd,
		BOOL			bEnable,
		POPTIONSSTRUCT	pos)
{
	INT		iSelectedItem	= -1;
	HWND	hwndCtrl;
	INT		iNumItems;

	if (bEnable)
	{
		EnableWindow (GetDlgItem (hwnd, IDC_EDITPROPOSAL), TRUE);

		if (g_iFocusedControl == IDC_IKEPROPOSALLIST)
		{
			iNumItems = pos->pnconfig.IkeIkeProposalPrefs.
									u.ikeProposals.numTransforms;
			iSelectedItem = g_iSelectedIkeItem;
		}
		else if (g_iFocusedControl == IDC_IPSECPROPOSALLIST)
		{
			iNumItems = pos->pnconfig.IkeIpsecProposalPrefs.
									u.ipsecProposals.numTransforms;
			iSelectedItem = g_iSelectedIpsecItem;
		}

		if (iSelectedItem >= 0)
		{
			EnableWindow (GetDlgItem (hwnd, IDC_REMOVEPROPOSAL), 
								(iNumItems > 1));

			hwndCtrl = GetDlgItem (hwnd, IDC_PROPOSALUP);
			if (iSelectedItem > 0)
				EnableWindow (hwndCtrl, TRUE);
			else 
			{
				if (GetFocus () == hwndCtrl)
				{
					SetFocus (GetDlgItem (hwnd, IDC_PROPOSALDOWN));
					SendMessage (hwnd, DM_SETDEFID, IDC_PROPOSALDOWN, 0);
				}
				EnableWindow (hwndCtrl, FALSE);
			}

			hwndCtrl = GetDlgItem (hwnd, IDC_PROPOSALDOWN);
			if (iSelectedItem < iNumItems-1)
				EnableWindow (hwndCtrl, TRUE);
			else
			{
				if (GetFocus () == hwndCtrl)
				{
					SetFocus (GetDlgItem (hwnd, IDC_PROPOSALUP));
					SendMessage (hwnd, DM_SETDEFID, IDC_PROPOSALUP, 0);
				}
				EnableWindow (hwndCtrl, FALSE);
			}
		}
	}
	else
	{
		EnableWindow (GetDlgItem (hwnd, IDC_EDITPROPOSAL), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_REMOVEPROPOSAL), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_PROPOSALUP), FALSE);
		EnableWindow (GetDlgItem (hwnd, IDC_PROPOSALDOWN), FALSE);
	}
}


//	_____________________________________________________
//
//  edit the selected proposal

static VOID
sEditSelectedProposal (
		HWND			hwnd,
		POPTIONSSTRUCT	pos)
{
	if (g_iFocusedControl == IDC_IKEPROPOSALLIST)
	{
		PGPikeTransform		ike;
		PGPikeTransform*	pCurrentIke;

		pCurrentIke = &pos->pnconfig.IkeIkeProposalPrefs.
							u.ikeProposals.t[g_iSelectedIkeItem];
		pgpCopyMemory (pCurrentIke, &ike, sizeof(PGPikeTransform));

		if (DialogBoxParam (g_hinst, MAKEINTRESOURCE(IDD_IKEPROPOSAL), 
				hwnd, sIkeProposalDlgProc, (LPARAM)&ike))
		{
			pgpCopyMemory (&ike, pCurrentIke, sizeof(PGPikeTransform));
			sLoadIkeProposalList (hwnd, &pos->pnconfig.IkeIkeProposalPrefs);
		}

		sSelectItem (hwnd, g_iFocusedControl, g_iSelectedIkeItem);
	}

	else if (g_iFocusedControl == IDC_IPSECPROPOSALLIST)
	{
		PGPipsecTransform		ipsec;
		PGPipsecTransform*		pCurrentIpsec;

		pCurrentIpsec = &pos->pnconfig.IkeIpsecProposalPrefs.
								u.ipsecProposals.t[g_iSelectedIpsecItem];
		pgpCopyMemory (pCurrentIpsec, &ipsec, sizeof(PGPipsecTransform));

		if (DialogBoxParam (g_hinst, MAKEINTRESOURCE(IDD_IPSECPROPOSAL), 
				hwnd, sIpsecProposalDlgProc, (LPARAM)&ipsec))
		{
			pgpCopyMemory (&ipsec, pCurrentIpsec, sizeof(PGPipsecTransform));
			sLoadIpsecProposalList (
				hwnd, &pos->pnconfig.IkeIpsecProposalPrefs);
		}

		sSelectItem (hwnd, g_iFocusedControl, g_iSelectedIpsecItem);
	}
}


//	_____________________________________________________
//
//  remove the selected proposal

static VOID
sRemoveSelectedProposal (
		HWND			hwnd,
		POPTIONSSTRUCT	pos)
{
	UINT	u, uNumProposals;

	if (g_iFocusedControl == IDC_IKEPROPOSALLIST)
	{
		PGPikeTransform*	pIkeSrc;
		PGPikeTransform*	pIkeDst;

		uNumProposals = pos->pnconfig.IkeIkeProposalPrefs.
							u.ikeProposals.numTransforms;

		pIkeDst = &pos->pnconfig.IkeIkeProposalPrefs.
							u.ikeProposals.t[g_iSelectedIkeItem];

		for (u=g_iSelectedIkeItem; u<uNumProposals-1; u++)
		{
			pIkeSrc = 
				&pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.t[u+1];

			pgpCopyMemory (pIkeSrc, pIkeDst, sizeof(PGPikeTransform));
			pIkeDst = pIkeSrc;
		}

		pos->pnconfig.IkeIkeProposalPrefs.u.ikeProposals.numTransforms--;
		sLoadIkeProposalList (hwnd, &pos->pnconfig.IkeIkeProposalPrefs);

		g_iSelectedIkeItem = -1;
		sEnableProposalButtons (hwnd, FALSE, NULL);
	}

	else if (g_iFocusedControl == IDC_IPSECPROPOSALLIST)
	{
		PGPipsecTransform*		pIpsecSrc;
		PGPipsecTransform*		pIpsecDst;

		uNumProposals = pos->pnconfig.IkeIpsecProposalPrefs.
							u.ipsecProposals.numTransforms;

		pIpsecDst = &pos->pnconfig.IkeIpsecProposalPrefs.
							u.ipsecProposals.t[g_iSelectedIpsecItem];

		for (u=g_iSelectedIpsecItem; u<uNumProposals-1; u++)
		{
			pIpsecSrc = &pos->pnconfig.IkeIpsecProposalPrefs.
							u.ipsecProposals.t[u+1];

			pgpCopyMemory (pIpsecSrc, pIpsecDst, sizeof(PGPipsecTransform));
			pIpsecDst = pIpsecSrc;
		}

		pos->pnconfig.IkeIpsecProposalPrefs.u.ipsecProposals.numTransforms--;
		sLoadIpsecProposalList (hwnd, &pos->pnconfig.IkeIpsecProposalPrefs);

		g_iSelectedIpsecItem = -1;
		sEnableProposalButtons (hwnd, FALSE, NULL);
	}
}


//	_____________________________________________________
//
//  set proposal button states 

static VOID
sMoveSelectedProposal (
		HWND			hwnd,
		POPTIONSSTRUCT	pos,
		INT				iDir)
{
	if (g_iFocusedControl == IDC_IKEPROPOSALLIST)
	{
		PGPikeTransform		ike;
		PGPikeTransform*	pIkeSrc;
		PGPikeTransform*	pIkeDst;

		pIkeSrc = &pos->pnconfig.IkeIkeProposalPrefs.
							u.ikeProposals.t[g_iSelectedIkeItem];
		pgpCopyMemory (pIkeSrc, &ike, sizeof(PGPikeTransform));

		pIkeDst = &pos->pnconfig.IkeIkeProposalPrefs.
							u.ikeProposals.t[g_iSelectedIkeItem-iDir];
		pgpCopyMemory (pIkeDst, pIkeSrc, sizeof(PGPikeTransform));
		pgpCopyMemory (&ike, pIkeDst, sizeof(PGPikeTransform));

		g_iSelectedIkeItem -= iDir;
		sLoadIkeProposalList (hwnd, &pos->pnconfig.IkeIkeProposalPrefs);
		sEnableProposalButtons (hwnd, TRUE, pos);

		sSelectItem (hwnd, g_iFocusedControl, g_iSelectedIkeItem);
	}

	else if (g_iFocusedControl == IDC_IPSECPROPOSALLIST)
	{
		PGPipsecTransform		ipsec;
		PGPipsecTransform*		pIpsecSrc;
		PGPipsecTransform*		pIpsecDst;

		pIpsecSrc = &pos->pnconfig.IkeIpsecProposalPrefs.
							u.ipsecProposals.t[g_iSelectedIpsecItem];
		pgpCopyMemory (pIpsecSrc, &ipsec, sizeof(PGPipsecTransform));

		pIpsecDst = &pos->pnconfig.IkeIpsecProposalPrefs.
							u.ipsecProposals.t[g_iSelectedIpsecItem-iDir];

		pgpCopyMemory (pIpsecDst, pIpsecSrc, sizeof(PGPipsecTransform));
		pgpCopyMemory (&ipsec, pIpsecDst, sizeof(PGPipsecTransform));

		g_iSelectedIpsecItem -= iDir;
		sLoadIpsecProposalList (hwnd, &pos->pnconfig.IkeIpsecProposalPrefs);
		sEnableProposalButtons (hwnd, TRUE, pos);

		sSelectItem (hwnd, g_iFocusedControl, g_iSelectedIpsecItem);
	}
}


//	_____________________________________________________
//
//  process host list context menu 

static VOID
sContextMenu (
		HWND			hwnd, 
		POPTIONSSTRUCT	pos,
		INT				iX, 
		INT				iY)
{
	INT				iSelectedItem		= -1;
	INT				iNumItems;

	HMENU			hMC;
	HMENU			hMenuTrackPopup;
	MENUITEMINFO	mii;
	LV_ITEM			lvi;

	mii.cbSize		= sizeof(MENUITEMINFO);
	mii.fMask		= MIIM_ID;

	lvi.mask		= LVIF_STATE;
	lvi.iSubItem	= 0;
	lvi.stateMask	= LVIS_SELECTED;

	hMC = LoadMenu (g_hinst, MAKEINTRESOURCE (IDR_MENUPROPOSALCONTEXT));
	hMenuTrackPopup = GetSubMenu (hMC, 0);

	if (g_iFocusedControl == IDC_IKEPROPOSALLIST)
	{
		mii.wID = IDM_NEWIKEPROPOSAL;
		iNumItems = pos->pnconfig.IkeIkeProposalPrefs.
							u.ikeProposals.numTransforms;

		lvi.iItem = g_iSelectedIkeItem;
		ListView_GetItem (GetDlgItem (hwnd, IDC_IKEPROPOSALLIST), &lvi);
		if (lvi.state == LVIS_SELECTED)
			iSelectedItem = g_iSelectedIkeItem;
	}
	else if (g_iFocusedControl == IDC_IPSECPROPOSALLIST)
	{
		mii.wID = IDM_NEWIPSECPROPOSAL;
		iNumItems = pos->pnconfig.IkeIpsecProposalPrefs.
							u.ipsecProposals.numTransforms;

		lvi.iItem = g_iSelectedIpsecItem;
		ListView_GetItem (GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST), &lvi);

⌨️ 快捷键说明

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