PEP 55 Update license on source files to current license text and date
[tpot/pegasus/.git] / src / Pegasus / Client / CIMOperationResponseDecoder.h
1 //%2003////////////////////////////////////////////////////////////////////////
2 //
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.
7 //
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:
14 // 
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.
23 //
24 //==============================================================================
25 //
26 // Author: Mike Brasher (mbrasher@bmc.com)
27 //
28 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
29 //
30 //              Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33
34 #ifndef Pegasus_CIMOperationResponseDecoder_h
35 #define Pegasus_CIMOperationResponseDecoder_h
36
37 #include <fstream>
38 #include <Pegasus/Common/Config.h>
39 #include <Pegasus/Common/MessageQueue.h>
40 #include <Pegasus/Common/HTTPMessage.h>
41 #include <Pegasus/Common/CIMMessage.h>
42 #include <Pegasus/Common/ContentLanguages.h> // l10n
43 #include <Pegasus/Client/ClientAuthenticator.h>
44 #include <Pegasus/Client/CIMClientException.h>
45 #include <Pegasus/Client/Linkage.h>
46
47 PEGASUS_NAMESPACE_BEGIN
48
49 class XmlParser;
50
51 /**
52     This message is sent from the response decoder to the CIMClient, indicating
53     an error in issuing a CIM request.
54 */
55 class ClientExceptionMessage : public Message
56 {
57 public:
58     ClientExceptionMessage(Exception* clientException_)
59         :
60         Message(CLIENT_EXCEPTION_MESSAGE),
61         clientException(clientException_)
62     {
63     }
64
65     Exception* clientException;
66 };
67
68
69 /** This class receives HTTP messages and decodes them into CIM Operation 
70     Responses messages which it places on its output queue.
71 */
72 class PEGASUS_CLIENT_LINKAGE CIMOperationResponseDecoder : public MessageQueue
73 {
74 public:
75
76     /** Constuctor.
77         @param outputQueue queue to receive decoded HTTP messages.
78     */
79    CIMOperationResponseDecoder(
80         MessageQueue* outputQueue,
81         MessageQueue* encoderQueue,
82         ClientAuthenticator* authenticator,
83         Uint32 showInput);
84
85     /** Destructor. */
86     ~CIMOperationResponseDecoder();
87
88     /** Initializes the encoder queue */
89     void setEncoderQueue(MessageQueue* encoderQueue);
90
91     /** This method is called when a message is enqueued on this queue. */
92     virtual void handleEnqueue();
93
94 private:
95
96     void _handleHTTPMessage(
97         HTTPMessage* message);
98
99     void _handleMethodResponse(
100         char* content,
101         const ContentLanguages& contentLanguages);
102
103     CIMCreateClassResponseMessage* _decodeCreateClassResponse(
104         XmlParser& parser, const String& messageId);
105
106     CIMGetClassResponseMessage* _decodeGetClassResponse(
107         XmlParser& parser, const String& messageId);
108
109     CIMModifyClassResponseMessage* _decodeModifyClassResponse(
110         XmlParser& parser, const String& messageId);
111
112     CIMEnumerateClassNamesResponseMessage* _decodeEnumerateClassNamesResponse(
113         XmlParser& parser, const String& messageId);
114
115     CIMEnumerateClassesResponseMessage* _decodeEnumerateClassesResponse(
116         XmlParser& parser, const String& messageId);
117
118     CIMDeleteClassResponseMessage* _decodeDeleteClassResponse(
119         XmlParser& parser, const String& messageId);
120
121     CIMCreateInstanceResponseMessage* _decodeCreateInstanceResponse(
122         XmlParser& parser, const String& messageId);
123
124     CIMGetInstanceResponseMessage* _decodeGetInstanceResponse(
125         XmlParser& parser, const String& messageId);
126
127     CIMModifyInstanceResponseMessage* _decodeModifyInstanceResponse(
128         XmlParser& parser, const String& messageId);
129
130     CIMEnumerateInstanceNamesResponseMessage* _decodeEnumerateInstanceNamesResponse(
131         XmlParser& parser, const String& messageId);
132
133     CIMEnumerateInstancesResponseMessage* _decodeEnumerateInstancesResponse(
134         XmlParser& parser, const String& messageId);
135
136     CIMDeleteInstanceResponseMessage* _decodeDeleteInstanceResponse(
137         XmlParser& parser, const String& messageId);
138
139     CIMGetPropertyResponseMessage* _decodeGetPropertyResponse(
140         XmlParser& parser, const String& messageId);
141
142     CIMSetPropertyResponseMessage* _decodeSetPropertyResponse(
143         XmlParser& parser, const String& messageId);
144
145     CIMSetQualifierResponseMessage* _decodeSetQualifierResponse(
146         XmlParser& parser, const String& messageId);
147
148     CIMGetQualifierResponseMessage* _decodeGetQualifierResponse(
149         XmlParser& parser, const String& messageId);
150
151     CIMEnumerateQualifiersResponseMessage* _decodeEnumerateQualifiersResponse(
152         XmlParser& parser, const String& messageId);
153
154     CIMDeleteQualifierResponseMessage* _decodeDeleteQualifierResponse(
155         XmlParser& parser, const String& messageId);
156
157     CIMReferenceNamesResponseMessage* _decodeReferenceNamesResponse(
158         XmlParser& parser, const String& messageId);
159
160     CIMReferencesResponseMessage* _decodeReferencesResponse(
161         XmlParser& parser, const String& messageId);
162
163     CIMAssociatorNamesResponseMessage* _decodeAssociatorNamesResponse(
164         XmlParser& parser, const String& messageId);
165
166     CIMAssociatorsResponseMessage* _decodeAssociatorsResponse(
167         XmlParser& parser, const String& messageId);
168
169     CIMExecQueryResponseMessage* _decodeExecQueryResponse(
170         XmlParser& parser, const String& messageId);
171
172     CIMInvokeMethodResponseMessage* _decodeInvokeMethodResponse(
173         XmlParser& parser, const String& messageId, const String& methodName);
174
175     MessageQueue*        _outputQueue;
176
177     MessageQueue*        _encoderQueue;
178
179     ClientAuthenticator* _authenticator;
180
181     // Controls decoder client displays 1 = con, 2 = log display
182     Uint32               _showInput;
183 };
184
185 PEGASUS_NAMESPACE_END
186
187 #endif /* Pegasus_CIMOperationResponseDecoder_h */