1 //%//////-*-c++-*-//////////////////////////////////////////////////////////////
3 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM,
4 // The Open Group, Tivoli Systems
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to
8 // deal in the Software without restriction, including without limitation the
9 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 // sell copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
13 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
14 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
15 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
16 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 //==============================================================================
24 // Author: Mike Brasher (mbrasher@bmc.com)
26 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
27 // Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
28 // Jenny Yu, Hewlett-Packard Company (jenny_yu@hp.com)
29 // Sushma Fernandes, Hewlett-Packard Company
30 // (sushma_fernandes@hp.com)
32 //%/////////////////////////////////////////////////////////////////////////////
34 #ifndef Pegasus_CIMOperationRequestDecoder_h
35 #define Pegasus_CIMOperationRequestDecoder_h
37 #include <Pegasus/Common/Config.h>
38 #include <Pegasus/Common/MessageQueueService.h>
39 #include <Pegasus/Common/CIMMessage.h>
40 #include <Pegasus/Common/HTTPMessage.h>
42 PEGASUS_NAMESPACE_BEGIN
46 /** This class decodes CIM operation requests and passes them down-stream.
48 class CIMOperationRequestDecoder : public MessageQueueService
51 typedef MessageQueueService Base;
53 CIMOperationRequestDecoder(
54 MessageQueueService* outputQueue,
55 Uint32 returnQueueId);
57 ~CIMOperationRequestDecoder();
61 Array<Sint8>& message);
63 void sendIMethodError(
65 const String& messageId,
66 const String& methodName,
67 const CIMException& cimException);
71 const String& messageId,
72 const String& methodName,
73 const CIMException& cimException);
78 const String& cimError = String::EMPTY,
79 const String& messageBody = String::EMPTY);
81 virtual void handleEnqueue(Message *);
83 virtual void handleEnqueue();
85 void handleHTTPMessage(HTTPMessage* httpMessage);
87 void handleMethodCall(
90 const String& cimProtocolVersionInHeader,
91 const String& cimMethodInHeader,
92 const String& cimObjectInHeader,
96 CIMCreateClassRequestMessage* decodeCreateClassRequest(
99 const String& messageId,
100 const String& nameSpace,
101 const String& authType,
102 const String& userName);
105 CIMGetClassRequestMessage* decodeGetClassRequest(
108 const String& messageId,
109 const String& nameSpace,
110 const String& authType,
111 const String& userName);
113 CIMModifyClassRequestMessage* decodeModifyClassRequest(
116 const String& messageId,
117 const String& nameSpace,
118 const String& authType,
119 const String& userName);
121 CIMEnumerateClassNamesRequestMessage* decodeEnumerateClassNamesRequest(
124 const String& messageId,
125 const String& nameSpace,
126 const String& authType,
127 const String& userName);
129 CIMEnumerateClassesRequestMessage* decodeEnumerateClassesRequest(
132 const String& messageId,
133 const String& nameSpace,
134 const String& authType,
135 const String& userName);
137 CIMDeleteClassRequestMessage* decodeDeleteClassRequest(
140 const String& messageId,
141 const String& nameSpace,
142 const String& authType,
143 const String& userName);
145 CIMCreateInstanceRequestMessage* decodeCreateInstanceRequest(
148 const String& messageId,
149 const String& nameSpace,
150 const String& authType,
151 const String& userName);
153 CIMGetInstanceRequestMessage* decodeGetInstanceRequest(
156 const String& messageId,
157 const String& nameSpace,
158 const String& authType,
159 const String& userName);
161 CIMModifyInstanceRequestMessage* decodeModifyInstanceRequest(
164 const String& messageId,
165 const String& nameSpace,
166 const String& authType,
167 const String& userName);
169 CIMEnumerateInstanceNamesRequestMessage* decodeEnumerateInstanceNamesRequest(
172 const String& messageId,
173 const String& nameSpace,
174 const String& authType,
175 const String& userName);
177 CIMEnumerateInstancesRequestMessage* decodeEnumerateInstancesRequest(
180 const String& messageId,
181 const String& nameSpace,
182 const String& authType,
183 const String& userName);
185 CIMDeleteInstanceRequestMessage* decodeDeleteInstanceRequest(
188 const String& messageId,
189 const String& nameSpace,
190 const String& authType,
191 const String& userName);
193 CIMSetQualifierRequestMessage* decodeSetQualifierRequest(
196 const String& messageId,
197 const String& nameSpace,
198 const String& authType,
199 const String& userName);
201 CIMGetQualifierRequestMessage* decodeGetQualifierRequest(
204 const String& messageId,
205 const String& nameSpace,
206 const String& authType,
207 const String& userName);
209 CIMEnumerateQualifiersRequestMessage* decodeEnumerateQualifiersRequest(
212 const String& messageId,
213 const String& nameSpace,
214 const String& authType,
215 const String& userName);
217 CIMDeleteQualifierRequestMessage* decodeDeleteQualifierRequest(
220 const String& messageId,
221 const String& nameSpace,
222 const String& authType,
223 const String& userName);
225 CIMReferenceNamesRequestMessage* decodeReferenceNamesRequest(
228 const String& messageId,
229 const String& nameSpace,
230 const String& authType,
231 const String& userName);
233 CIMReferencesRequestMessage* decodeReferencesRequest(
236 const String& messageId,
237 const String& nameSpace,
238 const String& authType,
239 const String& userName);
241 CIMAssociatorNamesRequestMessage* decodeAssociatorNamesRequest(
244 const String& messageId,
245 const String& nameSpace,
246 const String& authType,
247 const String& userName);
249 CIMAssociatorsRequestMessage* decodeAssociatorsRequest(
252 const String& messageId,
253 const String& nameSpace,
254 const String& authType,
255 const String& userName);
257 CIMGetPropertyRequestMessage* decodeGetPropertyRequest(
260 const String& messageId,
261 const String& nameSpace,
262 const String& authType,
263 const String& userName);
265 CIMSetPropertyRequestMessage* decodeSetPropertyRequest(
268 const String& messageId,
269 const String& nameSpace,
270 const String& authType,
271 const String& userName);
273 CIMExecQueryRequestMessage* decodeExecQueryRequest(
276 const String& messageId,
277 const String& nameSpace,
278 const String& authType,
279 const String& userName);
281 CIMInvokeMethodRequestMessage* decodeInvokeMethodRequest(
284 const String& messageId,
285 const CIMReference& reference,
286 const String& cimMethodName,
287 const String& authType,
288 const String& userName);
290 /** Sets the flag to indicate whether or not the CIMServer is
293 void setServerTerminating(Boolean flag);
297 MessageQueueService* _outputQueue;
299 // Queue where responses should be enqueued.
300 Uint32 _returnQueueId;
302 // Flag to indicate whether or not the CIMServer is shutting down.
303 Boolean _serverTerminating;
306 PEGASUS_NAMESPACE_END
308 #endif /* Pegasus_CIMOperationRequestDecoder_h */