#ifndef _TOKEND_METARECORD_H_
#define _TOKEND_METARECORD_H_
#include <security_cdsa_utilities/cssmdata.h>
#include <map>
#include <string>
#include <vector>
#include <SecurityTokend/SecTokend.h>
namespace Tokend
{
enum
{
kAF_STRING = CSSM_DB_ATTRIBUTE_FORMAT_STRING,
kAF_SINT32 = CSSM_DB_ATTRIBUTE_FORMAT_SINT32,
kAF_UINT32 = CSSM_DB_ATTRIBUTE_FORMAT_UINT32,
kAF_BIG_NUM = CSSM_DB_ATTRIBUTE_FORMAT_BIG_NUM,
kAF_REAL = CSSM_DB_ATTRIBUTE_FORMAT_REAL,
kAF_TIME_DATE = CSSM_DB_ATTRIBUTE_FORMAT_TIME_DATE,
kAF_BLOB = CSSM_DB_ATTRIBUTE_FORMAT_BLOB,
kAF_MULTI_UINT32 = CSSM_DB_ATTRIBUTE_FORMAT_MULTI_UINT32,
kAF_COMPLEX = CSSM_DB_ATTRIBUTE_FORMAT_COMPLEX
};
typedef CSSM_DB_RECORDTYPE RelationId;
class AttributeCoder;
class KeyHandleFactory;
class MetaAttribute;
class Record;
class TokenContext;
class MetaRecord
{
NOCOPY(MetaRecord)
public:
MetaRecord(RelationId inRelationId);
~MetaRecord();
MetaAttribute &createAttribute(const std::string &inAttributeName,
CSSM_DB_ATTRIBUTE_FORMAT inAttributeFormat);
MetaAttribute &createAttribute(const std::string *inAttributeName,
const CssmOid *inAttributeOID,
uint32 inAttributeID,
CSSM_DB_ATTRIBUTE_FORMAT inAttributeFormat);
const MetaAttribute &metaAttribute(
const CSSM_DB_ATTRIBUTE_INFO &inAttributeInfo) const;
const MetaAttribute &metaAttribute(uint32 name) const;
const MetaAttribute &metaAttribute(
const std::string &name) const;
const MetaAttribute &metaAttributeForData() const;
void attributeCoder(uint32 name, AttributeCoder *coder);
void attributeCoder(const std::string &name, AttributeCoder *coder);
void attributeCoderForData(AttributeCoder *coder);
RelationId relationId() const { return mRelationId; }
uint32 attributeIndex(const CSSM_DB_ATTRIBUTE_INFO &inAttributeInfo) const;
void get(TokenContext *tokenContext, Record &record,
TOKEND_RETURN_DATA &data) const;
void keyHandleFactory(KeyHandleFactory *keyHandleFactory)
{ mKeyHandleFactory = keyHandleFactory; }
private:
RelationId mRelationId;
typedef std::map<std::string, uint32> NameStringMap;
typedef std::map<CssmBuffer<CssmOidContainer>, uint32> NameOIDMap;
typedef std::map<uint32, uint32> NameIntMap;
NameStringMap mNameStringMap;
NameOIDMap mNameOIDMap;
NameIntMap mNameIntMap;
typedef std::vector<MetaAttribute *> AttributeVector;
typedef AttributeVector::iterator AttributeIterator;
typedef AttributeVector::const_iterator ConstAttributeIterator;
AttributeVector mAttributeVector;
KeyHandleFactory *mKeyHandleFactory;
};
}
#endif