1/*
2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
3 *
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
8 * using this file.
9 *
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
16 */
17
18
19//
20// pluginsession - an attachment session for a CSSM plugin
21//
22#include <security_cdsa_plugin/pluginsession.h>
23#include <security_cdsa_plugin/cssmplugin.h>
24#include <security_cdsa_plugin/DLsession.h>
25
26
27//
28// Construct a PluginSession
29//
30PluginSession::PluginSession(CSSM_MODULE_HANDLE theHandle,
31                             CssmPlugin &myPlugin,
32                             const CSSM_VERSION &version,
33                             uint32 subserviceId,
34                             CSSM_SERVICE_TYPE subserviceType,
35                             CSSM_ATTACH_FLAGS attachFlags,
36                             const CSSM_UPCALLS &inUpcalls)
37	: HandledObject(theHandle), plugin(myPlugin),
38	  mVersion(version), mSubserviceId(subserviceId),
39	  mSubserviceType(subserviceType), mAttachFlags(attachFlags),
40	  upcalls(inUpcalls)
41{
42}
43
44
45//
46// Destruction
47//
48PluginSession::~PluginSession()
49{
50}
51
52
53//
54// The default implementation of detach() does nothing
55//
56void PluginSession::detach()
57{
58}
59
60
61//
62// Allocation management
63//
64void *PluginSession::malloc(size_t size) throw(std::bad_alloc)
65{
66    if (void *addr = upcalls.malloc_func(handle(), size))
67        return addr;
68	throw std::bad_alloc();
69}
70
71void *PluginSession::realloc(void *oldAddr, size_t size) throw(std::bad_alloc)
72{
73    if (void *addr = upcalls.realloc_func(handle(), oldAddr, size))
74        return addr;
75	throw std::bad_alloc();
76}
77
78
79//
80// Dispatch callback events through the plugin object.
81// Subsystem ID and subservice type default to our own.
82//
83
84void PluginSession::sendCallback(CSSM_MODULE_EVENT event,
85                                 uint32 ssid,
86                                 CSSM_SERVICE_TYPE serviceType) const
87{
88    plugin.sendCallback(event,
89                        (ssid == uint32(-1)) ? mSubserviceId : ssid,
90                        serviceType ? serviceType : mSubserviceType);
91}
92