HP-RK Changed the MessageQueue::getQueueName() method from virtual to non-virtual...
[tpot/pegasus/.git] / src / Pegasus / Server / CIMOperationRequestDecoder.h
1 //%//////-*-c++-*-//////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM,
4 // The Open Group, Tivoli Systems
5 //
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:
12 // 
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.
21 //
22 //==============================================================================
23 //
24 // Author: Mike Brasher (mbrasher@bmc.com)
25 //
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)
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33
34 #ifndef Pegasus_CIMOperationRequestDecoder_h
35 #define Pegasus_CIMOperationRequestDecoder_h
36
37 #include <Pegasus/Common/Config.h>
38 #include <Pegasus/Common/MessageQueueService.h>
39 #include <Pegasus/Common/CIMMessage.h>
40 #include <Pegasus/Common/HTTPMessage.h>
41
42 PEGASUS_NAMESPACE_BEGIN
43
44 class XmlParser;
45
46 /** This class decodes CIM operation requests and passes them down-stream.
47  */
48 class CIMOperationRequestDecoder : public MessageQueueService
49 {
50    public:
51       typedef MessageQueueService Base;
52     
53       CIMOperationRequestDecoder(
54          MessageQueueService* outputQueue,
55          Uint32 returnQueueId);
56
57       ~CIMOperationRequestDecoder();
58
59       void sendResponse(
60          Uint32 queueId, 
61          Array<Sint8>& message);
62
63       void sendIMethodError(
64          Uint32 queueId, 
65          const String& messageId,
66          const String& methodName,
67          const CIMException& cimException);
68
69       void sendMethodError(
70          Uint32 queueId, 
71          const String& messageId,
72          const String& methodName,
73          const CIMException& cimException);
74
75       void sendHttpError(
76          Uint32 queueId, 
77          const String& status,
78          const String& cimError = String::EMPTY,
79          const String& messageBody = String::EMPTY);
80
81       virtual void handleEnqueue(Message *);
82
83       virtual void handleEnqueue();
84
85       void handleHTTPMessage(HTTPMessage* httpMessage);
86
87       void handleMethodCall(
88          Uint32 queueId,
89          Sint8* content,
90          const String& cimProtocolVersionInHeader,
91          const String& cimMethodInHeader,
92          const String& cimObjectInHeader,
93          String authType,
94          String userName);
95
96       CIMCreateClassRequestMessage* decodeCreateClassRequest(
97          Uint32 queueId,
98          XmlParser& parser, 
99          const String& messageId,
100          const String& nameSpace,
101          const String& authType,
102          const String& userName);
103
104
105       CIMGetClassRequestMessage* decodeGetClassRequest(
106          Uint32 queueId,
107          XmlParser& parser, 
108          const String& messageId,
109          const String& nameSpace,
110          const String& authType,
111          const String& userName);
112
113       CIMModifyClassRequestMessage* decodeModifyClassRequest(
114          Uint32 queueId,
115          XmlParser& parser, 
116          const String& messageId,
117          const String& nameSpace,
118          const String& authType,
119          const String& userName);
120
121       CIMEnumerateClassNamesRequestMessage* decodeEnumerateClassNamesRequest(
122          Uint32 queueId,
123          XmlParser& parser, 
124          const String& messageId,
125          const String& nameSpace,
126          const String& authType,
127          const String& userName);
128
129       CIMEnumerateClassesRequestMessage* decodeEnumerateClassesRequest(
130          Uint32 queueId,
131          XmlParser& parser, 
132          const String& messageId,
133          const String& nameSpace,
134          const String& authType,
135          const String& userName);
136
137       CIMDeleteClassRequestMessage* decodeDeleteClassRequest(
138          Uint32 queueId,
139          XmlParser& parser, 
140          const String& messageId,
141          const String& nameSpace,
142          const String& authType,
143          const String& userName);
144
145       CIMCreateInstanceRequestMessage* decodeCreateInstanceRequest(
146          Uint32 queueId,
147          XmlParser& parser, 
148          const String& messageId,
149          const String& nameSpace,
150          const String& authType,
151          const String& userName);
152
153       CIMGetInstanceRequestMessage* decodeGetInstanceRequest(
154          Uint32 queueId,
155          XmlParser& parser, 
156          const String& messageId,
157          const String& nameSpace,
158          const String& authType,
159          const String& userName);
160
161       CIMModifyInstanceRequestMessage* decodeModifyInstanceRequest(
162          Uint32 queueId,
163          XmlParser& parser, 
164          const String& messageId,
165          const String& nameSpace,
166          const String& authType,
167          const String& userName);
168
169       CIMEnumerateInstanceNamesRequestMessage* decodeEnumerateInstanceNamesRequest(
170          Uint32 queueId,
171          XmlParser& parser, 
172          const String& messageId,
173          const String& nameSpace,
174          const String& authType,
175          const String& userName);
176
177       CIMEnumerateInstancesRequestMessage* decodeEnumerateInstancesRequest(
178          Uint32 queueId,
179          XmlParser& parser, 
180          const String& messageId,
181          const String& nameSpace,
182          const String& authType,
183          const String& userName);
184
185       CIMDeleteInstanceRequestMessage* decodeDeleteInstanceRequest(
186          Uint32 queueId,
187          XmlParser& parser, 
188          const String& messageId,
189          const String& nameSpace,
190          const String& authType,
191          const String& userName);
192
193       CIMSetQualifierRequestMessage* decodeSetQualifierRequest(
194          Uint32 queueId,
195          XmlParser& parser, 
196          const String& messageId,
197          const String& nameSpace,
198          const String& authType,
199          const String& userName);
200
201       CIMGetQualifierRequestMessage* decodeGetQualifierRequest(
202          Uint32 queueId,
203          XmlParser& parser, 
204          const String& messageId,
205          const String& nameSpace,
206          const String& authType,
207          const String& userName);
208
209       CIMEnumerateQualifiersRequestMessage* decodeEnumerateQualifiersRequest(
210          Uint32 queueId,
211          XmlParser& parser, 
212          const String& messageId,
213          const String& nameSpace,
214          const String& authType,
215          const String& userName);
216
217       CIMDeleteQualifierRequestMessage* decodeDeleteQualifierRequest(
218          Uint32 queueId,
219          XmlParser& parser, 
220          const String& messageId,
221          const String& nameSpace,
222          const String& authType,
223          const String& userName);
224
225       CIMReferenceNamesRequestMessage* decodeReferenceNamesRequest(
226          Uint32 queueId,
227          XmlParser& parser, 
228          const String& messageId,
229          const String& nameSpace,
230          const String& authType,
231          const String& userName);
232
233       CIMReferencesRequestMessage* decodeReferencesRequest(
234          Uint32 queueId,
235          XmlParser& parser, 
236          const String& messageId,
237          const String& nameSpace,
238          const String& authType,
239          const String& userName);
240
241       CIMAssociatorNamesRequestMessage* decodeAssociatorNamesRequest(
242          Uint32 queueId,
243          XmlParser& parser, 
244          const String& messageId,
245          const String& nameSpace,
246          const String& authType,
247          const String& userName);
248
249       CIMAssociatorsRequestMessage* decodeAssociatorsRequest(
250          Uint32 queueId,
251          XmlParser& parser, 
252          const String& messageId,
253          const String& nameSpace,
254          const String& authType,
255          const String& userName);
256
257       CIMGetPropertyRequestMessage* decodeGetPropertyRequest(
258          Uint32 queueId,
259          XmlParser& parser, 
260          const String& messageId,
261          const String& nameSpace,
262          const String& authType,
263          const String& userName);
264
265       CIMSetPropertyRequestMessage* decodeSetPropertyRequest(
266          Uint32 queueId,
267          XmlParser& parser, 
268          const String& messageId,
269          const String& nameSpace,
270          const String& authType,
271          const String& userName);
272
273       CIMExecQueryRequestMessage* decodeExecQueryRequest(
274          Uint32 queueId,
275          XmlParser& parser, 
276          const String& messageId,
277          const String& nameSpace,
278          const String& authType,
279          const String& userName);
280
281       CIMInvokeMethodRequestMessage* decodeInvokeMethodRequest(
282          Uint32 queueId,
283          XmlParser& parser, 
284          const String& messageId,
285          const CIMReference& reference,
286          const String& cimMethodName,
287          const String& authType,
288          const String& userName);
289         
290       /** Sets the flag to indicate whether or not the CIMServer is 
291           shutting down.
292       */
293       void setServerTerminating(Boolean flag);
294
295    private:
296
297       MessageQueueService* _outputQueue;
298
299       // Queue where responses should be enqueued.
300       Uint32 _returnQueueId;
301
302       // Flag to indicate whether or not the CIMServer is shutting down.
303       Boolean _serverTerminating;
304 };
305
306 PEGASUS_NAMESPACE_END
307
308 #endif /* Pegasus_CIMOperationRequestDecoder_h */