#ifndef _OD_BRIDGE_H_
#define _OD_BRIDGE_H_ 1
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
#include <OpenDirectory/OpenDirectory.h>
#include <dispatch/dispatch.h>
#include <Security/cssmapi.h>
#include <Security/cssmapple.h>
#include <Security/cssmerr.h>
typedef struct ODdl_results {
CSSM_DB_RECORDTYPE recordid;
ODQueryRef query;
CFStringRef searchString;
CFIndex currentRecord;
CFMutableArrayRef certificates;
dispatch_semaphore_t results_done;
dispatch_queue_t result_modifier_queue;
} *ODdl_results_handle;
class DirectoryServiceException
{
protected:
long mResult;
public:
DirectoryServiceException (CFErrorRef result) : mResult (CFErrorGetCode(result)) {}
long GetResult () {return mResult;}
};
class DirectoryService
{
protected:
char *db_name;
ODNodeRef node;
dispatch_queue_t query_dispatch_queue; CFMutableArrayRef all_open_queries;
public:
DirectoryService ();
~DirectoryService ();
long long int getNextRecordID();
ODdl_results_handle makeNewDSQuery();
ODdl_results_handle translate_cssm_query_to_OD_query(const CSSM_QUERY *Query, CSSM_RETURN *error);
CFDataRef getNextCertFromResults(ODdl_results_handle results);
};
#endif