📄 pnaddwiz.c
字号:
GetParent (hwnd), PSWIZB_NEXT|PSWIZB_BACK);
else
PropSheet_SetWizButtons (
GetParent (hwnd), PSWIZB_BACK);
}
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_BACK|PSWIZB_NEXT);
SendDlgItemMessage (hwnd, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pahs->hBitmap);
// enable/disable the 'Next' button
if (GetWindowTextLength (GetDlgItem (hwnd, IDC_IDENTITY)) > 0)
PropSheet_SetWizButtons (
GetParent (hwnd), PSWIZB_NEXT|PSWIZB_BACK);
else
PropSheet_SetWizButtons (
GetParent (hwnd), PSWIZB_BACK);
if (!pahs->bSharedSecret)
SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
else
{
CHAR sz1[128];
CHAR sz2[128];
CHAR szPrompt[256];
switch (pahs->pheNew->identityType) {
case kPGPike_ID_IPV4_Addr :
case kPGPike_ID_FQDN :
SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
break;
case kPGPike_ID_UserFDQN :
PNGetLocalHostInfo (NULL, sz1, sizeof(sz1));
LoadString (g_hinst, IDS_USERDOMAINNAMEPROMPT,
sz2, sizeof(sz2));
wsprintf (szPrompt, sz2, sz1);
SetDlgItemText (hwnd, IDC_IDENTITYPROMPT, szPrompt);
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
break;
case kPGPike_ID_DER_ASN1_DN :
LoadString (g_hinst, IDS_DISTINGUISHEDNAMEPROMPT,
szPrompt, sizeof(szPrompt));
SetDlgItemText (hwnd, IDC_IDENTITYPROMPT, szPrompt);
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
break;
}
}
bReturnCode = TRUE;
break;
case PSN_WIZNEXT :
{
PGPByte* pbyte = NULL;
PGPSize size;
PGPError err;
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
GetDlgItemText (hwnd, IDC_IDENTITY, pahs->pheNew->identity,
sizeof(pahs->pheNew->identity));
if (pahs->pheNew->identityType == kPGPike_ID_DER_ASN1_DN)
{
err = PGPCreateDistinguishedName (
pahs->context, pahs->pheNew->identity,
&pbyte, &size);
if (err == kPGPError_InvalidDistinguishedName)
PNMessageBox (hwnd, IDS_CAPTION, IDS_DNINVALID,
MB_OK|MB_ICONSTOP);
else
PGPclErrorBox (hwnd, err);
if (IsPGPError (err))
{
SetFocus (GetDlgItem (hwnd, IDC_IDENTITY));
SendDlgItemMessage (
hwnd, IDC_IDENTITY, EM_SETSEL, 0, -1);
SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
}
else
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
if (pbyte)
PGPFreeData (pbyte);
}
else
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
}
case PSN_QUERYCANCEL:
break;
}
break;
}
}
return bReturnCode;
}
// ______________________________________________
//
// Dialog procedure for asking user to continue with host/subnet
static LRESULT WINAPI
sAddWizAddMoreDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PADDHOSTSTRUCT pahs = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE* ppspMsgRec = (PROPSHEETPAGE *) lParam;
pahs = (PADDHOSTSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pahs);
// set default state
CheckRadioButton (hwnd, IDC_CREATEMORE, IDC_NOMORE, IDC_CREATEMORE);
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_BACK|PSWIZB_NEXT);
SendDlgItemMessage (hwnd, IDC_WIZBITMAP, STM_SETIMAGE,
IMAGE_BITMAP, (LPARAM) pahs->hBitmap);
if (pahs->bFirstTime &&
(pahs->uHostType != WIZ_GATEWAY))
{
SetWindowLong (hwnd, DWL_MSGRESULT, -1L); // skip this panel
}
else
{
// set text strings
if (pahs->bFirstTime)
{
ShowWindow (GetDlgItem (hwnd, IDC_TEXT1), SW_SHOW);
ShowWindow (GetDlgItem (hwnd, IDC_FIRSTTIME), SW_SHOW);
ShowWindow (GetDlgItem (hwnd, IDC_CONTINUE), SW_HIDE);
CheckRadioButton (hwnd, IDC_CREATEMORE,
IDC_NOMORE, IDC_CREATEMORE);
}
else
{
ShowWindow (GetDlgItem (hwnd, IDC_TEXT1), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_FIRSTTIME), SW_HIDE);
ShowWindow (GetDlgItem (hwnd, IDC_CONTINUE), SW_SHOW);
CheckRadioButton (hwnd, IDC_CREATEMORE,
IDC_NOMORE, IDC_NOMORE);
}
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
}
bReturnCode = TRUE;
break;
}
case PSN_WIZNEXT :
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (IsDlgButtonChecked (hwnd, IDC_CREATEMORE) == BST_CHECKED)
{
INT iEntry;
// send message to all panels to reset
PropSheet_QuerySiblings (GetParent (hwnd), 0, 0);
// reset data structure
iEntry = sSaveHostEntry (pahs);
if (iEntry >= 0)
{
if (pahs->bFirstTime)
pahs->iSelectedHost = iEntry;
pahs->bFirstTime = FALSE;
pahs->bBehindGateway = TRUE;
pahs->uHostType = WIZ_HOST;
pahs->szHostName[0] = '\0';
pahs->dwFoundIPAddress = 0;
pahs->pheNew->ipAddress = 0;
pahs->pheNew->ipMask = 0;
pahs->pheNew->hostName[0] = '\0';
pahs->pheNew->identity[0] = '\0';
pahs->pheNew->identityIPAddress = 0;
pahs->pheNew->sharedSecret[0] = '\0';
pahs->bNeedsAuthKey |= (pahs->bSecure &&
!pahs->bSharedSecret);
pahs->bSharedSecret = FALSE;
PropSheet_SetCurSel (GetParent (hwnd),
NULL, ADDWIZ_HOSTTYPE);
SetWindowLong (hwnd, DWL_MSGRESULT, -1L);
}
else
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
}
else
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_KILLACTIVE :
SetWindowLong (hwnd, DWL_MSGRESULT, 0L);
bReturnCode = TRUE;
break;
case PSN_QUERYCANCEL:
break;
}
break;
}
}
return bReturnCode;
}
// ____________________________________
//
// initialize the list view control
static VOID
sInitKeyLists (
HWND hwnd,
PADDHOSTSTRUCT pahs)
{
HBITMAP hBmp;
HDC hDC;
INT iNumBits;
LV_COLUMN lvc;
RECT rc;
// Initialize the tree view window.
// First create imagelist and load the appropriate bitmaps based on
// current display capabilities.
hDC = GetDC (NULL); // DC for desktop
iNumBits = GetDeviceCaps (hDC, BITSPIXEL) * GetDeviceCaps (hDC, PLANES);
ReleaseDC (NULL, hDC);
if (iNumBits <= 8) {
pahs->hil = ImageList_Create (16, 16, ILC_COLOR|ILC_MASK,
NUM_KEY_BITMAPS, 0);
hBmp = LoadBitmap (g_hinst, MAKEINTRESOURCE (IDB_KEYIMG4));
ImageList_AddMasked (pahs->hil, hBmp, RGB(255, 0, 255));
DeleteObject (hBmp);
}
else {
pahs->hil = ImageList_Create (16, 16, ILC_COLOR24|ILC_MASK,
NUM_KEY_BITMAPS, 0);
hBmp = LoadBitmap (g_hinst, MAKEINTRESOURCE (IDB_KEYIMG24));
ImageList_AddMasked (pahs->hil, hBmp, RGB(255, 0, 255));
DeleteObject (hBmp);
}
// Associate the image list with the tree view control.
ListView_SetImageList (
GetDlgItem (hwnd, IDC_PGPKEYLIST), pahs->hil, LVSIL_SMALL);
// add columns
GetClientRect (GetDlgItem (hwnd, IDC_PGPKEYLIST), &rc);
lvc.mask = LVCF_WIDTH;
lvc.cx = rc.right - rc.left;
ListView_InsertColumn (GetDlgItem (hwnd, IDC_PGPKEYLIST), 0, &lvc);
}
// ____________________________________
//
// put name of key into listview
static VOID
sSetKeyLists (
HWND hwnd,
PADDHOSTSTRUCT pahs)
{
LV_ITEM lvi;
CHAR sz[kPGPMaxUserIDSize +1];
CHAR szID[kPGPMaxKeyIDStringSize +1];
UINT u;
PGPKeyID keyid;
PGPError err;
PGPSize size;
PGPKeyRef keyPGP;
PGPKeyRef keyX509;
PGPSigRef sigX509;
HICON hIcon;
HWND hwndList;
hwndList = GetDlgItem (hwnd, IDC_PGPKEYLIST);
ListView_DeleteAllItems (hwndList);
SetDlgItemText (hwnd, IDC_X509KEYEDIT, "");
PGPnetGetConfiguredAuthKeys (g_context, &pahs->pncfg, g_AOS.keysetMain,
&keyPGP, &keyX509, &sigX509);
lvi.mask = LVIF_TEXT|LVIF_IMAGE;
lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.pszText = sz;
sz[0] = '\0';
// first the PGP key
if (pahs->pncfg.uPGPAuthKeyAlg != kPGPPublicKeyAlgorithm_Invalid)
{
if (PGPKeyRefIsValid (keyPGP))
{
lvi.iImage = PNDetermineKeyIcon (keyPGP, NULL);
sz[0] = '\0';
PGPGetPrimaryUserIDNameBuffer (keyPGP, sizeof(sz), sz, &u);
}
else
{
lvi.iImage = IDX_NONE;
err = PGPImportKeyID (pahs->pncfg.expkeyidPGPAuthKey, &keyid);
if (IsntPGPError (err))
{
LoadString (g_hinst, IDS_UNKNOWNKEY, sz, sizeof(sz));
PGPGetKeyIDString (&keyid,
kPGPKeyIDString_Abbreviated, szID);
lstrcat (sz, szID);
}
}
ListView_InsertItem (hwndList, &lvi);
InvalidateRect (hwndList, NULL, FALSE);
}
// then get X509 auth key
if (pahs->pncfg.uX509AuthKeyAlg != kPGPPublicKeyAlgorithm_Invalid)
{
if (PGPKeyRefIsValid (keyX509) &&
PGPSigRefIsValid (sigX509))
{
sz[0] = '\0';
PGPGetSigPropertyBuffer (sigX509,
kPGPSigPropX509LongName, sizeof(sz), sz, &size);
SetDlgItemText (hwnd, IDC_X509KEYEDIT, sz);
u = PNDetermineCertIcon (sigX509, NULL);
hIcon = ImageList_GetIcon (pahs->hil, u, ILD_TRANSPARENT);
SendDlgItemMessage (
hwnd, IDC_X509ICON, STM_SETICON, (WPARAM)hIcon, 0);
}
else
{
err = PGPImportKeyID (pahs->pncfg.expkeyidX509AuthKey, &keyid);
if (IsntPGPError (err))
{
LoadString (g_hinst, IDS_UNKNOWNCERT, sz, sizeof(sz));
PGPGetKeyIDString (&keyid,
kPGPKeyIDString_Abbreviated, szID);
lstrcat (sz, szID);
SetDlgItemText (hwnd, IDC_X509KEYEDIT, sz);
}
}
}
}
// ______________________________________________
//
// Dialog procedure for asking user to set authentication keys
static LRESULT WINAPI
sAddWizAuthKeysDlgProc (
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
PADDHOSTSTRUCT pahs = NULL;
switch (uMsg) {
case WM_INITDIALOG:
{
PROPSHEETPAGE* ppspMsgRec = (PROPSHEETPAGE *) lParam;
pahs = (PADDHOSTSTRUCT) ppspMsgRec->lParam;
SetWindowLong (hwnd, GWL_USERDATA, (LPARAM)pahs);
#if !PGP_FREEWARE
ShowWindow (GetDlgItem (hwnd, IDC_X509GROUP), SW_SHOW);
ShowWindow (GetDlgItem (hwnd, IDC_X509BORDER), SW_SHOW);
ShowWindow (GetDlgItem (hwnd, IDC_X509ICON), SW_SHOW);
ShowWindow (GetDlgItem (hwnd, IDC_X509KEYEDIT), SW_SHOW);
ShowWindow (GetDlgItem (hwnd, IDC_SELECTX509CERT), SW_SHOW);
EnableWindow (GetDlgItem (hwnd, IDC_SELECTX509CERT), TRUE);
#endif // !PGP_FREEWARE
// initialize controls
sInitKeyLists (hwnd, pahs);
PostMessage (hwnd, WM_APP, 0, 0);
break;
}
case WM_APP :
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
if (g_bAuthAccess)
{
sSetKeyLists (hwnd, pahs);
}
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_DESTROY :
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
ImageList_Destroy (pahs->hil);
break;
case WM_COMMAND :
{
PGPError err;
pahs = (PADDHOSTSTRUCT)GetWindowLong (hwnd, GWL_USERDATA);
switch (LOWORD(wParam)) {
case IDC_SELECTPGPKEY :
err = PNSelectPGPKey (g_context, g_AOS.keysetMain, hwnd,
&pahs->pncfg.uPGPAuthKeyAlg,
pahs->pncfg.expkeyidPGPAuthKey);
PostMessage (hwnd, WM_APP, 0, 0);
break;
case IDC_SELECTX509CERT :
{
PGPKeyRef key;
PGPSigRef sig;
err = PGPclSelectX509Cert (g_context, hwnd, NULL,
g_AOS.keysetMain,
PGPCL_CANSIGNKEYSONLY|PGPCL_NOSPLITKEYS,
&key, &sig);
if (IsntPGPError (err))
{
if (IsntNull (pahs->pncfg.pX509AuthCertIASN))
PGPFreeData (pahs->pncfg.pX509AuthCertIASN);
PGPX509CertToExport (g_context, key, sig,
&(pahs->pncfg.uX509AuthKeyAlg),
pahs->pncfg.expkeyidX509AuthKey,
&(pahs->pncfg.pX509AuthCertIASN),
&(pahs->pncfg.uX509AuthCertIASNLength));
}
PostMessage (hwnd, WM_APP, 0, 0);
break;
}
}
break;
}
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR) lParam;
switch(p
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -