9 mday 1.2 //
10 // Permission is hereby granted, free of charge, to any person obtaining a copy
11 // of this software and associated documentation files (the "Software"), to
12 // deal in the Software without restriction, including without limitation the
13 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
14 // sell copies of the Software, and to permit persons to whom the Software is
15 // furnished to do so, subject to the following conditions:
16 //
17 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
18 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
19 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
20 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
21 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
22 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
23 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 //
26 //==============================================================================
27 //
28 // Author: Mike Day (mdday@us.ibm.com)
29 //
30 mday 1.2 //%/////////////////////////////////////////////////////////////////////////////
31 #ifndef Pegasus_BinaryMessageHandler_h
32 #define Pegasus_BinaryMessageHandler_h
33 #include <Pegasus/Common/Config.h>
34 #include <Pegasus/Common/AsyncOpNode.h>
35 #include <Pegasus/Common/DQueue.h>
36 #include <Pegasus/Common/MessageQueueService.h>
37 #include <Pegasus/Common/Message.h>
38 #include <Pegasus/Common/CIMMessage.h>
39 #include <Pegasus/Common/Tracer.h>
40 #include <Pegasus/Common/TraceComponents.h>
41 #include <Pegasus/Common/IPC.h>
42 #include <Pegasus/Common/Thread.h>
43 #include <Pegasus/Common/Constants.h>
44 #include <Pegasus/Server/Linkage.h>
45
46 PEGASUS_NAMESPACE_BEGIN
47
48 /** This class provides an in-process binary client interface,
49 both for requests and responses.
50 */
51 mday 1.2
52 class PEGASUS_SERVER_LINKAGE BinaryMessageHandler : public MessageQueueService
53 {
54 public:
55 typedef MessageQueueService Base;
56
57 BinaryMessageHandler(MessageQueueService *outputQueue);
58 ~BinaryMessageHandler();
59
60 virtual Boolean messageOK(const Message * message);
61 virtual void handleEnqueue(void);
62 virtual void handleEnqueue(Message * message);
63 virtual void _handle_async_request(AsyncRequest * request);
64 protected:
65 static PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL handle_binary_message(void *);
66
67 // **** Request Messages **** //
68
69 void handleCreateClassRequest(
70 AsyncOpNode *,
71 CIMCreateClassRequestMessage *) throw();
72 mday 1.2
73 void handleGetClassRequest(
74 AsyncOpNode *,
75 CIMGetClassRequestMessage *) throw();
76
77 void handleModifyClassRequest(
78 AsyncOpNode *,
79 CIMModifyClassRequestMessage *) throw();
80
81 void handleEnumerateClassNamesRequest(
82 AsyncOpNode *,
83 CIMEnumerateClassNamesRequestMessage *) throw();
84
85 void handleEnumerateClassesRequest(
86 AsyncOpNode *,
87 CIMEnumerateClassesRequestMessage *) throw();
88
89 void handleDeleteClassRequest(
90 AsyncOpNode *,
91 CIMDeleteClassRequestMessage *) throw();
92
93 mday 1.2 void handleCreateInstanceRequest(
94 AsyncOpNode *,
95 CIMCreateInstanceRequestMessage *) throw();
96
97 void handleGetInstanceRequest(
98 AsyncOpNode *,
99 CIMGetInstanceRequestMessage *) throw();
100
101 void handleModifyInstanceRequest(
102 AsyncOpNode *,
103 CIMModifyInstanceRequestMessage *) throw();
104
105 void handleEnumerateInstanceNamesRequest(
106 AsyncOpNode *,
107 CIMEnumerateInstanceNamesRequestMessage *) throw();
108
109 void handleEnumerateInstancesRequest(
110 AsyncOpNode *,
111 CIMEnumerateInstancesRequestMessage *) throw();
112
113 void handleDeleteInstanceRequest(
114 mday 1.2 AsyncOpNode *,
115 CIMDeleteInstanceRequestMessage *) throw();
116
117 void handleSetQualifierRequest(
118 AsyncOpNode *,
119 CIMSetQualifierRequestMessage *) throw();
120
121 void handleGetQualifierRequest(
122 AsyncOpNode *,
123 CIMGetQualifierRequestMessage *) throw();
124
125 void handleEnumerateQualifiersRequest(
126 AsyncOpNode *,
127 CIMEnumerateQualifiersRequestMessage *) throw();
128
129 void handleDeleteQualifiersRequest(
130 AsyncOpNode *,
131 CIMDeleteQualifierRequestMessage *) throw();
132
133 void handleReferenceNamesRequest(
134 AsyncOpNode *,
135 mday 1.2 CIMReferenceNamesRequestMessage *) throw();
136
137 void handleReferencesRequest(
138 AsyncOpNode *,
139 CIMReferencesRequestMessage *) throw();
140
141 void handleAssociatorNamesRequest(
142 AsyncOpNode *,
143 CIMAssociatorNamesRequestMessage *) throw();
144
145 void handleAssociatorsRequest(
146 AsyncOpNode *,
147 CIMAssociatorsRequestMessage *) throw();
148
149 void handleGetPropertyRequest(
150 AsyncOpNode *,
151 CIMGetPropertyRequestMessage *) throw();
152
153 void handleSetPropertyRequest(
154 AsyncOpNode *,
155 CIMSetPropertyRequestMessage *) throw();
156 mday 1.2
157 void handleExecQueryRequest(
158 AsyncOpNode *,
159 CIMExecQueryRequestMessage *) throw();
160
161 void handleInvokeMethodRequest(
162 AsyncOpNode *,
163 CIMInvokeMethodRequestMessage *) throw();
164
165 // **** Response Messages **** //
166
167 void handleCreateClassResponse(
168 AsyncOpNode *,
169 CIMCreateClassResponseMessage *) throw();
170
171 void handleGetClassResponse(
172 AsyncOpNode *,
173 CIMGetClassResponseMessage *) throw();
174
175 void handleModifyClassResponse(
176 AsyncOpNode *,
177 mday 1.2 CIMModifyClassResponseMessage *) throw();
178
179 void handleEnumerateClassNamesResponse(
180 AsyncOpNode *,
181 CIMEnumerateClassNamesResponseMessage *) throw();
182
183 void handleEnumerateClassesResponse(
184 AsyncOpNode *,
185 CIMEnumerateClassesResponseMessage *) throw();
186
187 void handleDeleteClassResponse(
188 AsyncOpNode *,
189 CIMDeleteClassResponseMessage *) throw();
190
191 void handleCreateInstanceResponse(
192 AsyncOpNode *,
193 CIMCreateInstanceResponseMessage *) throw();
194
195 void handleGetInstanceResponse(
196 AsyncOpNode *,
197 CIMGetInstanceResponseMessage *) throw();
198 mday 1.2
199 void handleModifyInstanceResponse(
200 AsyncOpNode *,
201 CIMModifyInstanceResponseMessage *) throw();
202
203 void handleEnumerateInstanceNamesResponse(
204 AsyncOpNode *,
205 CIMEnumerateInstanceNamesResponseMessage *) throw();
206
207 void handleEnumerateInstancesResponse(
208 AsyncOpNode *,
209 CIMEnumerateInstancesResponseMessage *) throw();
210
211 void handleDeleteInstanceResponse(
212 AsyncOpNode *,
213 CIMDeleteInstanceResponseMessage *) throw();
214
215 void handleGetPropertyResponse(
216 AsyncOpNode *,
217 CIMGetPropertyResponseMessage *) throw();
218
219 mday 1.2 void handleSetPropertyResponse(
220 AsyncOpNode *,
221 CIMSetPropertyResponseMessage *) throw();
222
223 void handleSetQualifierResponse(
224 AsyncOpNode *,
225 CIMSetQualifierResponseMessage *) throw();
226
227 void handleGetQualifierResponse(
228 AsyncOpNode *,
229 CIMGetQualifierResponseMessage *) throw();
230
231 void handleEnumerateQualifiersResponse(
232 AsyncOpNode *,
233 CIMEnumerateQualifiersResponseMessage *) throw();
234
235 void handleDeleteQualifierResponse(
236 AsyncOpNode *,
237 CIMDeleteQualifierResponseMessage *) throw();
238
239 void handleReferenceNamesResponse(
240 mday 1.2 AsyncOpNode *,
241 CIMReferenceNamesResponseMessage *) throw();
242
243 void handleReferencesResponse(
244 AsyncOpNode *,
245 CIMReferencesResponseMessage *) throw();
246
247 void handleAssociatorNamesResponse(
248 AsyncOpNode *,
249 CIMAssociatorNamesResponseMessage *) throw();
250
251 void handleAssociatorsResponse(
252 AsyncOpNode *,
253 CIMAssociatorsResponseMessage *) throw();
254
255 void handleExecQueryResponse(
256 AsyncOpNode *,
257 CIMExecQueryResponseMessage *) throw();
258
259 void handleInvokeMethodResponse(
260 AsyncOpNode *,
261 mday 1.2 CIMInvokeMethodResponseMessage *) throw();
262
263 private:
264 BinaryMessageHandler(void);
265 BinaryMessageHandler & operator = (const BinaryMessageHandler & ) const;
266 void _handleRequest(AsyncOpNode *, Message *) throw();
267 void _handleResponse(AsyncOpNode *, Message *) throw();
268
269
270 MessageQueueService* _outputQueue;
271
272 // Flag to indicate whether or not the CIMServer is shutting down.
273 Boolean _serverTerminating;
274 AsyncDQueue<AsyncOpNode> _msg_q;
275
276 };
277
278
279 PEGASUS_NAMESPACE_END
280
281 #endif // Pegasus_BinaryMessageHandler_h
|