X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/72a12576750f52947eb043106ba5c12c0d07decf..b1ab9ed8d0e0f1c3b66d7daa8fd5564444c56195:/libsecurity_cdsa_plugin/lib/pluginsession.cpp?ds=inline diff --git a/libsecurity_cdsa_plugin/lib/pluginsession.cpp b/libsecurity_cdsa_plugin/lib/pluginsession.cpp new file mode 100644 index 00000000..ae284222 --- /dev/null +++ b/libsecurity_cdsa_plugin/lib/pluginsession.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved. + * + * The contents of this file constitute Original Code as defined in and are + * subject to the Apple Public Source License Version 1.2 (the 'License'). + * You may not use this file except in compliance with the License. Please obtain + * a copy of the License at http://www.apple.com/publicsource and read it before + * using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS + * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT + * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR + * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the + * specific language governing rights and limitations under the License. + */ + + +// +// pluginsession - an attachment session for a CSSM plugin +// +#include +#include +#include + + +// +// Construct a PluginSession +// +PluginSession::PluginSession(CSSM_MODULE_HANDLE theHandle, + CssmPlugin &myPlugin, + const CSSM_VERSION &version, + uint32 subserviceId, + CSSM_SERVICE_TYPE subserviceType, + CSSM_ATTACH_FLAGS attachFlags, + const CSSM_UPCALLS &inUpcalls) + : HandledObject(theHandle), plugin(myPlugin), + mVersion(version), mSubserviceId(subserviceId), + mSubserviceType(subserviceType), mAttachFlags(attachFlags), + upcalls(inUpcalls) +{ +} + + +// +// Destruction +// +PluginSession::~PluginSession() +{ +} + + +// +// The default implementation of detach() does nothing +// +void PluginSession::detach() +{ +} + + +// +// Allocation management +// +void *PluginSession::malloc(size_t size) throw(std::bad_alloc) +{ + if (void *addr = upcalls.malloc_func(handle(), size)) + return addr; + throw std::bad_alloc(); +} + +void *PluginSession::realloc(void *oldAddr, size_t size) throw(std::bad_alloc) +{ + if (void *addr = upcalls.realloc_func(handle(), oldAddr, size)) + return addr; + throw std::bad_alloc(); +} + + +// +// Dispatch callback events through the plugin object. +// Subsystem ID and subservice type default to our own. +// + +void PluginSession::sendCallback(CSSM_MODULE_EVENT event, + uint32 ssid, + CSSM_SERVICE_TYPE serviceType) const +{ + plugin.sendCallback(event, + (ssid == uint32(-1)) ? mSubserviceId : ssid, + serviceType ? serviceType : mSubserviceType); +}