#ifndef __DSX509RELATION__
#define __DSX509RELATION__
#include "PartialRelation.h"
#include "ODBridge.h"
enum {kCertTypeID = 0, kCertEncodingID, kCertPrintName, kCertAlias, kCertSubject, kCertIssuer, kCertSerialNumber,
kCertSubjectKeyIdentifier, kCertPublicKeyHash};
const int kNumberOfX509Attributes = kCertPublicKeyHash - kCertTypeID + 1;
class DSX509Tuple : public Tuple
{
protected:
int mNumberOfValues; Value** mValues; BlobValue *mData;
public:
DSX509Tuple (int numberOfValues);
virtual ~DSX509Tuple ();
void SetValue (int i, Value* v);
Value* GetValue (int i);
int GetNumberOfValues ();
void GetData (CSSM_DATA &data); void SetData (BlobValue *value); };
class DSX509Relation;
class DSX509Record
{
protected:
DSX509Relation *mRelation;
public:
DSX509Record (DSX509Relation* relation) : mRelation (relation) {}
DSX509Tuple* GetTuple (CFDataRef certData, CFStringRef original_search, DSX509Tuple *tupleList[], int maxTuples);
};
class DSX509UniqueIdentifier : public UniqueIdentifier
{
protected:
DSX509Tuple *mTuple;
public:
DSX509UniqueIdentifier (DSX509Tuple *t);
virtual ~DSX509UniqueIdentifier ();
virtual void Export (CSSM_DB_UNIQUE_RECORD &record);
DSX509Tuple* GetTuple ();
};
const int kMaxTuples = 10;
class DSX509Query : public Query
{
protected:
DirectoryService *mDirectoryService; unsigned long mRecordCount; unsigned long mCurrentItem; CSSM_QUERY *queryBase; ODdl_results_handle mRecordList; bool validQuery;
bool ValidateQueryString(CSSM_DATA mailAddr);
Tuple* MakeTupleFromRecord (CFDataRef record);
DSX509Tuple* mTupleList[kMaxTuples]; int mNumberOfTuples; int mNextTuple;
public:
DSX509Query (DSX509Relation* relation, const CSSM_QUERY *queryBase);
virtual ~DSX509Query ();
virtual Tuple* GetNextTuple (UniqueIdentifier *&id); };
class DSX509Relation : public PartialRelation
{
protected:
CSSM_CL_HANDLE mCertificateLibrary;
void InitializeCertLibrary ();
public:
DirectoryService *mDirectoryService;
DSX509Relation (CSSM_DB_RECORDTYPE recordType, int numberOfColumns, columnInfoLoader *theColumnInfo);
virtual ~DSX509Relation ();
Query* MakeQuery (const CSSM_QUERY* query); Tuple* GetTupleFromUniqueIdentifier (UniqueIdentifier* uniqueID); UniqueIdentifier* ImportUniqueIdentifier (CSSM_DB_UNIQUE_RECORD *uniqueRecord); CSSM_CL_HANDLE GetCLHandle (); };
#endif