#include "MDSSession.h"
#include <memory>
using namespace std;
static CSSM_RETURN CSSMAPI cssm_DataGetFirst(CSSM_DL_DB_HANDLE DLDBHandle,
const CSSM_QUERY *Query,
CSSM_HANDLE_PTR ResultsHandle,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
CSSM_DATA_PTR Data,
CSSM_DB_UNIQUE_RECORD_PTR *UniqueId)
{
BEGIN_API
if (!(Required(ResultsHandle) = findHandle<MDSSession>(DLDBHandle.DLHandle).DataGetFirst(DLDBHandle.DBHandle,
DLQuery::optional(Query),
Attributes,
CssmData::optional(Data),
Required(UniqueId))))
return CSSMERR_DL_ENDOFDATA;
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DataModify(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_DB_RECORDTYPE RecordType,
CSSM_DB_UNIQUE_RECORD_PTR UniqueRecordIdentifier,
const CSSM_DB_RECORD_ATTRIBUTE_DATA *AttributesToBeModified,
const CSSM_DATA *DataToBeModified,
CSSM_DB_MODIFY_MODE ModifyMode)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DataModify(DLDBHandle.DBHandle,
RecordType,
Required(UniqueRecordIdentifier),
AttributesToBeModified,
CssmData::optional(DataToBeModified),
ModifyMode);
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_GetDbNameFromHandle(CSSM_DL_DB_HANDLE DLDBHandle,
char **DbName)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).GetDbNameFromHandle(DLDBHandle.DBHandle,
DbName);
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DataAbortQuery(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_HANDLE ResultsHandle)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DataAbortQuery(DLDBHandle.DBHandle,
ResultsHandle);
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DestroyRelation(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_DB_RECORDTYPE RelationID)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DestroyRelation(DLDBHandle.DBHandle,
RelationID);
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DataDelete(CSSM_DL_DB_HANDLE DLDBHandle,
const CSSM_DB_UNIQUE_RECORD *UniqueRecordIdentifier)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DataDelete(DLDBHandle.DBHandle,
Required(UniqueRecordIdentifier));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DataInsert(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_DB_RECORDTYPE RecordType,
const CSSM_DB_RECORD_ATTRIBUTE_DATA *Attributes,
const CSSM_DATA *Data,
CSSM_DB_UNIQUE_RECORD_PTR *UniqueId)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DataInsert(DLDBHandle.DBHandle,
RecordType,
Attributes,
CssmData::optional(Data),
Required(UniqueId));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DataGetFromUniqueRecordId(CSSM_DL_DB_HANDLE DLDBHandle,
const CSSM_DB_UNIQUE_RECORD *UniqueRecord,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
CSSM_DATA_PTR Data)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DataGetFromUniqueRecordId(DLDBHandle.DBHandle,
Required(UniqueRecord),
Attributes,
CssmData::optional(Data));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_CreateRelation(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_DB_RECORDTYPE RelationID,
const char *RelationName,
uint32 NumberOfAttributes,
const CSSM_DB_SCHEMA_ATTRIBUTE_INFO *pAttributeInfo,
uint32 NumberOfIndexes,
const CSSM_DB_SCHEMA_INDEX_INFO *pIndexInfo)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).CreateRelation(DLDBHandle.DBHandle,
RelationID,
RelationName,
NumberOfAttributes,
Required(pAttributeInfo),
NumberOfIndexes,
Required(pIndexInfo));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_FreeUniqueRecord(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_DB_UNIQUE_RECORD_PTR UniqueRecord)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).FreeUniqueRecord(DLDBHandle.DBHandle,
Required(UniqueRecord));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DbOpen(CSSM_DL_HANDLE DLHandle,
const char *DbName,
const CSSM_NET_ADDRESS *DbLocation,
CSSM_DB_ACCESS_TYPE AccessRequest,
const CSSM_ACCESS_CREDENTIALS *AccessCred,
const void *OpenParameters,
CSSM_DB_HANDLE *DbHandle)
{
BEGIN_API
findHandle<MDSSession>(DLHandle).DbOpen(DbName,
DbLocation,
AccessRequest,
AccessCredentials::optional(AccessCred),
OpenParameters,
Required(DbHandle));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DataGetNext(CSSM_DL_DB_HANDLE DLDBHandle,
CSSM_HANDLE ResultsHandle,
CSSM_DB_RECORD_ATTRIBUTE_DATA_PTR Attributes,
CSSM_DATA_PTR Data,
CSSM_DB_UNIQUE_RECORD_PTR *UniqueId)
{
BEGIN_API
if (!findHandle<MDSSession>(DLDBHandle.DLHandle).DataGetNext(DLDBHandle.DBHandle,
ResultsHandle,
Attributes,
CssmData::optional(Data),
Required(UniqueId)))
return CSSMERR_DL_ENDOFDATA;
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_GetDbNames(CSSM_DL_HANDLE DLHandle,
CSSM_NAME_LIST_PTR *NameList)
{
BEGIN_API
findHandle<MDSSession>(DLHandle).GetDbNames(Required(NameList));
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_DbClose(CSSM_DL_DB_HANDLE DLDBHandle)
{
BEGIN_API
findHandle<MDSSession>(DLDBHandle.DLHandle).DbClose(DLDBHandle.DBHandle);
END_API(MDS)
}
static CSSM_RETURN CSSMAPI cssm_FreeNameList(CSSM_DL_HANDLE DLHandle,
CSSM_NAME_LIST_PTR NameList)
{
BEGIN_API
findHandle<MDSSession>(DLHandle).FreeNameList(Required(NameList));
END_API(MDS)
}
static MDS_FUNCS gMDSFunctionTable =
{
cssm_DbOpen,
cssm_DbClose,
cssm_GetDbNames,
cssm_GetDbNameFromHandle,
cssm_FreeNameList,
cssm_DataInsert,
cssm_DataDelete,
cssm_DataModify,
cssm_DataGetFirst,
cssm_DataGetNext,
cssm_DataAbortQuery,
cssm_DataGetFromUniqueRecordId,
cssm_FreeUniqueRecord,
cssm_CreateRelation,
cssm_DestroyRelation,
};
#ifdef __MWERKS__
#pragma export on
#endif
CSSM_RETURN CSSMAPI
MDS_Initialize (const CSSM_GUID *inCallerGuid,
const CSSM_MEMORY_FUNCS *inMemoryFunctions,
MDS_FUNCS_PTR outDlFunctions,
MDS_HANDLE *outMDSHandle)
{
BEGIN_API
Required (outDlFunctions);
Required (outMDSHandle) = (new MDSSession (Guid::optional(inCallerGuid),
Required(inMemoryFunctions)))->handle ();
*outDlFunctions = gMDSFunctionTable;
END_API(MDS)
}
CSSM_RETURN CSSMAPI
MDS_Terminate (MDS_HANDLE inMDSHandle)
{
BEGIN_API
auto_ptr<MDSSession> aMDSSession (&killHandle<MDSSession> (inMDSHandle));
aMDSSession->terminate (); END_API(MDS)
}
CSSM_RETURN CSSMAPI
MDS_Install (MDS_HANDLE inMDSHandle)
{
BEGIN_API
findHandle<MDSSession> (inMDSHandle).install ();
END_API(MDS)
}
CSSM_RETURN CSSMAPI
MDS_Uninstall (MDS_HANDLE inMDSHandle)
{
BEGIN_API
findHandle<MDSSession> (inMDSHandle).uninstall ();
END_API(MDS)
}
#ifdef __MWERKS__
#pragma export off
#endif