#ifndef _H_PLUGINSESSION
#define _H_PLUGINSESSION
#include <Security/c++plugin.h>
#include <Security/handleobject.h>
#include <Security/cssmalloc.h>
#ifdef _CPP_PLUGINSESSION
# pragma export on
#endif
namespace Security
{
class PluginSession : public CssmAllocator, public HandledObject {
NOCOPY(PluginSession)
friend class CssmPlugin;
public:
PluginSession(CSSM_MODULE_HANDLE theHandle,
CssmPlugin &plug,
const CSSM_VERSION &Version,
uint32 SubserviceID,
CSSM_SERVICE_TYPE SubServiceType,
CSSM_ATTACH_FLAGS AttachFlags,
const CSSM_UPCALLS &upcalls);
virtual ~PluginSession();
virtual void detach();
CssmPlugin &plugin;
void sendCallback(CSSM_MODULE_EVENT event,
uint32 subId = uint32(-1),
CSSM_SERVICE_TYPE serviceType = 0) const;
static void unimplemented() { CssmError::throwMe(CSSM_ERRCODE_FUNCTION_NOT_IMPLEMENTED); }
protected:
virtual CSSM_MODULE_FUNCS_PTR construct() = 0;
public:
void *malloc(size_t size);
void *realloc(void *addr, size_t size);
void free(void *addr) { upcalls.free_func(handle(), addr); }
const CSSM_VERSION &version() const { return mVersion; }
uint32 subserviceId() const { return mSubserviceId; }
CSSM_SERVICE_TYPE subserviceType() const { return mSubserviceType; }
CSSM_ATTACH_FLAGS attachFlags() const { return mAttachFlags; }
private:
CSSM_VERSION mVersion;
uint32 mSubserviceId;
CSSM_SERVICE_TYPE mSubserviceType;
CSSM_ATTACH_FLAGS mAttachFlags;
const CSSM_UPCALLS &upcalls;
};
}
#ifdef _CPP_PLUGINSESSION
# pragma export off
#endif
#endif //_H_PLUGINSESSION