klmisc.c

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

C
319
字号
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.
			
	KLMisc.c - KeyList miscellaneous routines

	$Id: KLMisc.c,v 1.16 2002/08/28 02:06:09 wjb Exp $
____________________________________________________________________________*/
#include "pgpPFLConfig.h"

// project header files
#include "PGPclx.h"
#include "PGPklx.h"

// external global variables
extern HINSTANCE g_hInst;


//	___________________________________________________
//
// Private memory allocation routine

VOID* KLAlloc (LONG size) {
	VOID* p;
	p = malloc (size);
	if (p) {
		memset (p, 0, size);
	}
	return p;
}


//	___________________________________________________
//
// Private memory deallocation routine

VOID KLFree (VOID* p) {
	if (p) {
		free (p);
	}
}


//	___________________________________________________
//
//  Get and truncate the name of a userid.

BOOL 
KLGetUserIDName (
		PGPKeyDBObjRef	userid, 
		LPSTR			sz, 
		UINT			uLen) 
{
	PGPError	err			= kPGPError_NoErr;
	UINT		u;
	PGPBoolean	bAttrib;
	PGPInt32	iType;

	PGPGetKeyDBObjBooleanProperty (userid, 
			kPGPUserIDProperty_IsAttribute, &bAttrib);
	if (bAttrib) 
	{
		PGPGetKeyDBObjNumericProperty (userid, 
				kPGPUserIDProperty_AttributeType, &iType);

		switch (iType) {
		case kPGPAttribute_Image :
			LoadString (g_hInst, IDS_PHOTOUSERID, sz, uLen);
			break;

		default :
			LoadString (g_hInst, IDS_UNKNOWNFORMAT, sz, uLen);
			break;
		}
	}
	else 
	{
		PGPclGetUserIDNameUTF8 (userid, sz, uLen, &u);
	}

	switch (err) {
	case kPGPError_BufferTooSmall :
	case kPGPError_NoErr :
		return TRUE;

	default :
		PGPclErrorBox (NULL, err);
		return FALSE;
	}
}


//	___________________________________________________
//
//  Get and truncate the name of a primary userid on a key.

BOOL 
KLGetKeyName (
		PGPKeyDBObjRef	key, 
		LPSTR			sz, 
		UINT			uLen) 
{
	UINT		u;
	PGPError	err;

	err = PGPclGetPrimaryUserIDNameUTF8 (key, sz, uLen, &u);

	switch (err) {
	case kPGPError_BufferTooSmall :
	case kPGPError_NoErr :
		return TRUE;

	default :
		PGPclErrorBox (NULL, err);
		sz[0] = '\0';
		return FALSE;
	}
}


//	___________________________________________________
//
//  Get the keyid of a key.

BOOL 
KLGetKeyIDFromKey (
		PGPKeyDBObjRef	key, 
		LPSTR			sz, 
		UINT			u) 
{
	PGPKeyID	keyid;
	CHAR		szID[kPGPMaxKeyIDStringSize];

	if (u < 11) 
		return FALSE;

	PGPGetKeyID (key, &keyid);
	PGPGetKeyIDString (&keyid, kPGPKeyIDString_Abbreviated, szID);
	lstrcpyn (sz, szID, u);

	return TRUE;
}


//	___________________________________________________
//
//  Get the keyid of a signing key.

BOOL 
KLGetKeyIDFromCert (
		PGPKeyDBObjRef	sig, 
		BOOL			bX509,
		LPSTR			sz, 
		UINT			u) 
{
	PGPKeyID	keyid;
	PGPSize		size;
	CHAR		szID[kPGPMaxKeyIDStringSize];

	if (u < 11) 
		return FALSE;

	if (bX509)
	{
		PGPKeyDBObjRef	keyDummy;

		if (IsPGPError (PGPGetSigX509CertifierSig (
				sig, kInvalidPGPKeyDBRef, &keyDummy)))
		{
			sz[0] = '\0';
			return TRUE;
		}
	}

	PGPGetKeyDBObjDataProperty (sig, 
			kPGPSigProperty_KeyID, &keyid, sizeof(keyid), &size);
	PGPGetKeyIDString (&keyid, kPGPKeyIDString_Abbreviated, szID);
	lstrcpyn (sz, szID, u);

	return TRUE;
}


//	___________________________________________________
//
//  Return handle of keymanager window

HWND PGPclExport 
PGPclKeyListGetWindow (HKEYLIST hKL) 
{
	if (!hKL) 
		return NULL;

	return (((PKEYLIST)hKL)->hwndTree);

}


//	___________________________________________________
//
//  Set configuration

PGPError PGPclExport 
PGPclKeyListConfigure (
		HKEYLIST			hkeylist, 
		PPGPclKeyListConfig	pKLConfig) 
{
	PKEYLIST pKL = (PKEYLIST)hkeylist;
	if (!pKL) 
		return kPGPError_BadParams;

	if (pKL) 
	{
		// set keyserver
		if (pKLConfig->uMask & kPGPclKeyList_KeyServer) 
		{
			if (pKLConfig->keyserver.protocol != kPGPKeyServerProtocol_Invalid) 
				CopyMemory (&pKL->keyserver, &pKLConfig->keyserver,
							sizeof(PGPKeyServerEntry));
			else
				ZeroMemory (&pKL->keyserver, sizeof(PGPKeyServerEntry));
		}

		// set option flags
		if (pKLConfig->uMask & kPGPclKeyList_Options) 
			pKL->ulOptionFlags = pKLConfig->uOptions;

		// set column flags
		if (pKLConfig->uMask & kPGPclKeyList_Columns) 
			pKL->ulShowColumns = pKLConfig->uShowColumns;

		// set statusbar hwnd
		if (pKLConfig->uMask & kPGPclKeyList_StatusHWND) 
			pKL->hwndStatusBar = pKLConfig->hwndStatusBar;
	
		// determine validity threshold for green dot
		if (pKL->ulOptionFlags & kPGPclKeyList_MarginalIsInvalid) 
			pKL->iValidityThreshold = PGPCL_VALIDITY_COMPLETE;
		else
			pKL->iValidityThreshold = PGPCL_VALIDITY_MARGINAL;
			
		return kPGPError_NoErr;
	}

	else
		return kPGPError_BadParams;

}


//	___________________________________________________
//
//  Select columns

PGPError PGPclExport 
PGPclKeyListSelectColumns (
		HKEYLIST	hkeylist, 
		PGPUInt32	uColumnFlags, 
		PGPBoolean	bRedraw) 
{
	PKEYLIST pKL = (PKEYLIST)hkeylist;

	KLSelectColumns (pKL, uColumnFlags);

	if (bRedraw) 
	{
		KLDeleteAllUserValues (pKL);
		KLSetFocus (pKL, NULL, FALSE);
		TreeList_DeleteTree (pKL->hwndTree, TRUE);
		TreeList_DeleteAllColumns (pKL->hwndTree);

		KLAddColumns (pKL);
		KLLoadKeyRingIntoTree (pKL, FALSE, FALSE, TRUE);
		InvalidateRect (pKL->hwndTree, NULL, TRUE);
		UpdateWindow (pKL->hwndTree);
	}

	KLSetColumnPreferences (pKL);

	return kPGPError_NoErr;
}


//	___________________________________________________
//
//  Get selected columns

PGPError PGPclExport 
PGPclKeyListGetSelectedColumns (
		HKEYLIST	hkeylist, 
		PGPUInt32*	puColumnFlags) 
{
	PKEYLIST pKL = (PKEYLIST)hkeylist;

	KLGetSelectedColumns (pKL, puColumnFlags);

	return kPGPError_NoErr;
}

/*
//	___________________________________________________
//
//  check if OK to close key manager

BOOL PGPclExport 
PGPclOKToClose (HKEYLIST hKeyMan, PUINT puReason)
{
	PKEYLIST pKL = (PKEYLIST)hKeyMan;

	if (KLExistSplitKeyDialog (pKL)) {
		*puReason = KLR_EXISTINGSPLITKEYDLGS;
		return FALSE;
	}

	return TRUE;
}

*/

⌨️ 快捷键说明

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