PEP 55 Update license on source files to current license text and date
[tpot/pegasus/.git] / src / Pegasus / Server / BinaryMessageHandler.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 Day (mdday@us.ibm.com)
27 //
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>
43
44 PEGASUS_NAMESPACE_BEGIN
45
46 /** This class provides an in-process binary client interface, 
47     both for requests and responses. 
48 */
49
50 class PEGASUS_SERVER_LINKAGE BinaryMessageHandler : public MessageQueueService
51 {
52    public: 
53       typedef MessageQueueService Base;
54
55       BinaryMessageHandler(MessageQueueService *outputQueue);
56       ~BinaryMessageHandler();
57       
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);
62    protected:
63       static PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL handle_binary_message(void *);
64
65       // **** Request Messages **** //
66       
67       void handleCreateClassRequest(
68          AsyncOpNode *, 
69          CIMCreateClassRequestMessage *) throw();
70       
71       void handleGetClassRequest(
72          AsyncOpNode *,
73          CIMGetClassRequestMessage *) throw();
74       
75       void handleModifyClassRequest(
76          AsyncOpNode *, 
77          CIMModifyClassRequestMessage *) throw();
78       
79       void handleEnumerateClassNamesRequest(
80          AsyncOpNode *,
81          CIMEnumerateClassNamesRequestMessage *) throw();
82
83       void handleEnumerateClassesRequest(
84          AsyncOpNode *,
85          CIMEnumerateClassesRequestMessage *) throw();
86
87       void handleDeleteClassRequest(
88          AsyncOpNode *,
89          CIMDeleteClassRequestMessage *) throw();
90
91       void handleCreateInstanceRequest(
92          AsyncOpNode *,
93          CIMCreateInstanceRequestMessage *) throw();
94
95       void handleGetInstanceRequest(
96          AsyncOpNode *,
97          CIMGetInstanceRequestMessage *) throw();
98
99       void handleModifyInstanceRequest(
100          AsyncOpNode *,
101          CIMModifyInstanceRequestMessage *) throw();
102
103       void handleEnumerateInstanceNamesRequest(
104          AsyncOpNode *,
105          CIMEnumerateInstanceNamesRequestMessage *) throw();
106
107       void handleEnumerateInstancesRequest(
108          AsyncOpNode *,
109          CIMEnumerateInstancesRequestMessage *) throw();
110
111       void handleDeleteInstanceRequest(
112          AsyncOpNode *,
113          CIMDeleteInstanceRequestMessage *) throw();
114       
115       void handleSetQualifierRequest(
116          AsyncOpNode *,
117          CIMSetQualifierRequestMessage *) throw();
118       
119       void handleGetQualifierRequest(
120          AsyncOpNode *,
121          CIMGetQualifierRequestMessage *) throw();
122       
123       void handleEnumerateQualifiersRequest(
124          AsyncOpNode *,
125          CIMEnumerateQualifiersRequestMessage *) throw();
126       
127       void handleDeleteQualifiersRequest(
128          AsyncOpNode *,
129          CIMDeleteQualifierRequestMessage *) throw(); 
130       
131       void handleReferenceNamesRequest(
132          AsyncOpNode *,
133          CIMReferenceNamesRequestMessage *) throw(); 
134
135       void handleReferencesRequest(
136          AsyncOpNode *,
137          CIMReferencesRequestMessage *) throw(); 
138
139       void handleAssociatorNamesRequest(
140          AsyncOpNode *,
141          CIMAssociatorNamesRequestMessage *) throw(); 
142
143       void handleAssociatorsRequest(
144          AsyncOpNode *,
145          CIMAssociatorsRequestMessage *) throw();  
146
147       void handleGetPropertyRequest(
148          AsyncOpNode *,
149          CIMGetPropertyRequestMessage *) throw(); 
150
151       void handleSetPropertyRequest(
152          AsyncOpNode *,
153          CIMSetPropertyRequestMessage *) throw();  
154
155       void handleExecQueryRequest(
156          AsyncOpNode *,
157          CIMExecQueryRequestMessage *) throw();  
158
159       void handleInvokeMethodRequest(
160          AsyncOpNode *,
161          CIMInvokeMethodRequestMessage *) throw(); 
162       
163       // **** Response Messages **** //
164       
165       void handleCreateClassResponse(
166          AsyncOpNode *,
167          CIMCreateClassResponseMessage *) throw(); 
168
169       void handleGetClassResponse(
170          AsyncOpNode *,
171          CIMGetClassResponseMessage *) throw(); 
172
173       void handleModifyClassResponse(
174          AsyncOpNode *,
175          CIMModifyClassResponseMessage *) throw(); 
176       
177       void handleEnumerateClassNamesResponse(
178          AsyncOpNode *,
179          CIMEnumerateClassNamesResponseMessage *) throw(); 
180
181       void handleEnumerateClassesResponse(
182          AsyncOpNode *,
183          CIMEnumerateClassesResponseMessage *) throw(); 
184
185       void handleDeleteClassResponse(
186          AsyncOpNode *,
187          CIMDeleteClassResponseMessage *) throw(); 
188
189       void handleCreateInstanceResponse(
190          AsyncOpNode *,
191          CIMCreateInstanceResponseMessage *) throw(); 
192
193       void handleGetInstanceResponse(
194          AsyncOpNode *,
195          CIMGetInstanceResponseMessage *) throw(); 
196
197       void handleModifyInstanceResponse(
198          AsyncOpNode *,
199          CIMModifyInstanceResponseMessage *) throw(); 
200
201       void handleEnumerateInstanceNamesResponse(
202          AsyncOpNode *,
203          CIMEnumerateInstanceNamesResponseMessage *) throw(); 
204
205       void handleEnumerateInstancesResponse(
206          AsyncOpNode *,
207          CIMEnumerateInstancesResponseMessage *) throw(); 
208
209       void handleDeleteInstanceResponse(
210          AsyncOpNode *,
211          CIMDeleteInstanceResponseMessage *) throw(); 
212
213       void handleGetPropertyResponse(
214          AsyncOpNode *,
215          CIMGetPropertyResponseMessage *) throw(); 
216
217       void handleSetPropertyResponse(
218          AsyncOpNode *,
219          CIMSetPropertyResponseMessage *) throw(); 
220       
221       void handleSetQualifierResponse(
222          AsyncOpNode *,
223          CIMSetQualifierResponseMessage *) throw(); 
224
225       void handleGetQualifierResponse(
226          AsyncOpNode *,
227          CIMGetQualifierResponseMessage *) throw(); 
228       
229       void handleEnumerateQualifiersResponse(
230          AsyncOpNode *,
231          CIMEnumerateQualifiersResponseMessage *) throw(); 
232
233       void handleDeleteQualifierResponse(
234          AsyncOpNode *,
235          CIMDeleteQualifierResponseMessage *) throw(); 
236
237       void handleReferenceNamesResponse(
238          AsyncOpNode *,
239          CIMReferenceNamesResponseMessage *) throw(); 
240
241       void handleReferencesResponse(
242          AsyncOpNode *,
243          CIMReferencesResponseMessage *) throw(); 
244
245       void handleAssociatorNamesResponse(
246          AsyncOpNode *,
247          CIMAssociatorNamesResponseMessage *) throw();  
248
249       void handleAssociatorsResponse(
250          AsyncOpNode *,
251          CIMAssociatorsResponseMessage *) throw();
252
253       void handleExecQueryResponse(
254          AsyncOpNode *,
255          CIMExecQueryResponseMessage *) throw();
256       
257       void handleInvokeMethodResponse(
258          AsyncOpNode *,
259          CIMInvokeMethodResponseMessage *) throw();
260       
261    private:
262       BinaryMessageHandler(void);
263       BinaryMessageHandler & operator = (const BinaryMessageHandler & ) const;
264       void _handleRequest(AsyncOpNode *, Message *) throw();
265       void _handleResponse(AsyncOpNode *, Message *) throw();
266       
267
268       MessageQueueService* _outputQueue;
269
270       // Flag to indicate whether or not the CIMServer is shutting down.
271       Boolean _serverTerminating;
272       AsyncDQueue<AsyncOpNode> _msg_q;
273       
274 };
275
276
277 PEGASUS_NAMESPACE_END
278
279 #endif // Pegasus_BinaryMessageHandler_h