1 mike 1.2 //%/////////////////////////////////////////////////////////////////////////////
2 //
|
3 kumpf 1.27 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
|
4 mike 1.2 // The Open Group, Tivoli Systems
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
|
7 kumpf 1.27 // 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 mike 1.2 // 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 kumpf 1.27 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
|
14 mike 1.2 // 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 kumpf 1.27 // 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 mike 1.2 // 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: Yi Zhou (yi_zhou@hp.com)
27 // Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
28 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
29 sage 1.19 // Arthur Pichlkostner (via Markus: sedgewick_de@yahoo.de)
|
30 mike 1.2 //
31 //%/////////////////////////////////////////////////////////////////////////////
32
33 #include <Pegasus/Common/Config.h>
|
34 kumpf 1.13 #include <Pegasus/Common/Constants.h>
|
35 mike 1.2 #include <cctype>
36 #include <cstdio>
37 #include <Pegasus/Common/XmlParser.h>
38 #include <Pegasus/Common/XmlReader.h>
39 #include <Pegasus/Common/Destroyer.h>
40 #include <Pegasus/Common/XmlWriter.h>
41 #include <Pegasus/Common/HTTPMessage.h>
42 #include <Pegasus/Common/Logger.h>
43 #include <Pegasus/Common/Tracer.h>
|
44 sage 1.19 #include <Pegasus/Common/StatisticalData.h>
|
45 mike 1.2 #include "CIMOperationResponseEncoder.h"
46
47 #ifdef PEGASUS_CCOVER
48 # include <ccover.h>
49 #endif
50
51 PEGASUS_USING_STD;
52
53 PEGASUS_NAMESPACE_BEGIN
54
55 CIMOperationResponseEncoder::CIMOperationResponseEncoder()
|
56 kumpf 1.18 : Base(PEGASUS_QUEUENAME_OPRESPENCODER)
|
57 mike 1.2 {
58
59 }
60
61 CIMOperationResponseEncoder::~CIMOperationResponseEncoder()
62 {
63
64 }
65
66 void CIMOperationResponseEncoder::sendResponse(
|
67 mday 1.9 Uint32 queueId,
68 Array<Sint8>& message)
|
69 mike 1.2 {
|
70 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
71 "CIMOperationResponseEncoder::sendResponse()");
|
72 mday 1.9 MessageQueue* queue = MessageQueue::lookup(queueId);
|
73 mike 1.2
|
74 mday 1.9 if (queue)
|
75 mike 1.2
|
76 mday 1.9 {
77 HTTPMessage* httpMessage = new HTTPMessage(message);
78 Tracer::traceBuffer(TRC_XML_IO, Tracer::LEVEL2,
79 httpMessage->message.getData(), httpMessage->message.size());
|
80 mike 1.2
|
81 mday 1.9 queue->enqueue(httpMessage);
|
82 mike 1.2
83 #ifdef PEGASUS_CCOVER
|
84 mday 1.9 cov_write();
|
85 mike 1.2 #endif
|
86 mday 1.9 }
87 else
88 {
89 Tracer::trace(TRC_DISPATCHER, Tracer::LEVEL3,
90 "Invalid queueId = %i, response not sent.", queueId);
91 }
|
92 kumpf 1.4
|
93 kumpf 1.14 PEG_METHOD_EXIT();
|
94 mike 1.2 }
95
|
96 kumpf 1.10 // Code is duplicated in CIMOperationRequestDecoder
97 void CIMOperationResponseEncoder::sendIMethodError(
|
98 mday 1.9 Uint32 queueId,
99 const String& messageId,
|
100 kumpf 1.11 const String& iMethodName,
|
101 kumpf 1.16 const CIMException& cimException)
|
102 mday 1.9 {
|
103 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
104 "CIMOperationResponseEncoder::sendIMethodError()");
|
105 kumpf 1.10
106 Array<Sint8> message;
|
107 kumpf 1.11 message = XmlWriter::formatSimpleIMethodErrorRspMessage(
108 iMethodName,
109 messageId,
|
110 kumpf 1.16 cimException);
|
111 kumpf 1.10
|
112 kumpf 1.11 sendResponse(queueId, message);
|
113 kumpf 1.10
|
114 kumpf 1.14 PEG_METHOD_EXIT();
|
115 kumpf 1.10 }
116
117 void CIMOperationResponseEncoder::sendIMethodError(
118 CIMResponseMessage* response,
119 const String& cimMethodName)
120 {
|
121 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
122 "CIMOperationResponseEncoder::sendIMethodError()");
|
123 mday 1.9
|
124 kumpf 1.10 Uint32 queueId = response->queueIds.top();
125 response->queueIds.pop();
|
126 mday 1.9
|
127 kumpf 1.10 sendIMethodError(
128 queueId,
129 response->messageId,
130 cimMethodName,
|
131 kumpf 1.16 response->cimException);
|
132 kumpf 1.4
|
133 kumpf 1.14 PEG_METHOD_EXIT();
|
134 kumpf 1.10 }
135
136 void CIMOperationResponseEncoder::sendMethodError(
137 Uint32 queueId,
138 const String& messageId,
|
139 kumpf 1.11 const String& methodName,
|
140 kumpf 1.16 const CIMException& cimException)
|
141 kumpf 1.10 {
|
142 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
143 "CIMOperationResponseEncoder::sendMethodError()");
|
144 kumpf 1.10
145 Array<Sint8> message;
|
146 kumpf 1.11 message = XmlWriter::formatSimpleMethodErrorRspMessage(
147 methodName,
148 messageId,
|
149 kumpf 1.16 cimException);
|
150 kumpf 1.10
|
151 kumpf 1.11 sendResponse(queueId, message);
|
152 kumpf 1.10
|
153 kumpf 1.14 PEG_METHOD_EXIT();
|
154 mike 1.2 }
155
|
156 kumpf 1.10 void CIMOperationResponseEncoder::sendMethodError(
|
157 mday 1.9 CIMResponseMessage* response,
158 const String& cimMethodName)
|
159 mike 1.2 {
|
160 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
161 "CIMOperationResponseEncoder::sendMethodError()");
|
162 kumpf 1.4
|
163 mday 1.9 Uint32 queueId = response->queueIds.top();
164 response->queueIds.pop();
|
165 mike 1.2
|
166 kumpf 1.10 sendMethodError(
|
167 mday 1.9 queueId,
168 response->messageId,
169 cimMethodName,
|
170 kumpf 1.16 response->cimException);
|
171 kumpf 1.14 PEG_METHOD_EXIT();
|
172 mday 1.9 }
173
174 void CIMOperationResponseEncoder::handleEnqueue(Message *message)
175 {
|
176 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
177 "CIMOperationResponseEncoder::handleEnqueue()");
178
|
179 mday 1.9 if (!message)
180 {
|
181 kumpf 1.14 PEG_METHOD_EXIT();
|
182 mday 1.9 return;
183 }
184
185 switch (message->getType())
186 {
187 case CIM_GET_CLASS_RESPONSE_MESSAGE:
188 encodeGetClassResponse(
189 (CIMGetClassResponseMessage*)message);
190 break;
191
192 case CIM_GET_INSTANCE_RESPONSE_MESSAGE:
193 encodeGetInstanceResponse(
194 (CIMGetInstanceResponseMessage*)message);
195 break;
196
197 case CIM_DELETE_CLASS_RESPONSE_MESSAGE:
198 encodeDeleteClassResponse(
199 (CIMDeleteClassResponseMessage*)message);
200 break;
201
202 case CIM_DELETE_INSTANCE_RESPONSE_MESSAGE:
203 mday 1.9 encodeDeleteInstanceResponse(
204 (CIMDeleteInstanceResponseMessage*)message);
205 break;
206
207 case CIM_CREATE_CLASS_RESPONSE_MESSAGE:
208 encodeCreateClassResponse(
209 (CIMCreateClassResponseMessage*)message);
210 break;
211
212 case CIM_CREATE_INSTANCE_RESPONSE_MESSAGE:
213 encodeCreateInstanceResponse(
214 (CIMCreateInstanceResponseMessage*)message);
215 break;
216
217 case CIM_MODIFY_CLASS_RESPONSE_MESSAGE:
218 encodeModifyClassResponse(
219 (CIMModifyClassResponseMessage*)message);
220 break;
221
222 case CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE:
223 encodeModifyInstanceResponse(
224 mday 1.9 (CIMModifyInstanceResponseMessage*)message);
225 break;
226
227 case CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE:
228 encodeEnumerateClassesResponse(
229 (CIMEnumerateClassesResponseMessage*)message);
230 break;
231
232 case CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE:
233 encodeEnumerateClassNamesResponse(
234 (CIMEnumerateClassNamesResponseMessage*)message);
235 break;
236
237 case CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE:
238 encodeEnumerateInstancesResponse(
239 (CIMEnumerateInstancesResponseMessage*)message);
240 break;
241
242 case CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE:
243 encodeEnumerateInstanceNamesResponse(
244 (CIMEnumerateInstanceNamesResponseMessage*)message);
245 mday 1.9 break;
246
247 case CIM_EXEC_QUERY_RESPONSE_MESSAGE:
|
248 kumpf 1.14 encodeExecQueryResponse(
249 (CIMExecQueryResponseMessage*)message);
|
250 mday 1.9 break;
251
252 case CIM_ASSOCIATORS_RESPONSE_MESSAGE:
253 encodeAssociatorsResponse(
254 (CIMAssociatorsResponseMessage*)message);
255 break;
256
257 case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE:
258 encodeAssociatorNamesResponse(
259 (CIMAssociatorNamesResponseMessage*)message);
260 break;
261
262 case CIM_REFERENCES_RESPONSE_MESSAGE:
263 encodeReferencesResponse(
264 (CIMReferencesResponseMessage*)message);
265 break;
266
267 case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE:
268 encodeReferenceNamesResponse(
269 (CIMReferenceNamesResponseMessage*)message);
270 break;
271 mday 1.9
272 case CIM_GET_PROPERTY_RESPONSE_MESSAGE:
273 encodeGetPropertyResponse(
274 (CIMGetPropertyResponseMessage*)message);
275 break;
276
277 case CIM_SET_PROPERTY_RESPONSE_MESSAGE:
278 encodeSetPropertyResponse(
279 (CIMSetPropertyResponseMessage*)message);
280 break;
281
282 case CIM_GET_QUALIFIER_RESPONSE_MESSAGE:
283 encodeGetQualifierResponse(
284 (CIMGetQualifierResponseMessage*)message);
285 break;
286
287 case CIM_SET_QUALIFIER_RESPONSE_MESSAGE:
288 encodeSetQualifierResponse(
289 (CIMSetQualifierResponseMessage*)message);
290 break;
291
292 mday 1.9 case CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE:
293 encodeDeleteQualifierResponse(
294 (CIMDeleteQualifierResponseMessage*)message);
295 break;
296
297 case CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE:
298 encodeEnumerateQualifiersResponse(
299 (CIMEnumerateQualifiersResponseMessage*)message);
300 break;
301
302 case CIM_INVOKE_METHOD_RESPONSE_MESSAGE:
303 encodeInvokeMethodResponse(
304 (CIMInvokeMethodResponseMessage*)message);
305 break;
306 }
|
307 kumpf 1.4
|
308 mday 1.9 delete message;
|
309 mday 1.8
|
310 kumpf 1.14 PEG_METHOD_EXIT();
|
311 mday 1.9
312 return;
|
313 mday 1.8
|
314 mday 1.9 }
|
315 mday 1.8
316
|
317 mike 1.2 void CIMOperationResponseEncoder::handleEnqueue()
318 {
|
319 kumpf 1.4
|
320 mday 1.9 Message* message = dequeue();
321 if(message)
322 handleEnqueue(message);
|
323 mike 1.2 }
324
325 void CIMOperationResponseEncoder::encodeCreateClassResponse(
|
326 mday 1.9 CIMCreateClassResponseMessage* response)
|
327 mike 1.2 {
|
328 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
329 "CIMOperationResponseEncoder::encodeCreateClassResponse()");
|
330 kumpf 1.4
|
331 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
332 mday 1.9 {
|
333 sage 1.19 STAT_SERVEREND_ERROR
334
|
335 kumpf 1.10 sendIMethodError(response, "CreateClass");
|
336 kumpf 1.14 PEG_METHOD_EXIT();
|
337 mday 1.9 return;
338 }
|
339 mike 1.2
|
340 mday 1.9 Array<Sint8> body;
|
341 mike 1.2
|
342 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
343 mday 1.9 "CreateClass", response->messageId, body);
|
344 mike 1.2
|
345 sage 1.19 STAT_SERVEREND
346
|
347 mday 1.9 sendResponse(response->queueIds.top(), message);
|
348 kumpf 1.4
|
349 kumpf 1.14 PEG_METHOD_EXIT();
|
350 mike 1.2 }
351
352 void CIMOperationResponseEncoder::encodeGetClassResponse(
|
353 mday 1.9 CIMGetClassResponseMessage* response)
|
354 mike 1.2 {
|
355 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
356 "CIMOperationResponseEncoder::encodeGetClassResponse()");
|
357 mike 1.2
|
358 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
359 mday 1.9 {
|
360 sage 1.19 STAT_SERVEREND_ERROR
361
|
362 kumpf 1.10 sendIMethodError(response, "GetClass");
|
363 kumpf 1.14 PEG_METHOD_EXIT();
|
364 mday 1.9 return;
365 }
366
367 Array<Sint8> body;
|
368 kumpf 1.23 XmlWriter::appendClassElement(body, response->cimClass);
|
369 mike 1.2
|
370 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
371 mday 1.9 "GetClass", response->messageId, body);
|
372 mike 1.2
|
373 sage 1.19 STAT_SERVEREND
374
|
375 mday 1.9 sendResponse(response->queueIds.top(), message);
|
376 kumpf 1.4
|
377 kumpf 1.14 PEG_METHOD_EXIT();
|
378 mike 1.2 }
379
380 void CIMOperationResponseEncoder::encodeModifyClassResponse(
|
381 mday 1.9 CIMModifyClassResponseMessage* response)
|
382 mike 1.2 {
|
383 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
384 "CIMOperationResponseEncoder::encodeModifyClassResponse()");
|
385 kumpf 1.4
|
386 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
387 mday 1.9 {
|
388 sage 1.19 STAT_SERVEREND_ERROR
389
|
390 kumpf 1.10 sendIMethodError(response, "ModifyClass");
|
391 kumpf 1.14 PEG_METHOD_EXIT();
|
392 mday 1.9 return;
393 }
|
394 mike 1.2
|
395 mday 1.9 Array<Sint8> body;
|
396 mike 1.2
|
397 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
398 mday 1.9 "ModifyClass", response->messageId, body);
|
399 mike 1.2
|
400 sage 1.19 STAT_SERVEREND
401
|
402 mday 1.9 sendResponse(response->queueIds.top(), message);
|
403 kumpf 1.4
|
404 kumpf 1.14 PEG_METHOD_EXIT();
|
405 mike 1.2 }
406
407 void CIMOperationResponseEncoder::encodeEnumerateClassNamesResponse(
|
408 mday 1.9 CIMEnumerateClassNamesResponseMessage* response)
|
409 mike 1.2 {
|
410 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
411 "encodeEnumerateClassNamesResponse()");
|
412 kumpf 1.4
|
413 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
414 mday 1.9 {
|
415 sage 1.19 STAT_SERVEREND_ERROR
416
|
417 kumpf 1.10 sendIMethodError(response, "EnumerateClassNames");
|
418 kumpf 1.14 PEG_METHOD_EXIT();
|
419 mday 1.9 return;
420 }
|
421 mike 1.2
|
422 mday 1.9 Array<Sint8> body;
|
423 mike 1.2
|
424 mday 1.9 for (Uint32 i = 0; i < response->classNames.size(); i++)
425 XmlWriter::appendClassNameElement(body, response->classNames[i]);
|
426 mike 1.2
|
427 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
428 mday 1.9 "EnumerateClassNames", response->messageId, body);
|
429 mike 1.2
|
430 sage 1.19 STAT_SERVEREND
431
|
432 mday 1.9 sendResponse(response->queueIds.top(), message);
|
433 kumpf 1.4
|
434 kumpf 1.14 PEG_METHOD_EXIT();
|
435 mike 1.2 }
436
437 void CIMOperationResponseEncoder::encodeEnumerateClassesResponse(
|
438 mday 1.9 CIMEnumerateClassesResponseMessage* response)
|
439 mike 1.2 {
|
440 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
441 "encodeEnumerateClassesResponse()");
|
442 kumpf 1.4
|
443 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
444 mday 1.9 {
|
445 sage 1.19 STAT_SERVEREND_ERROR
446
|
447 kumpf 1.10 sendIMethodError(response, "EnumerateClasses");
|
448 kumpf 1.14 PEG_METHOD_EXIT();
|
449 mday 1.9 return;
450 }
451
452 Array<Sint8> body;
453
454 for (Uint32 i = 0; i < response->cimClasses.size(); i++)
|
455 kumpf 1.23 XmlWriter::appendClassElement(body, response->cimClasses[i]);
|
456 mday 1.9
|
457 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
458 mday 1.9 "EnumerateClasses", response->messageId, body);
459
|
460 sage 1.19 STAT_SERVEREND
461
|
462 mday 1.9 sendResponse(response->queueIds.top(), message);
|
463 kumpf 1.14 PEG_METHOD_EXIT();
|
464 mike 1.2 }
465
466 void CIMOperationResponseEncoder::encodeDeleteClassResponse(
|
467 mday 1.9 CIMDeleteClassResponseMessage* response)
|
468 mike 1.2 {
|
469 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
470 "CIMOperationResponseEncoder::encodeDeleteClassResponse()");
|
471 kumpf 1.4
|
472 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
473 mday 1.9 {
|
474 sage 1.19 STAT_SERVEREND_ERROR
475
|
476 kumpf 1.10 sendIMethodError(response, "DeleteClass");
|
477 kumpf 1.14 PEG_METHOD_EXIT();
|
478 mday 1.9 return;
479 }
480
481 Array<Sint8> body;
482
|
483 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
484 mday 1.9 "DeleteClass", response->messageId, body);
485
|
486 sage 1.19 STAT_SERVEREND
487
|
488 mday 1.9 sendResponse(response->queueIds.top(), message);
|
489 kumpf 1.14 PEG_METHOD_EXIT();
|
490 mike 1.2 }
491
492 void CIMOperationResponseEncoder::encodeCreateInstanceResponse(
|
493 mday 1.9 CIMCreateInstanceResponseMessage* response)
|
494 mike 1.2 {
|
495 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
496 "encodeCreateInstanceResponse()");
|
497 mike 1.2
|
498 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
499 mday 1.9 {
|
500 sage 1.19 STAT_SERVEREND_ERROR
501
|
502 kumpf 1.10 sendIMethodError(response, "CreateInstance");
|
503 kumpf 1.14 PEG_METHOD_EXIT();
|
504 mday 1.9 return;
505 }
506
507 Array<Sint8> body;
508
509 XmlWriter::appendInstanceNameElement(body, response->instanceName);
510
|
511 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
512 mday 1.9 "CreateInstance", response->messageId, body);
513
|
514 sage 1.19 STAT_SERVEREND
515
|
516 mday 1.9 sendResponse(response->queueIds.top(), message);
|
517 kumpf 1.14 PEG_METHOD_EXIT();
|
518 mike 1.2 }
519
520 void CIMOperationResponseEncoder::encodeGetInstanceResponse(
|
521 mday 1.9 CIMGetInstanceResponseMessage* response)
|
522 mike 1.2 {
|
523 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
524 "encodeGetInstanceResponse()");
|
525 kumpf 1.4
|
526 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
527 mday 1.9 {
|
528 sage 1.19 STAT_SERVEREND_ERROR
529
|
530 kumpf 1.10 sendIMethodError(response, "GetInstance");
|
531 kumpf 1.14 PEG_METHOD_EXIT();
|
532 mday 1.9 return;
533 }
534
535 Array<Sint8> body;
|
536 kumpf 1.23 XmlWriter::appendInstanceElement(body, response->cimInstance);
|
537 mday 1.9
|
538 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
539 mday 1.9 "GetInstance", response->messageId, body);
540
|
541 sage 1.19 STAT_SERVEREND
542
|
543 mday 1.9 sendResponse(response->queueIds.top(), message);
|
544 kumpf 1.14 PEG_METHOD_EXIT();
|
545 mike 1.2 }
546
547 void CIMOperationResponseEncoder::encodeModifyInstanceResponse(
|
548 mday 1.9 CIMModifyInstanceResponseMessage* response)
|
549 mike 1.2 {
|
550 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
551 "encodeModifyInstanceResponse()");
|
552 kumpf 1.4
|
553 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
554 mday 1.9 {
|
555 sage 1.19 STAT_SERVEREND_ERROR
556
|
557 kumpf 1.10 sendIMethodError(response, "ModifyInstance");
|
558 kumpf 1.14 PEG_METHOD_EXIT();
|
559 mday 1.9 return;
560 }
561
562 Array<Sint8> body;
563
|
564 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
565 mday 1.9 "ModifyInstance", response->messageId, body);
566
|
567 sage 1.19 STAT_SERVEREND
568
|
569 mday 1.9 sendResponse(response->queueIds.top(), message);
|
570 kumpf 1.14 PEG_METHOD_EXIT();
|
571 mike 1.2 }
572
573 void CIMOperationResponseEncoder::encodeEnumerateInstancesResponse(
|
574 mday 1.9 CIMEnumerateInstancesResponseMessage* response)
|
575 mike 1.2 {
|
576 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
577 "encodeEnumerateInstancesResponse()");
|
578 kumpf 1.4
|
579 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
580 mday 1.9 {
|
581 sage 1.19 STAT_SERVEREND_ERROR
582
|
583 kumpf 1.10 sendIMethodError(response, "EnumerateInstances");
|
584 kumpf 1.14 PEG_METHOD_EXIT();
|
585 mday 1.9 return;
586 }
587
588 Array<Sint8> body;
589
590 for (Uint32 i = 0; i < response->cimNamedInstances.size(); i++)
|
591 kumpf 1.24 XmlWriter::appendValueNamedInstanceElement(
592 body, response->cimNamedInstances[i]);
|
593 mday 1.9
|
594 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
595 mday 1.9 "EnumerateInstances", response->messageId, body);
596
|
597 sage 1.19 STAT_SERVEREND
598
|
599 mday 1.9 sendResponse(response->queueIds.top(), message);
|
600 kumpf 1.14 PEG_METHOD_EXIT();
|
601 mike 1.2 }
602
603 void CIMOperationResponseEncoder::encodeEnumerateInstanceNamesResponse(
|
604 mday 1.9 CIMEnumerateInstanceNamesResponseMessage* response)
|
605 mike 1.2 {
|
606 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
607 "encodeEnumerateInstanceNamesResponse()");
|
608 kumpf 1.4
|
609 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
610 mday 1.9 {
|
611 sage 1.19 STAT_SERVEREND_ERROR
612
|
613 kumpf 1.10 sendIMethodError(response, "EnumerateInstanceNames");
|
614 kumpf 1.14 PEG_METHOD_EXIT();
|
615 mday 1.9 return;
616 }
617
618 Array<Sint8> body;
619
620 for (Uint32 i = 0; i < response->instanceNames.size(); i++)
621 XmlWriter::appendInstanceNameElement(body, response->instanceNames[i]);
622
|
623 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
624 mday 1.9 "EnumerateInstanceNames", response->messageId, body);
625
|
626 sage 1.19 STAT_SERVEREND
627
|
628 mday 1.9 sendResponse(response->queueIds.top(), message);
|
629 kumpf 1.14 PEG_METHOD_EXIT();
|
630 mike 1.2 }
631
632 void CIMOperationResponseEncoder::encodeDeleteInstanceResponse(
|
633 mday 1.9 CIMDeleteInstanceResponseMessage* response)
|
634 mike 1.2 {
|
635 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
636 "encodeDeleteInstanceResponse()");
|
637 kumpf 1.4
|
638 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
639 mday 1.9 {
|
640 sage 1.19 STAT_SERVEREND_ERROR
641
|
642 kumpf 1.10 sendIMethodError(response, "DeleteInstance");
|
643 kumpf 1.14 PEG_METHOD_EXIT();
|
644 mday 1.9 return;
645 }
646
647 Array<Sint8> body;
648
|
649 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
650 mday 1.9 "DeleteInstance", response->messageId, body);
651
|
652 sage 1.19 STAT_SERVEREND
653
|
654 mday 1.9 sendResponse(response->queueIds.top(), message);
|
655 kumpf 1.14 PEG_METHOD_EXIT();
|
656 mike 1.2 }
657
658 void CIMOperationResponseEncoder::encodeGetPropertyResponse(
|
659 mday 1.9 CIMGetPropertyResponseMessage* response)
|
660 mike 1.2 {
|
661 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
662 "CIMOperationResponseEncoder::encodeGetPropertyResponse()");
|
663 kumpf 1.4
|
664 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
665 mday 1.9 {
|
666 sage 1.19 STAT_SERVEREND_ERROR
667
|
668 kumpf 1.10 sendIMethodError(response, "GetProperty");
|
669 kumpf 1.14 PEG_METHOD_EXIT();
|
670 mday 1.9 return;
671 }
672
673 Array<Sint8> body;
|
674 kumpf 1.22 XmlWriter::appendValueElement(body, response->value);
|
675 mday 1.9
|
676 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
677 mday 1.9 "GetProperty", response->messageId, body);
678
|
679 sage 1.19 STAT_SERVEREND
680
|
681 mday 1.9 sendResponse(response->queueIds.top(), message);
|
682 kumpf 1.14 PEG_METHOD_EXIT();
|
683 mike 1.2 }
684
685 void CIMOperationResponseEncoder::encodeSetPropertyResponse(
|
686 mday 1.9 CIMSetPropertyResponseMessage* response)
|
687 mike 1.2 {
|
688 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
689 "CIMOperationResponseEncoder::encodeSetPropertyResponse()");
|
690 kumpf 1.4
|
691 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
692 mday 1.9 {
|
693 sage 1.19 STAT_SERVEREND_ERROR
694
|
695 kumpf 1.10 sendIMethodError(response, "SetProperty");
|
696 kumpf 1.14 PEG_METHOD_EXIT();
|
697 mday 1.9 return;
698 }
699
700 Array<Sint8> body;
701
|
702 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
703 mday 1.9 "SetProperty", response->messageId, body);
704
|
705 sage 1.19 STAT_SERVEREND
706
|
707 mday 1.9 sendResponse(response->queueIds.top(), message);
|
708 kumpf 1.14 PEG_METHOD_EXIT();
|
709 mike 1.2 }
710
711 void CIMOperationResponseEncoder::encodeSetQualifierResponse(
|
712 mday 1.9 CIMSetQualifierResponseMessage* response)
|
713 mike 1.2 {
|
714 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
715 "encodeSetQualifierResponse()");
|
716 kumpf 1.4
|
717 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
718 mday 1.9 {
|
719 sage 1.19 STAT_SERVEREND_ERROR
720
|
721 kumpf 1.10 sendIMethodError(response, "SetQualifier");
|
722 kumpf 1.14 PEG_METHOD_EXIT();
|
723 mday 1.9 return;
724 }
725
726 Array<Sint8> body;
727
|
728 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
729 mday 1.9 "SetQualifier", response->messageId, body);
730
|
731 sage 1.19 STAT_SERVEREND
732
|
733 mday 1.9 sendResponse(response->queueIds.top(), message);
|
734 kumpf 1.14 PEG_METHOD_EXIT();
|
735 mike 1.2 }
736
737 void CIMOperationResponseEncoder::encodeGetQualifierResponse(
|
738 mday 1.9 CIMGetQualifierResponseMessage* response)
|
739 mike 1.2 {
|
740 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
741 "encodeGetQualifierResponse()");
|
742 kumpf 1.4
|
743 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
744 mday 1.9 {
|
745 sage 1.19 STAT_SERVEREND_ERROR
746
|
747 kumpf 1.10 sendIMethodError(response, "GetQualifier");
|
748 kumpf 1.14 PEG_METHOD_EXIT();
|
749 mday 1.9 return;
750 }
751
752 Array<Sint8> body;
|
753 kumpf 1.24 XmlWriter::appendQualifierDeclElement(body, response->cimQualifierDecl);
|
754 mday 1.9
|
755 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
756 mday 1.9 "GetQualifier", response->messageId, body);
757
|
758 sage 1.19 STAT_SERVEREND
759
|
760 mday 1.9 sendResponse(response->queueIds.top(), message);
|
761 kumpf 1.14 PEG_METHOD_EXIT();
|
762 mike 1.2 }
763
764 void CIMOperationResponseEncoder::encodeEnumerateQualifiersResponse(
|
765 mday 1.9 CIMEnumerateQualifiersResponseMessage* response)
|
766 mike 1.2 {
|
767 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
768 "encodeEnumerateQualifierResponse()");
|
769 kumpf 1.4
|
770 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
771 mday 1.9 {
|
772 sage 1.19 STAT_SERVEREND_ERROR
773
|
774 kumpf 1.10 sendIMethodError(response, "EnumerateQualifiers");
|
775 kumpf 1.14 PEG_METHOD_EXIT();
|
776 mday 1.9 return;
777 }
778
779 Array<Sint8> body;
780
781 for (Uint32 i = 0; i < response->qualifierDeclarations.size(); i++)
|
782 kumpf 1.24 XmlWriter::appendQualifierDeclElement(body, response->qualifierDeclarations[i]);
|
783 mday 1.9
|
784 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
785 mday 1.9 "EnumerateQualifiers", response->messageId, body);
786
|
787 sage 1.19 STAT_SERVEREND
788
|
789 mday 1.9 sendResponse(response->queueIds.top(), message);
|
790 kumpf 1.14 PEG_METHOD_EXIT();
|
791 mike 1.2 }
792
793 void CIMOperationResponseEncoder::encodeDeleteQualifierResponse(
|
794 mday 1.9 CIMDeleteQualifierResponseMessage* response)
|
795 mike 1.2 {
|
796 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
797 "encodeDeleteQualifierResponse()");
|
798 kumpf 1.4
|
799 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
800 mday 1.9 {
|
801 sage 1.19 STAT_SERVEREND_ERROR
802
|
803 kumpf 1.10 sendIMethodError(response, "DeleteQualifier");
|
804 kumpf 1.14 PEG_METHOD_EXIT();
|
805 mday 1.9 return;
806 }
807
808 Array<Sint8> body;
809
|
810 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
811 mday 1.9 "DeleteQualifier", response->messageId, body);
812
|
813 sage 1.19 STAT_SERVEREND
814
|
815 mday 1.9 sendResponse(response->queueIds.top(), message);
|
816 kumpf 1.14 PEG_METHOD_EXIT();
|
817 mike 1.2 }
818
819 void CIMOperationResponseEncoder::encodeReferenceNamesResponse(
|
820 mday 1.9 CIMReferenceNamesResponseMessage* response)
|
821 mike 1.2 {
|
822 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
823 "encodeReferenceNamesResponse()");
|
824 kumpf 1.4
|
825 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
826 mday 1.9 {
|
827 sage 1.19 STAT_SERVEREND_ERROR
828
|
829 kumpf 1.10 sendIMethodError(response, "ReferenceNames");
|
830 kumpf 1.14 PEG_METHOD_EXIT();
|
831 mday 1.9 return;
832 }
833
834 Array<Sint8> body;
835
836 for (Uint32 i = 0; i < response->objectNames.size(); i++)
837 {
838 body << "<OBJECTPATH>\n";
|
839 kumpf 1.24 XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false);
|
840 mday 1.9 body << "</OBJECTPATH>\n";
841 }
842
|
843 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
844 mday 1.9 "ReferenceNames", response->messageId, body);
845
|
846 sage 1.19 STAT_SERVEREND
847
|
848 mday 1.9 sendResponse(response->queueIds.top(), message);
|
849 kumpf 1.14 PEG_METHOD_EXIT();
|
850 mike 1.2 }
851
852 void CIMOperationResponseEncoder::encodeReferencesResponse(
|
853 mday 1.9 CIMReferencesResponseMessage* response)
|
854 mike 1.2 {
|
855 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
856 "CIMOperationResponseEncoder::encodeReferencesResponse()");
|
857 kumpf 1.4
|
858 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
859 mday 1.9 {
|
860 sage 1.19 STAT_SERVEREND_ERROR
861
|
862 kumpf 1.10 sendIMethodError(response, "References");
|
863 kumpf 1.14 PEG_METHOD_EXIT();
|
864 mday 1.9 return;
865 }
866
867 Array<Sint8> body;
868
869 for (Uint32 i = 0; i < response->cimObjects.size(); i++)
|
870 kumpf 1.24 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
|
871 mday 1.9
|
872 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
873 mday 1.9 "References", response->messageId, body);
874
|
875 sage 1.19 STAT_SERVEREND
876
|
877 mday 1.9 sendResponse(response->queueIds.top(), message);
|
878 kumpf 1.14 PEG_METHOD_EXIT();
|
879 mike 1.2 }
880
881 void CIMOperationResponseEncoder::encodeAssociatorNamesResponse(
|
882 mday 1.9 CIMAssociatorNamesResponseMessage* response)
|
883 mike 1.2 {
|
884 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
885 "encodeAssociatorNamesResponse()");
|
886 kumpf 1.4
|
887 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
888 mday 1.9 {
|
889 sage 1.19 STAT_SERVEREND_ERROR
890
|
891 kumpf 1.10 sendIMethodError(response, "AssociatorNames");
|
892 kumpf 1.14 PEG_METHOD_EXIT();
|
893 mday 1.9 return;
894 }
895
896 Array<Sint8> body;
897
898 for (Uint32 i = 0; i < response->objectNames.size(); i++)
899 {
900 body << "<OBJECTPATH>\n";
|
901 kumpf 1.24 XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false);
|
902 mday 1.9 body << "</OBJECTPATH>\n";
903 }
904
|
905 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
906 mday 1.9 "AssociatorNames", response->messageId, body);
907
|
908 sage 1.19 STAT_SERVEREND
909
|
910 mday 1.9 sendResponse(response->queueIds.top(), message);
|
911 kumpf 1.14 PEG_METHOD_EXIT();
|
912 mike 1.2 }
913
914 void CIMOperationResponseEncoder::encodeAssociatorsResponse(
|
915 mday 1.9 CIMAssociatorsResponseMessage* response)
|
916 mike 1.2 {
|
917 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER,
918 "CIMOperationResponseEncoder::encodeAssociatorsResponse()");
|
919 kumpf 1.4
|
920 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
921 mday 1.9 {
|
922 sage 1.19 STAT_SERVEREND_ERROR
923
|
924 kumpf 1.10 sendIMethodError(response, "Associators");
|
925 kumpf 1.14 PEG_METHOD_EXIT();
|
926 mday 1.9 return;
927 }
928
929 Array<Sint8> body;
930
931 for (Uint32 i = 0; i < response->cimObjects.size(); i++)
|
932 kumpf 1.24 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
|
933 mday 1.9
|
934 kumpf 1.10 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
|
935 mday 1.9 "Associators", response->messageId, body);
936
|
937 sage 1.19 STAT_SERVEREND
938
|
939 mday 1.9 sendResponse(response->queueIds.top(), message);
|
940 kumpf 1.14 PEG_METHOD_EXIT();
941 }
942
943 void CIMOperationResponseEncoder::encodeExecQueryResponse(
944 CIMExecQueryResponseMessage* response)
945 {
946 PEG_METHOD_ENTER(TRC_DISPATCHER,
947 "CIMOperationResponseEncoder::encodeExecQueryResponse()");
948
|
949 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
950 kumpf 1.14 {
|
951 sage 1.19 STAT_SERVEREND_ERROR
952
|
953 kumpf 1.14 sendIMethodError(response, "ExecQuery");
954 PEG_METHOD_EXIT();
955 return;
956 }
957
958 Array<Sint8> body;
959
|
960 kumpf 1.15 for (Uint32 i = 0; i < response->cimObjects.size(); i++)
|
961 kumpf 1.24 XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]);
|
962 kumpf 1.14
963 Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage(
964 "ExecQuery", response->messageId, body);
965
|
966 sage 1.19 STAT_SERVEREND
967
|
968 kumpf 1.14 sendResponse(response->queueIds.top(), message);
969 PEG_METHOD_EXIT();
|
970 mike 1.2 }
971
972 void CIMOperationResponseEncoder::encodeInvokeMethodResponse(
|
973 mday 1.26 CIMInvokeMethodResponseMessage* response)
|
974 mike 1.2 {
|
975 kumpf 1.14 PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::"
976 "encodeInvokeMethodResponse()");
|
977 kumpf 1.4
|
978 kumpf 1.16 if (response->cimException.getCode() != CIM_ERR_SUCCESS)
|
979 mday 1.9 {
|
980 sage 1.19 STAT_SERVEREND_ERROR
981
|
982 mday 1.9 sendMethodError(response, response->methodName);
|
983 kumpf 1.14 PEG_METHOD_EXIT();
|
984 mday 1.9 return;
985 }
986
987 Array<Sint8> body;
988
989 // ATTN-RK-P3-20020219: Who's job is it to make sure the return value is
990 // not an array?
|
991 kumpf 1.17 // Only add the return value if it is not null
992 if (!response->retValue.isNull())
993 {
994 XmlWriter::appendReturnValueElement(body, response->retValue);
995 }
|
996 mday 1.9
997 for (Uint32 i=0; i < response->outParameters.size(); i++)
998 {
|
999 kumpf 1.24 XmlWriter::appendParamValueElement(body, response->outParameters[i]);
|
1000 mday 1.9 }
1001
1002 Array<Sint8> message = XmlWriter::formatSimpleMethodRspMessage(
1003 _CString(response->methodName), response->messageId, body);
|
1004 sage 1.19
1005 STAT_SERVEREND
|
1006 mday 1.9
1007 sendResponse(response->queueIds.top(), message);
|
1008 kumpf 1.14 PEG_METHOD_EXIT();
|
1009 mike 1.2 }
1010
1011 PEGASUS_NAMESPACE_END
|