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