#ifndef __DotMacRELATION__
#define __DotMacRELATION__
#include "PartialRelation.h"
#include <list>
enum {kCertTypeID = 0, kCertEncodingID, kCertPrintName, kCertAlias, kCertSubject, kCertIssuer, kCertSerialNumber,
kCertSubjectKeyIdentifier, kCertPublicKeyHash};
const int kNumberOfX509Attributes = kCertPublicKeyHash - kCertTypeID + 1;
class DotMacTuple : public Tuple
{
protected:
int mNumberOfValues; Value** mValues; BlobValue *mData;
public:
DotMacTuple (int numberOfValues);
virtual ~DotMacTuple ();
void SetValue (int i, Value* v);
Value* GetValue (int i);
int GetNumberOfValues ();
void GetData (CSSM_DATA &data); void SetData (BlobValue *value); };
class DotMacRelation;
class DotMacUniqueIdentifier : public UniqueIdentifier
{
protected:
DotMacTuple *mTuple;
public:
DotMacUniqueIdentifier (DotMacTuple *t);
virtual ~DotMacUniqueIdentifier ();
virtual void Export (CSSM_DB_UNIQUE_RECORD &record);
DotMacTuple* GetTuple ();
};
class DotMacQuery : public Query
{
protected:
char* mBuffer;
size_t mBufferSize;
char* mBufferPos;
char* mTarget;
std::string queryDomainName;
std::string queryUserName;
bool validQuery;
typedef std::list<CSSM_DATA> CertList;
CertList mCertList;
CertList::iterator mCertIterator;
std::string ReadLine ();
char* ReadStream (CFURLRef url, size_t &responseLength);
void ReadCertificatesFromURL (CFURLRef url);
bool ValidateQueryString(CSSM_DATA mailAddr);
public:
DotMacQuery (DotMacRelation* relation, const CSSM_QUERY *queryBase);
virtual ~DotMacQuery ();
virtual Tuple* GetNextTuple (UniqueIdentifier *&id); };
class DotMacRelation : public PartialRelation
{
protected:
CSSM_CL_HANDLE mCertificateLibrary;
void InitializeCertLibrary ();
public:
DotMacRelation ();
virtual ~DotMacRelation ();
Query* MakeQuery (const CSSM_QUERY* query); Tuple* GetTupleFromUniqueIdentifier (UniqueIdentifier* uniqueID); UniqueIdentifier* ImportUniqueIdentifier (CSSM_DB_UNIQUE_RECORD *uniqueRecord); CSSM_CL_HANDLE GetCLHandle (); };
#endif