DataStorageLibrary.cpp [plain text]
#include "DataStorageLibrary.h"
#include "CommonCode.h"
DataStorageLibrary *DataStorageLibrary::gDL;
pthread_mutex_t *DataStorageLibrary::gGlobalLock;
DataStorageLibrary::DataStorageLibrary (pthread_mutex_t *globalLock,
CSSM_SPI_ModuleEventHandler eventHandler,
void* CssmNotifyCallbackCtx)
: mEventHandler (eventHandler), mCallbackContext (CssmNotifyCallbackCtx)
{
gDL = this;
gGlobalLock = globalLock;
}
DataStorageLibrary::~DataStorageLibrary ()
{
}
void DataStorageLibrary::Attach (const CSSM_GUID *ModuleGuid,
const CSSM_VERSION *Version,
uint32 SubserviceID,
CSSM_SERVICE_TYPE SubserviceType,
CSSM_ATTACH_FLAGS AttachFlags,
CSSM_MODULE_HANDLE ModuleHandle,
CSSM_KEY_HIERARCHY KeyHierarchy,
const CSSM_GUID *CssmGuid,
const CSSM_GUID *ModuleManagerGuid,
const CSSM_GUID *CallerGuid,
const CSSM_UPCALLS *Upcalls,
CSSM_MODULE_FUNCS_PTR *FuncTbl)
{
AttachedInstance* ai = MakeAttachedInstance ();
ai->SetUpcalls (ModuleHandle, Upcalls);
ai->Initialize (ModuleGuid, Version, SubserviceID, SubserviceType, AttachFlags,
KeyHierarchy, CssmGuid, ModuleManagerGuid, CallerGuid);
*FuncTbl = AttachedInstance::gFunctionTablePtr;
mInstanceMap[ModuleHandle] = ai;
}
void DataStorageLibrary::Detach (CSSM_MODULE_HANDLE moduleHandle)
{
MutexLocker m (mInstanceMapMutex);
AttachedInstance* ai = mInstanceMap[moduleHandle];
delete ai;
}
AttachedInstance* DataStorageLibrary::HandleToInstance (CSSM_MODULE_HANDLE handle)
{
MutexLocker _m (mInstanceMapMutex);
InstanceMap::iterator m = mInstanceMap.find (handle);
if (m == mInstanceMap.end ())
{
CSSMError::ThrowCSSMError(CSSMERR_DL_INVALID_DL_HANDLE);
}
return m->second;
}