1 //%2003////////////////////////////////////////////////////////////////////////
3 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development
4 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to
10 // deal in the Software without restriction, including without limitation the
11 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
12 // sell copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
15 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
16 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
17 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
18 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
20 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 //==============================================================================
26 // Author: Mike Day (mdday@us.ibm.com)
28 //%/////////////////////////////////////////////////////////////////////////////
29 #ifndef Pegasus_BinaryMessageHandler_h
30 #define Pegasus_BinaryMessageHandler_h
31 #include <Pegasus/Common/Config.h>
32 #include <Pegasus/Common/AsyncOpNode.h>
33 #include <Pegasus/Common/DQueue.h>
34 #include <Pegasus/Common/MessageQueueService.h>
35 #include <Pegasus/Common/Message.h>
36 #include <Pegasus/Common/CIMMessage.h>
37 #include <Pegasus/Common/Tracer.h>
38 #include <Pegasus/Common/TraceComponents.h>
39 #include <Pegasus/Common/IPC.h>
40 #include <Pegasus/Common/Thread.h>
41 #include <Pegasus/Common/Constants.h>
42 #include <Pegasus/Server/Linkage.h>
44 PEGASUS_NAMESPACE_BEGIN
46 /** This class provides an in-process binary client interface,
47 both for requests and responses.
50 class PEGASUS_SERVER_LINKAGE BinaryMessageHandler : public MessageQueueService
53 typedef MessageQueueService Base;
55 BinaryMessageHandler(MessageQueueService *outputQueue);
56 ~BinaryMessageHandler();
58 virtual Boolean messageOK(const Message * message);
59 virtual void handleEnqueue(void);
60 virtual void handleEnqueue(Message * message);
61 virtual void _handle_async_request(AsyncRequest * request);
63 static PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL handle_binary_message(void *);
65 // **** Request Messages **** //
67 void handleCreateClassRequest(
69 CIMCreateClassRequestMessage *) throw();
71 void handleGetClassRequest(
73 CIMGetClassRequestMessage *) throw();
75 void handleModifyClassRequest(
77 CIMModifyClassRequestMessage *) throw();
79 void handleEnumerateClassNamesRequest(
81 CIMEnumerateClassNamesRequestMessage *) throw();
83 void handleEnumerateClassesRequest(
85 CIMEnumerateClassesRequestMessage *) throw();
87 void handleDeleteClassRequest(
89 CIMDeleteClassRequestMessage *) throw();
91 void handleCreateInstanceRequest(
93 CIMCreateInstanceRequestMessage *) throw();
95 void handleGetInstanceRequest(
97 CIMGetInstanceRequestMessage *) throw();
99 void handleModifyInstanceRequest(
101 CIMModifyInstanceRequestMessage *) throw();
103 void handleEnumerateInstanceNamesRequest(
105 CIMEnumerateInstanceNamesRequestMessage *) throw();
107 void handleEnumerateInstancesRequest(
109 CIMEnumerateInstancesRequestMessage *) throw();
111 void handleDeleteInstanceRequest(
113 CIMDeleteInstanceRequestMessage *) throw();
115 void handleSetQualifierRequest(
117 CIMSetQualifierRequestMessage *) throw();
119 void handleGetQualifierRequest(
121 CIMGetQualifierRequestMessage *) throw();
123 void handleEnumerateQualifiersRequest(
125 CIMEnumerateQualifiersRequestMessage *) throw();
127 void handleDeleteQualifiersRequest(
129 CIMDeleteQualifierRequestMessage *) throw();
131 void handleReferenceNamesRequest(
133 CIMReferenceNamesRequestMessage *) throw();
135 void handleReferencesRequest(
137 CIMReferencesRequestMessage *) throw();
139 void handleAssociatorNamesRequest(
141 CIMAssociatorNamesRequestMessage *) throw();
143 void handleAssociatorsRequest(
145 CIMAssociatorsRequestMessage *) throw();
147 void handleGetPropertyRequest(
149 CIMGetPropertyRequestMessage *) throw();
151 void handleSetPropertyRequest(
153 CIMSetPropertyRequestMessage *) throw();
155 void handleExecQueryRequest(
157 CIMExecQueryRequestMessage *) throw();
159 void handleInvokeMethodRequest(
161 CIMInvokeMethodRequestMessage *) throw();
163 // **** Response Messages **** //
165 void handleCreateClassResponse(
167 CIMCreateClassResponseMessage *) throw();
169 void handleGetClassResponse(
171 CIMGetClassResponseMessage *) throw();
173 void handleModifyClassResponse(
175 CIMModifyClassResponseMessage *) throw();
177 void handleEnumerateClassNamesResponse(
179 CIMEnumerateClassNamesResponseMessage *) throw();
181 void handleEnumerateClassesResponse(
183 CIMEnumerateClassesResponseMessage *) throw();
185 void handleDeleteClassResponse(
187 CIMDeleteClassResponseMessage *) throw();
189 void handleCreateInstanceResponse(
191 CIMCreateInstanceResponseMessage *) throw();
193 void handleGetInstanceResponse(
195 CIMGetInstanceResponseMessage *) throw();
197 void handleModifyInstanceResponse(
199 CIMModifyInstanceResponseMessage *) throw();
201 void handleEnumerateInstanceNamesResponse(
203 CIMEnumerateInstanceNamesResponseMessage *) throw();
205 void handleEnumerateInstancesResponse(
207 CIMEnumerateInstancesResponseMessage *) throw();
209 void handleDeleteInstanceResponse(
211 CIMDeleteInstanceResponseMessage *) throw();
213 void handleGetPropertyResponse(
215 CIMGetPropertyResponseMessage *) throw();
217 void handleSetPropertyResponse(
219 CIMSetPropertyResponseMessage *) throw();
221 void handleSetQualifierResponse(
223 CIMSetQualifierResponseMessage *) throw();
225 void handleGetQualifierResponse(
227 CIMGetQualifierResponseMessage *) throw();
229 void handleEnumerateQualifiersResponse(
231 CIMEnumerateQualifiersResponseMessage *) throw();
233 void handleDeleteQualifierResponse(
235 CIMDeleteQualifierResponseMessage *) throw();
237 void handleReferenceNamesResponse(
239 CIMReferenceNamesResponseMessage *) throw();
241 void handleReferencesResponse(
243 CIMReferencesResponseMessage *) throw();
245 void handleAssociatorNamesResponse(
247 CIMAssociatorNamesResponseMessage *) throw();
249 void handleAssociatorsResponse(
251 CIMAssociatorsResponseMessage *) throw();
253 void handleExecQueryResponse(
255 CIMExecQueryResponseMessage *) throw();
257 void handleInvokeMethodResponse(
259 CIMInvokeMethodResponseMessage *) throw();
262 BinaryMessageHandler(void);
263 BinaryMessageHandler & operator = (const BinaryMessageHandler & ) const;
264 void _handleRequest(AsyncOpNode *, Message *) throw();
265 void _handleResponse(AsyncOpNode *, Message *) throw();
268 MessageQueueService* _outputQueue;
270 // Flag to indicate whether or not the CIMServer is shutting down.
271 Boolean _serverTerminating;
272 AsyncDQueue<AsyncOpNode> _msg_q;
277 PEGASUS_NAMESPACE_END
279 #endif // Pegasus_BinaryMessageHandler_h