clprefsnetadv.c
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C语言 代码 · 共 2,052 行 · 第 1/4 页
C
2,052 行
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
CLprefsNetAdv.c - handle PGPnet advanced preferences dialog
$Id: CLprefsNetAdv.c,v 1.16 2002/08/06 20:09:19 dallen Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"
// project header files
#include "PGPclx.h"
#include "PGPvpnHelp.h"
#include "CLprefs.h"
#include "pgpFileSpec.h"
// definitions
#define PGP_ENABLE_EC_GUI PGP_DEBUG
#define OFFSET_FIRST 2
#define OFFSET_OTHER 6
#define MAXPROPOSALS 16
#define IKEAUTHCOLWIDTH 100
#define IKEHASHCOLWIDTH 60
#define IKECIPHERCOLWIDTH 70
#define IKEDHCOLWIDTH 60
#define IKECOL_AUTH 0
#define IKECOL_HASH 1
#define IKECOL_CIPHER 2
#define IKECOL_DH 3
#define IPSECAHCOLWIDTH 60
#define IPSECESPCOLWIDTH 130
#define IPSECCOMPCOLWIDTH 60
#define IPSECCOL_AH 0
#define IPSECCOL_ESP 1
#define IPSECCOL_COMP 2
// external globals
extern HINSTANCE g_hInst;
static DWORD aAdvIds[] = { // Help IDs
IDC_ALLOWCAST, IDH_PGPCLPREF_ALLOWCAST,
IDC_ALLOW3DES, IDH_PGPCLPREF_ALLOW3DES,
IDC_ALLOWDES, IDH_PGPCLPREF_ALLOWDES,
IDC_ALLOWNONECIPHER, IDH_PGPCLPREF_ALLOWNULLCIPHER,
IDC_ALLOWSHA1, IDH_PGPCLPREF_ALLOWSHA,
IDC_ALLOWMD5, IDH_PGPCLPREF_ALLOWMD5,
IDC_ALLOWNONEHASH, IDH_PGPCLPREF_ALLOWNULLHASH,
IDC_ALLOW1024, IDH_PGPCLPREF_ALLOW1024,
IDC_ALLOW1536, IDH_PGPCLPREF_ALLOW1536,
IDC_ALLOWEC163, 0,
IDC_ALLOWEC283, 0,
IDC_ALLOWLZS, IDH_PGPCLPREF_ALLOWLZS,
IDC_ALLOWDEFLATE, IDH_PGPCLPREF_ALLOWDEFLATE,
IDC_DEFAULTS, IDH_PGPCLPREF_DEFAULTSETTINGS,
IDC_IKEPROPOSALLIST, IDH_PGPCLPREF_IKEPROPOSALS,
IDC_IPSECPROPOSALLIST, IDH_PGPCLPREF_IPSECPROPOSALS,
IDC_NEWPROPOSAL, IDH_PGPCLPREF_NEWPROPOSAL,
IDC_EDITPROPOSAL, IDH_PGPCLPREF_EDITPROPOSAL,
IDC_REMOVEPROPOSAL, IDH_PGPCLPREF_REMOVEPROPOSAL,
IDC_PROPOSALUP, IDH_PGPCLPREF_MOVEPROPOSALUP,
IDC_PROPOSALDOWN, IDH_PGPCLPREF_MOVEPROPOSALDOWN,
IDC_PERFECTSECRECY, IDH_PGPCLPREF_PERFECTFWDSECRECY,
0,0
};
static DWORD aIkeIds[] = { // Help IDs
IDC_IKEAUTHCOMBO, IDH_PGPCLPREF_IKEAUTHENTICATION,
IDC_IKEHASHCOMBO, IDH_PGPCLPREF_IKEHASH,
IDC_IKECIPHERCOMBO, IDH_PGPCLPREF_IKECIPHER,
IDC_IKEDHCOMBO, IDH_PGPCLPREF_IKEDIFFIEHELLMAN,
0,0
};
static DWORD aIpsecIds[] = { // Help IDs
IDC_ENABLEAH, IDH_PGPCLPREF_IPSECAHENABLE,
IDC_IPSECAHCOMBO, IDH_PGPCLPREF_IPSECAHHASH,
IDC_ENABLEESP, IDH_PGPCLPREF_IPSECESPENABLE,
IDC_IPSECESPHASHCOMBO, IDH_PGPCLPREF_IPSECESPHASH,
IDC_IPSECESPCIPHERCOMBO, IDH_PGPCLPREF_IPSECESPCIPHER,
IDC_ENABLECOMP, IDH_PGPCLPREF_IPSECCOMPENABLE,
IDC_IPSECCOMPCOMBO, IDH_PGPCLPREF_IPSECCOMPALGORITHM,
0,0
};
// ____________________________________
//
// select the specified item
static VOID
sSelectItem (
HWND hwnd,
INT iControl,
INT iItem)
{
HWND hwndList;
hwndList = GetDlgItem (hwnd, iControl);
ListView_SetItemState (hwndList, iItem, LVIS_SELECTED, LVIS_SELECTED);
ListView_EnsureVisible (hwndList, iItem, FALSE);
}
// ____________________________________
//
// initialize allowed algorithms checkboxes
static VOID
sInitAllowedAlgorithms (
HWND hwnd,
PPREFSDLGSTRUCT ppds,
PGPPrefRef prefref)
{
// ciphers
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWCAST)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWCAST,
ppds, prefref, kPGPNetPrefAllowCipherCAST);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOW3DES)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOW3DES,
ppds, prefref, kPGPNetPrefAllowCipher3DES);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWDES)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWDES,
ppds, prefref, kPGPNetPrefAllowCipherDES56);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWNONECIPHER)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWNONECIPHER,
ppds, prefref, kPGPNetPrefAllowCipherNone);
}
// hashes
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWSHA1)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWSHA1,
ppds, prefref, kPGPNetPrefAllowHashSHA1);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWMD5)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWMD5,
ppds, prefref, kPGPNetPrefAllowHashMD5);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWNONEHASH)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWNONEHASH,
ppds, prefref, kPGPNetPrefAllowHashNone);
}
// compression
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWLZS)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWLZS,
ppds, prefref, kPGPNetPrefAllowCompLZS);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWDEFLATE)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWDEFLATE,
ppds, prefref, kPGPNetPrefAllowCompDeflate);
}
// Diffie-Hellman
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOW1024)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOW1024,
ppds, prefref, kPGPNetPrefAllowDH1024);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOW1536)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOW1536,
ppds, prefref, kPGPNetPrefAllowDH1536);
}
#if PGP_ENABLE_EC_GUI
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWEC163)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWEC163,
ppds, prefref, kPGPNetPrefAllowEC163);
}
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_ALLOWEC283)))
{
CLLoadCheckBoxPref (hwnd, IDC_ALLOWEC283,
ppds, prefref, kPGPNetPrefAllowEC283);
}
#else
EnableWindow (GetDlgItem (hwnd, IDC_ALLOWEC163), FALSE);
ShowWindow (GetDlgItem (hwnd, IDC_ALLOWEC163), SW_HIDE);
EnableWindow (GetDlgItem (hwnd, IDC_ALLOWEC283), FALSE);
ShowWindow (GetDlgItem (hwnd, IDC_ALLOWEC283), SW_HIDE);
#endif // PGP_ENABLE_EC_GUI
}
// ____________________________________
//
// retrieve allowed algorithm prefs from checkbox controls
static VOID
sSaveAllowedAlgorithms (
HWND hwnd,
PGPPrefRef prefref)
{
// ciphers
CLSaveCheckBoxPref (hwnd, IDC_ALLOWCAST,
prefref, kPGPNetPrefAllowCipherCAST);
CLSaveCheckBoxPref (hwnd, IDC_ALLOW3DES,
prefref, kPGPNetPrefAllowCipher3DES);
PGPSetPrefBoolean (prefref, kPGPNetPrefAllowCipherDES56, FALSE);
CLSaveCheckBoxPref (hwnd, IDC_ALLOWNONECIPHER,
prefref, kPGPNetPrefAllowCipherNone);
// hashes
CLSaveCheckBoxPref (hwnd, IDC_ALLOWSHA1,
prefref, kPGPNetPrefAllowHashSHA1);
CLSaveCheckBoxPref (hwnd, IDC_ALLOWMD5,
prefref, kPGPNetPrefAllowHashMD5);
CLSaveCheckBoxPref (hwnd, IDC_ALLOWNONEHASH,
prefref, kPGPNetPrefAllowHashNone);
// compression
CLSaveCheckBoxPref (hwnd, IDC_ALLOWLZS,
prefref, kPGPNetPrefAllowCompLZS);
CLSaveCheckBoxPref (hwnd, IDC_ALLOWDEFLATE,
prefref, kPGPNetPrefAllowCompDeflate);
// Diffie-Hellman
CLSaveCheckBoxPref (hwnd, IDC_ALLOW1024,
prefref, kPGPNetPrefAllowDH1024);
CLSaveCheckBoxPref (hwnd, IDC_ALLOW1536,
prefref, kPGPNetPrefAllowDH1536);
#if PGP_ENABLE_EC_GUI
CLSaveCheckBoxPref (hwnd, IDC_ALLOWEC163,
prefref, kPGPNetPrefAllowEC163);
CLSaveCheckBoxPref (hwnd, IDC_ALLOWEC283,
prefref, kPGPNetPrefAllowEC283);
#else
PGPSetPrefBoolean (prefref, kPGPNetPrefAllowEC163, FALSE);
PGPSetPrefBoolean (prefref, kPGPNetPrefAllowEC283, FALSE);
#endif // PGP_ENABLE_EC_GUI
}
// ____________________________________
//
// initialize IPSEC groupID combobox
static VOID
sLoadIpsecGroupID (
HWND hwnd,
PPREFSDLGSTRUCT ppds,
PGPPrefRef prefref)
{
UINT u;
INT iIndex;
if (IsWindowEnabled (GetDlgItem (hwnd, IDC_PERFECTSECRECY)))
{
PGPGetPrefNumber (prefref, kPGPnetPrefIPSECGroupID, &u);
switch (u) {
case kPGPike_GR_None : iIndex = 0; break;
case kPGPike_GR_MODPTwo : iIndex = 1; break;
case kPGPike_GR_MODPFive : iIndex = 2; break;
default : iIndex = 0; break;
}
SendMessage (GetDlgItem (hwnd, IDC_PERFECTSECRECY),
CB_SETCURSEL, (WPARAM)iIndex, 0);
CLDisablePrefControl (hwnd, IDC_PERFECTSECRECY,
ppds, prefref, kPGPnetPrefIPSECGroupID);
}
}
// ____________________________________
//
// retrieve group ID pref from combobox control
static VOID
sSaveIpsecGroupID (
HWND hwnd,
PGPPrefRef prefref)
{
INT iIndex;
UINT u;
iIndex = SendMessage (
GetDlgItem (hwnd, IDC_PERFECTSECRECY), CB_GETCURSEL, 0, 0);
switch (iIndex) {
case 0 : u = kPGPike_GR_None; break;
case 1 : u = kPGPike_GR_MODPTwo; break;
case 2 : u = kPGPike_GR_MODPFive; break;
default : u = kPGPike_GR_None; break;
}
PGPSetPrefNumber (prefref, kPGPnetPrefIPSECGroupID, u);
}
// ____________________________________
//
// initialize IKE proposal list view
static VOID
sInitIkeProposalListControl (
HWND hwnd)
{
HWND hwndList;
LV_COLUMN lvc;
CHAR sz[64];
hwndList = GetDlgItem (hwnd, IDC_IKEPROPOSALLIST);
lvc.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
lvc.pszText = sz;
LoadString (g_hInst, IDS_IKEAUTHCOLNAME, sz, sizeof(sz));
lvc.fmt = LVCFMT_LEFT;
lvc.cx = IKEAUTHCOLWIDTH;
lvc.iSubItem = IKECOL_AUTH;
ListView_InsertColumn (hwndList, 0, &lvc);
LoadString (g_hInst, IDS_IKEHASHCOLNAME, sz, sizeof(sz));
lvc.fmt = LVCFMT_LEFT;
lvc.cx = IKEHASHCOLWIDTH;
lvc.iSubItem = IKECOL_HASH;
ListView_InsertColumn (hwndList, 1, &lvc);
LoadString (g_hInst, IDS_IKECIPHERCOLNAME, sz, sizeof(sz));
lvc.fmt = LVCFMT_LEFT;
lvc.cx = IKECIPHERCOLWIDTH;
lvc.iSubItem = IKECOL_CIPHER;
ListView_InsertColumn (hwndList, 2, &lvc);
LoadString (g_hInst, IDS_IKEDHCOLNAME, sz, sizeof(sz));
lvc.fmt = LVCFMT_LEFT;
lvc.cx = IKEDHCOLWIDTH;
lvc.iSubItem = IKECOL_DH;
ListView_InsertColumn (hwndList, 3, &lvc);
}
// ____________________________________
//
// insert a single entry into list
static VOID
sDisplayIkeProposalList (
HWND hwnd,
PPREFSDLGSTRUCT ppds)
{
LVITEM lvi;
CHAR sz[64];
INT ids;
UINT u;
HWND hwndList;
PGPNetPrefIKEProposalEntry* pIke;
hwndList = GetDlgItem (hwnd, IDC_IKEPROPOSALLIST);
ListView_DeleteAllItems (hwndList);
lvi.pszText = sz;
lvi.stateMask = 0;
lvi.mask = LVIF_TEXT;
for (u=0; u<ppds->net.uNumIKEProposals; u++)
{
pIke = &ppds->net.pIKEProposals[u];
lvi.iItem = u;
// authentication string
lvi.iSubItem = IKECOL_AUTH;
switch (pIke->authMethod) {
case kPGPike_AM_None : ids = IDS_NONE; break;
case kPGPike_AM_PreSharedKey : ids = IDS_SHAREDKEY; break;
case kPGPike_AM_DSS_Sig : ids = IDS_DSSSIGNATURE; break;
case kPGPike_AM_RSA_Sig : ids = IDS_RSASIGNATURE; break;
default : ids = IDS_UNKNOWNITEM; break;
}
LoadString (g_hInst, ids, sz, sizeof(sz));
ListView_InsertItem (hwndList, &lvi);
lvi.mask = LVIF_TEXT;
// hash string
lvi.iSubItem = IKECOL_HASH;
switch (pIke->hash) {
case kPGPike_HA_None : ids = IDS_NONE; break;
case kPGPike_HA_MD5 : ids = IDS_MD5; break;
case kPGPike_HA_SHA1 : ids = IDS_SHA; break;
default : ids = IDS_UNKNOWNITEM; break;
}
LoadString (g_hInst, ids, sz, sizeof(sz));
ListView_SetItem (hwndList, &lvi);
// IPCOMP string
lvi.iSubItem = IKECOL_CIPHER;
switch (pIke->cipher) {
case kPGPike_SC_None : ids = IDS_NONE; break;
case kPGPike_SC_DES_CBC : ids = IDS_DES56; break;
case kPGPike_SC_3DES_CBC : ids = IDS_3DES; break;
case kPGPike_SC_CAST_CBC : ids = IDS_CAST; break;
default : ids = IDS_UNKNOWNITEM; break;
}
LoadString (g_hInst, ids, sz, sizeof(sz));
ListView_SetItem (hwndList, &lvi);
// DH string
lvi.iSubItem = IKECOL_DH;
switch (pIke->groupID) {
case kPGPike_GR_None : ids = IDS_NONE; break;
case kPGPike_GR_MODPOne : ids = IDS_768; break;
case kPGPike_GR_MODPTwo : ids = IDS_1024; break;
case kPGPike_GR_MODPFive : ids = IDS_1536; break;
#if PGP_ENABLE_EC_GUI
case kPGPike_GR_ECSix : ids = IDS_EC163; break;
case kPGPike_GR_ECEight : ids = IDS_EC283; break;
#endif // PGP_ENABLE_EC_GUI
default : ids = IDS_UNKNOWNITEM; break;
}
LoadString (g_hInst, ids, sz, sizeof(sz));
ListView_SetItem (hwndList, &lvi);
}
}
// ____________________________________
//
// load IKE proposal list view with entries
static VOID
sLoadIkeProposalList (
HWND hwnd,
PPREFSDLGSTRUCT ppds,
PGPPrefRef prefref)
{
PGPError err = kPGPError_NoErr;
PGPNetPrefIKEProposalEntry* pProposals;
if (ppds->net.pIKEProposals)
{
PGPFreeData (ppds->net.pIKEProposals);
ppds->net.uNumIKEProposals = 0;
}
err = PGPGetNetIKEProposalPrefs (prefref,
&pProposals, &ppds->net.uNumIKEProposals);
if (IsntPGPError (err))
{
PGPSize size = sizeof(PGPNetPrefIKEProposalEntry) *
ppds->net.uNumIKEProposals;
ppds->net.pIKEProposals = PGPNewData (
PGPPeekContextMemoryMgr (ppds->context),
size, kPGPMemoryMgrFlags_Clear);
if (ppds->net.pIKEProposals)
{
pgpCopyMemory (pProposals, ppds->net.pIKEProposals, size);
sDisplayIkeProposalList (hwnd, ppds);
}
PGPFreeData (pProposals);
}
}
// ____________________________________
//
// initialize IKE proposal list view
static VOID
sInitIpsecProposalListControl (
HWND hwnd)
{
HWND hwndList;
LV_COLUMN lvc;
CHAR sz[64];
hwndList = GetDlgItem (hwnd, IDC_IPSECPROPOSALLIST);
lvc.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
lvc.pszText = sz;
LoadString (g_hInst, IDS_IPSECAHCOLNAME, sz, sizeof(sz));
lvc.fmt = LVCFMT_LEFT;
lvc.cx = IPSECAHCOLWIDTH;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?