diff options
Diffstat (limited to 'lib/dns/sec/dnssafe/kinfotyp.h')
-rw-r--r-- | lib/dns/sec/dnssafe/kinfotyp.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/dns/sec/dnssafe/kinfotyp.h b/lib/dns/sec/dnssafe/kinfotyp.h new file mode 100644 index 00000000..3f6ce7c1 --- /dev/null +++ b/lib/dns/sec/dnssafe/kinfotyp.h @@ -0,0 +1,57 @@ +/* Copyright (C) RSA Data Security, Inc. created 1993, 1996. This is an + unpublished work protected as such under copyright law. This work + contains proprietary, confidential, and trade secret information of + RSA Data Security, Inc. Use, disclosure or reproduction without the + express written authorization of RSA Data Security, Inc. is + prohibited. + */ + +typedef int (*KIT_ADD_INFO) PROTO_LIST ((B_Key *, POINTER)); +typedef int (*KIT_MAKE_INFO) PROTO_LIST ((POINTER *, B_Key *)); + +/* The definition in C++ is: + class B_KeyInfoType { + public: + B_KeyInfoType (KIT_ADD_INFO AddInfo) { + _AddInfo = AddInfo; + _MakeInfo = KeyInfoType::makeError;} + B_KeyInfoType (KIT_ADD_INFO AddInfo, KIT_MAKE_INFO MakeInfo) { + _AddInfo = AddInfo; + _MakeInfo = MakeInfo;} + + int addInfo (B_Key *key, POINTER info) {return (*_AddInfo) (key, info);} + int makeInfo (POINTER *info, B_Key *key) {return (*_MakeInfo) (info, key);} + + static int makeError (POINTER *info, B_Key *key); + + private: + KIT_ADD_INFO _AddInfo; + KIT_MAKE_INFO _MakeInfo; + }; + + Note that a derived class simply calls one of the B_KeyInfoType constructors + which set the addInfo or both the addInfo and makeInfo callbacks. + There is no need for an extra level involving virtual functions because + each key class only has one instance, making a V table a waste of space. + An example of a derived class is: + + class KITItem : public B_KeyInfoType { + public: + // Set addInfo and leave makeInfo as B_KeyInfoType::makeError + KITItem () : B_KeyInfoType (KITItem::addInfo) {}; + + static int addInfo (B_Key *key, POINTER info); + }; + + + There is one global instance which is used by B_Key::setInfo, etc.: + + KITItem KITItem; + */ + +typedef struct B_KeyInfoType { + KIT_ADD_INFO AddInfo; + KIT_MAKE_INFO MakeInfo; +} B_KeyInfoType; + +int B_KeyInfoTypeMakeError PROTO_LIST ((POINTER *, B_Key *)); |