]> git.saurik.com Git - apple/security.git/blob - cdsa/cdsa_pluginlib/pluginsession.cpp
Security-179.tar.gz
[apple/security.git] / cdsa / cdsa_pluginlib / pluginsession.cpp
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 #ifdef __MWERKS__
23 #define _CPP_PLUGINSESSION
24 #endif
25 #include <Security/pluginsession.h>
26 #include <Security/cssmplugin.h>
27 #include <Security/DLsession.h>
28
29
30 //
31 // Construct the PluginSession base object.
32 //
33 PluginSession::PluginSession(CSSM_MODULE_HANDLE theHandle,
34 CssmPlugin &plug,
35 const CSSM_VERSION &version,
36 uint32 subserviceId,
37 CSSM_SERVICE_TYPE subserviceType,
38 CSSM_ATTACH_FLAGS attachFlags,
39 const CSSM_UPCALLS &inUpcalls)
40 : HandledObject(theHandle), plugin(plug), upcalls(inUpcalls)
41 {
42 // fill in passed flags
43 mVersion = version;
44 mSubserviceId = subserviceId;
45 mSubserviceType = subserviceType;
46 mAttachFlags = attachFlags;
47 }
48
49 PluginSession::~PluginSession()
50 {
51 }
52
53 void PluginSession::detach()
54 {
55 }
56
57
58 //
59 // Allocation management
60 //
61 void *PluginSession::malloc(size_t size) throw(std::bad_alloc)
62 {
63 if (void *addr = upcalls.malloc_func(handle(), size))
64 return addr;
65 CssmError::throwMe(CSSM_ERRCODE_MEMORY_ERROR);
66 }
67
68 void *PluginSession::realloc(void *oldAddr, size_t size) throw(std::bad_alloc)
69 {
70 if (void *addr = upcalls.realloc_func(handle(), oldAddr, size))
71 return addr;
72 CssmError::throwMe(CSSM_ERRCODE_MEMORY_ERROR);
73 }
74
75
76 //
77 // Dispatch events through the plugin module object.
78 // Subsystem ID and subservice type default to our own.
79 //
80
81 void PluginSession::sendCallback(CSSM_MODULE_EVENT event,
82 uint32 subId,
83 CSSM_SERVICE_TYPE serviceType) const
84 {
85 plugin.sendCallback(event,
86 (subId == uint32(-1)) ? mSubserviceId : subId,
87 serviceType ? serviceType : mSubserviceType);
88 }