1 mike 1.2 //%/////////////////////////////////////////////////////////////////////////////
2 //
|
3 kumpf 1.25 // 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 // 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 kumpf 1.25 //
|
13 mike 1.2 // 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 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
28 // Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
29 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
30 kumpf 1.23 // Carol Ann Krug Graves, Hewlett-Packard Company
31 // (carolann_graves@hp.com)
|
32 kumpf 1.36 // Sushma Fernandes, Hewlett-Packard Company
33 // (sushma_fernandes@hp.com)
|
34 david 1.38 // Dave Rosckes (rosckes@us.ibm.com)
|
35 mike 1.2 //
36 //%/////////////////////////////////////////////////////////////////////////////
37
38 #include <Pegasus/Common/Config.h>
39 #include <iostream>
|
40 kumpf 1.15 #include <Pegasus/Common/Constants.h>
|
41 mike 1.2 #include <Pegasus/Common/XmlParser.h>
42 #include <Pegasus/Common/XmlReader.h>
43 #include <Pegasus/Common/System.h>
44 #include <Pegasus/Common/XmlWriter.h>
45 #include <Pegasus/Common/HTTPMessage.h>
46 #include <Pegasus/Common/CIMMessage.h>
|
47 chuck 1.29 #include <Pegasus/Common/Exception.h>
|
48 mike 1.2 #include "CIMOperationResponseDecoder.h"
49
50 PEGASUS_USING_STD;
51
52 PEGASUS_NAMESPACE_BEGIN
53
54 CIMOperationResponseDecoder::CIMOperationResponseDecoder(
55 MessageQueue* outputQueue,
56 MessageQueue* encoderQueue,
|
57 karl 1.41 ClientAuthenticator* authenticator,
58 Uint32 showInput)
|
59 mike 1.2 :
|
60 kumpf 1.16 MessageQueue(PEGASUS_QUEUENAME_OPRESPDECODER),
|
61 mike 1.2 _outputQueue(outputQueue),
62 _encoderQueue(encoderQueue),
|
63 karl 1.41 _authenticator(authenticator),
64 _showInput(showInput)
|
65 mike 1.2 {
66 }
67
68 CIMOperationResponseDecoder::~CIMOperationResponseDecoder()
69 {
70
71 }
72
73 void CIMOperationResponseDecoder::setEncoderQueue(MessageQueue* encoderQueue)
74 {
75 _encoderQueue = encoderQueue;
76 }
77
78 void CIMOperationResponseDecoder::handleEnqueue()
79 {
80 Message* message = dequeue();
81
82 if (!message)
83 return;
84
85 switch (message->getType())
86 mike 1.2 {
87 case HTTP_MESSAGE:
88 {
|
89 mday 1.3
|
90 mike 1.2 HTTPMessage* httpMessage = (HTTPMessage*)message;
91 _handleHTTPMessage(httpMessage);
92 break;
93 }
94
95 default:
|
96 kumpf 1.17 PEGASUS_ASSERT(0);
|
97 mike 1.2 break;
98 }
99
100 delete message;
101 }
102
103 void CIMOperationResponseDecoder::_handleHTTPMessage(HTTPMessage* httpMessage)
104 {
105 //
106 // Parse the HTTP message:
107 //
108
109 String startLine;
110 Array<HTTPHeader> headers;
111 Sint8* content;
112 Uint32 contentLength;
113
|
114 kumpf 1.19 if (httpMessage->message.size() == 0)
115 {
|
116 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
117 new CIMClientMalformedHTTPException("Empty HTTP response message.");
|
118 kumpf 1.19 ClientExceptionMessage * response =
119 new ClientExceptionMessage(malformedHTTPException);
120
121 _outputQueue->enqueue(response);
122 return;
123 }
124
|
125 mike 1.2 httpMessage->parse(startLine, headers, contentLength);
126
|
127 kumpf 1.19 //
128 // Get the status line info
129 //
130 String httpVersion;
131 Uint32 statusCode;
132 String reasonPhrase;
133
134 Boolean parsableMessage = HTTPMessage::parseStatusLine(
135 startLine, httpVersion, statusCode, reasonPhrase);
136 if (!parsableMessage)
137 {
|
138 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException = new
139 CIMClientMalformedHTTPException("Malformed HTTP response message.");
|
140 kumpf 1.19 ClientExceptionMessage * response =
141 new ClientExceptionMessage(malformedHTTPException);
142
143 _outputQueue->enqueue(response);
144 return;
145 }
146
|
147 karl 1.41 #ifdef PEGASUS_CLIENT_TRACE_ENABLE
148 if (_showInput & 1)
149 {
150 cout << "CIMOperatonResponseDecoder";
151 httpMessage->printAll(cout);
152 }
153 if (_showInput & 2)
154 {
155 Uint32 size = httpMessage->message.size();
156 char* tmpBuf = new char[size+1];
157
158 strncpy( tmpBuf, httpMessage->message.getData(), size );
159 tmpBuf[size] = '\0';
160 Logger::put(Logger::STANDARD_LOG,
161 "CIMCLIENT",
162 Logger::TRACE,
163 "CIMOperationRequestDecoder::Response, XML content: $1",
164 tmpBuf);
165 delete []tmpBuf;
166 }
167 #endif
168 karl 1.41
|
169 kumpf 1.8 try
|
170 mike 1.2 {
|
171 kumpf 1.8 if (_authenticator->checkResponseHeaderForChallenge(headers))
172 {
173 //
174 // Get the original request, put that in the encoder's queue for
175 // re-sending with authentication challenge response.
176 //
177 Message* reqMessage = _authenticator->getRequestMessage();
178 _encoderQueue->enqueue(reqMessage);
|
179 mike 1.2
|
180 kumpf 1.8 return;
181 }
182 else
183 {
184 //
185 // Received a valid/error response from the server.
186 // We do not need the original request message anymore, hence delete
187 // the request message by getting the handle from the ClientAuthenticator.
188 //
189 Message* reqMessage = _authenticator->getRequestMessage();
190 _authenticator->clearRequest();
191 if (reqMessage)
192 {
193 delete reqMessage;
194 }
195 }
|
196 mike 1.2 }
|
197 kumpf 1.8 catch(InvalidAuthHeader& e)
|
198 mike 1.2 {
|
199 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
200 new CIMClientMalformedHTTPException(e.getMessage());
|
201 kumpf 1.17 ClientExceptionMessage * response =
202 new ClientExceptionMessage(malformedHTTPException);
|
203 mike 1.2
|
204 kumpf 1.17 _outputQueue->enqueue(response);
|
205 kumpf 1.15 return;
206 }
|
207 kumpf 1.22 catch(UnauthorizedAccess& e)
208 {
|
209 kumpf 1.36 // ATTN-SF-P3-20030115: Need to create a specific exception
210 // to indicate Authentication failure. See JAGae53944.
211
212 const String ERROR_MESSAGE = "Authentication failed.";
|
213 kumpf 1.27 CannotConnectException* cannotConnectException =
|
214 kumpf 1.36 new CannotConnectException(ERROR_MESSAGE);
|
215 kumpf 1.22 ClientExceptionMessage * response =
|
216 kumpf 1.27 new ClientExceptionMessage(cannotConnectException);
|
217 kumpf 1.22
218 _outputQueue->enqueue(response);
219 return;
220 }
|
221 kumpf 1.15
222 //
223 // Check for a success (200 OK) response
224 //
|
225 kumpf 1.17 if (statusCode != HTTP_STATUSCODE_OK)
|
226 kumpf 1.15 {
227 String cimError;
228 String pegasusError;
229
230 HTTPMessage::lookupHeader(headers, "CIMError", cimError);
231 HTTPMessage::lookupHeader(headers, PEGASUS_HTTPHEADERTAG_ERRORDETAIL, pegasusError);
|
232 kumpf 1.35 try
233 {
234 pegasusError = XmlReader::decodeURICharacters(pegasusError);
235 }
236 catch (ParseError& e)
237 {
238 // Ignore this exception. We're more interested in having the
239 // message in encoded form than knowing that the format is invalid.
240 }
|
241 kumpf 1.15
|
242 kumpf 1.32 CIMClientHTTPErrorException* httpError =
243 new CIMClientHTTPErrorException(statusCode, cimError, pegasusError);
|
244 kumpf 1.17 ClientExceptionMessage * response =
245 new ClientExceptionMessage(httpError);
|
246 kumpf 1.15
247 _outputQueue->enqueue(response);
|
248 kumpf 1.8 return;
|
249 mike 1.2 }
250
251 //
252 // Search for "CIMOperation" header:
253 //
254 String cimOperation;
255
256 if (!HTTPMessage::lookupHeader(
|
257 kumpf 1.18 headers, "CIMOperation", cimOperation, true))
|
258 mike 1.2 {
|
259 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException = new
260 CIMClientMalformedHTTPException("Missing CIMOperation HTTP header");
|
261 kumpf 1.17 ClientExceptionMessage * response =
262 new ClientExceptionMessage(malformedHTTPException);
263
264 _outputQueue->enqueue(response);
265 return;
|
266 mike 1.2 }
267
|
268 chuck 1.39
269 // l10n start
270 ContentLanguages contentLanguages = ContentLanguages::EMPTY;
271 try
272 {
273 // Get and validate the Content-Language header, if set
274 String contentLanguageHeader;
275 if (HTTPMessage::lookupHeader(
276 headers,
277 "Content-Language",
278 contentLanguageHeader,
279 false) == true)
280 {
281 contentLanguages = ContentLanguages(contentLanguageHeader);
282 }
283 }
284 catch (Exception &e)
285 {
286 CIMClientMalformedHTTPException* malformedHTTPException = new
287 CIMClientMalformedHTTPException("Malformed Content-Language header.");
288 ClientExceptionMessage * response =
289 chuck 1.39 new ClientExceptionMessage(malformedHTTPException);
290
291 _outputQueue->enqueue(response);
292 return;
293 }
294 // l10n end
295
|
296 mike 1.2 //
297 // Zero-terminate the message:
298 //
299 httpMessage->message.append('\0');
|
300 keith.petley 1.40
|
301 mike 1.2 // Calculate the beginning of the content from the message size and
302 // the content length. Subtract 1 to take into account the null
303 // character we just added to the end of the message.
304
305 content = (Sint8*) httpMessage->message.getData() +
|
306 karl 1.41 httpMessage->message.size() - contentLength - 1;
|
307 mike 1.2
308 //
309 // If it is a method response, then dispatch it to be handled:
310 //
311
312 if (!String::equalNoCase(cimOperation, "MethodResponse"))
313 {
|
314 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
315 new CIMClientMalformedHTTPException(
316 String("Received CIMOperation HTTP header value \"") +
|
317 kumpf 1.17 cimOperation + "\", expected \"MethodResponse\"");
318 ClientExceptionMessage * response =
319 new ClientExceptionMessage(malformedHTTPException);
320
321 _outputQueue->enqueue(response);
322 return;
|
323 mike 1.2 }
324
|
325 chuck 1.39 _handleMethodResponse(content,
326 contentLanguages); // l10n
|
327 mike 1.2 }
328
|
329 chuck 1.39 void CIMOperationResponseDecoder::_handleMethodResponse(char* content,
330 const ContentLanguages& contentLanguages) //l10n
|
331 mike 1.2 {
332 Message* response = 0;
333
334 //
335 // Create and initialize XML parser:
336 //
337
338 XmlParser parser((char*)content);
339 XmlEntry entry;
340
341 try
342 {
343 //
344 // Process <?xml ... >
345 //
346
|
347 kumpf 1.11 const char* xmlVersion = 0;
348 const char* xmlEncoding = 0;
349
350 XmlReader::getXmlDeclaration(parser, xmlVersion, xmlEncoding);
|
351 mike 1.2
352 //
353 // Process <CIM ... >
354 //
355
|
356 kumpf 1.9 const char* cimVersion = 0;
357 const char* dtdVersion = 0;
358
|
359 kumpf 1.17 // ATTN-RK-P3-20020416: Need to validate these versions?
|
360 kumpf 1.9 XmlReader::getCimStartTag(parser, cimVersion, dtdVersion);
|
361 mike 1.2
362 //
363 // Expect <MESSAGE ... >
364 //
365
366 String messageId;
|
367 kumpf 1.9 String protocolVersion;
|
368 mike 1.2
369 if (!XmlReader::getMessageStartTag(parser, messageId, protocolVersion))
370 throw XmlValidationError(
371 parser.getLine(), "expected MESSAGE element");
372
|
373 kumpf 1.9 if (!String::equalNoCase(protocolVersion, "1.0"))
|
374 mike 1.2 {
|
375 kumpf 1.20 CIMClientResponseException* responseException =
376 new CIMClientResponseException(
377 String("Received unsupported protocol version \"") +
|
378 kumpf 1.17 protocolVersion + "\", expected \"1.0\"");
379 ClientExceptionMessage * response =
380 new ClientExceptionMessage(responseException);
|
381 mike 1.2
|
382 kumpf 1.17 _outputQueue->enqueue(response);
383 return;
|
384 mike 1.2 }
385
386 //
387 // Expect <SIMPLERSP ... >
388 //
389
390 XmlReader::expectStartTag(parser, entry, "SIMPLERSP");
391
392 //
393 // Expect <IMETHODRESPONSE ... >
394 //
395
396 const char* iMethodResponseName = 0;
397
398 if (XmlReader::getIMethodResponseStartTag(parser, iMethodResponseName))
399 {
400 //
401 // Dispatch the method:
402 //
403
|
404 kumpf 1.31 if (System::strcasecmp(iMethodResponseName, "GetClass") == 0)
|
405 mike 1.2 response = _decodeGetClassResponse(parser, messageId);
|
406 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "GetInstance") == 0)
|
407 mike 1.2 response = _decodeGetInstanceResponse(parser, messageId);
|
408 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "EnumerateClassNames") == 0)
|
409 mike 1.2 response = _decodeEnumerateClassNamesResponse(parser,messageId);
|
410 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "References") == 0)
|
411 mike 1.2 response = _decodeReferencesResponse(parser, messageId);
|
412 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "ReferenceNames") == 0)
|
413 mike 1.2 response = _decodeReferenceNamesResponse(parser, messageId);
|
414 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "AssociatorNames") == 0)
|
415 mike 1.2 response = _decodeAssociatorNamesResponse(parser, messageId);
|
416 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "Associators") == 0)
|
417 mike 1.2 response = _decodeAssociatorsResponse(parser, messageId);
|
418 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "CreateInstance") == 0)
|
419 mike 1.2 response = _decodeCreateInstanceResponse(parser, messageId);
|
420 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstanceNames") == 0)
|
421 mike 1.2 response = _decodeEnumerateInstanceNamesResponse(
422 parser, messageId);
|
423 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstances") == 0)
|
424 mike 1.2 response = _decodeEnumerateInstancesResponse(parser, messageId);
|
425 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "GetProperty") == 0)
|
426 mike 1.2 response = _decodeGetPropertyResponse(parser, messageId);
|
427 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "SetProperty") == 0)
|
428 mike 1.2 response = _decodeSetPropertyResponse(parser, messageId);
|
429 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "DeleteQualifier") == 0)
|
430 mike 1.2 response = _decodeDeleteQualifierResponse(parser, messageId);
|
431 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "GetQualifier") == 0)
|
432 mike 1.2 response = _decodeGetQualifierResponse(parser, messageId);
|
433 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "SetQualifier") == 0)
|
434 mike 1.2 response = _decodeSetQualifierResponse(parser, messageId);
|
435 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "EnumerateQualifiers") == 0)
|
436 mike 1.2 response = _decodeEnumerateQualifiersResponse(parser,messageId);
|
437 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "EnumerateClasses") == 0)
|
438 mike 1.2 response = _decodeEnumerateClassesResponse(parser, messageId);
|
439 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "CreateClass") == 0)
|
440 mike 1.2 response = _decodeCreateClassResponse(parser, messageId);
|
441 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "ModifyClass") == 0)
|
442 mike 1.2 response = _decodeModifyClassResponse(parser, messageId);
|
443 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "ModifyInstance") == 0)
|
444 mike 1.2 response = _decodeModifyInstanceResponse(parser, messageId);
|
445 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "DeleteClass") == 0)
|
446 mike 1.2 response = _decodeDeleteClassResponse(parser, messageId);
|
447 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "DeleteInstance") == 0)
|
448 mike 1.2 response = _decodeDeleteInstanceResponse(parser, messageId);
|
449 kumpf 1.31 else if (System::strcasecmp(iMethodResponseName, "ExecQuery") == 0)
|
450 kumpf 1.10 response = _decodeExecQueryResponse(parser, messageId);
|
451 mike 1.2 else
452 {
453 // Unrecognized IMethodResponse name attribute
454 throw XmlValidationError(parser.getLine(),
455 String("Unrecognized IMethodResponse name \"") +
456 iMethodResponseName + "\"");
457 }
458
459 //
460 // Handle end tag:
461 //
462
463 XmlReader::expectEndTag(parser, "IMETHODRESPONSE");
464 }
465 else if (XmlReader::getMethodResponseStartTag(parser,
466 iMethodResponseName))
467 {
468 response = _decodeInvokeMethodResponse(
469 parser, messageId, iMethodResponseName);
470
471 //
472 mike 1.2 // Handle end tag:
473 //
474 XmlReader::expectEndTag(parser, "METHODRESPONSE");
475 }
476 else
477 {
478 throw XmlValidationError(parser.getLine(),
479 "expected METHODRESPONSE or IMETHODRESPONSE element");
480 }
481
482 //
483 // Handle end tags:
484 //
485 XmlReader::expectEndTag(parser, "SIMPLERSP");
486 XmlReader::expectEndTag(parser, "MESSAGE");
487 XmlReader::expectEndTag(parser, "CIM");
488 }
|
489 kumpf 1.17 catch (XmlException& x)
490 {
|
491 david 1.38 Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::TRACE,
492 "CIMOperationResponseDecoder::_handleMethodResponse - XmlException has occurred. Message: $0",x.getMessage());
493
|
494 kumpf 1.17 if (response)
495 {
|
496 karl 1.41 //#ifdef PEGASUS_SNIA_INTEROP_TEST
497 // httpMessage->printAll(cout);
498 //#endif
499
|
500 kumpf 1.17 delete response;
501 }
502
503 response = new ClientExceptionMessage(
|
504 kumpf 1.20 new CIMClientXmlException(x.getMessage()));
|
505 kumpf 1.17 }
|
506 mike 1.2 catch (Exception& x)
507 {
|
508 kumpf 1.17 // Shouldn't ever get exceptions other than XmlExceptions.
509 PEGASUS_ASSERT(0);
510
511 if (response)
512 {
513 delete response;
514 }
|
515 mike 1.2
|
516 kumpf 1.17 response = new ClientExceptionMessage(
|
517 kumpf 1.28 new Exception(x.getMessage()));
|
518 mike 1.2 }
|
519 chuck 1.39
520 //l10n start
521 // l10n TODO - might want to move A-L and C-L to Message
522 // to make this more maintainable
523 // Add the language header to the request
524 CIMMessage * cimmsg = dynamic_cast<CIMMessage *>(response);
525 if (cimmsg != NULL)
526 {
527 cimmsg->contentLanguages = contentLanguages;
528 }
529 else
530 {
531 ; // l10n TODO - error back to client here
532 }
533 // l10n end
534
|
535 mike 1.2
536 _outputQueue->enqueue(response);
537 }
538
539 CIMCreateClassResponseMessage* CIMOperationResponseDecoder::_decodeCreateClassResponse(
540 XmlParser& parser,
541 const String& messageId)
542 {
543 XmlEntry entry;
|
544 kumpf 1.12 CIMException cimException;
|
545 mike 1.2
|
546 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
547 mike 1.2 {
548 return(new CIMCreateClassResponseMessage(
549 messageId,
|
550 kumpf 1.12 cimException,
|
551 mike 1.2 QueueIdStack()));
552
553 }
|
554 kumpf 1.14 else
|
555 mike 1.2 {
|
556 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
557 kumpf 1.14 {
|
558 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
559 {
560 XmlReader::expectEndTag(parser, "IRETURNVALUE");
561 }
|
562 kumpf 1.14 }
|
563 mike 1.2
564 return(new CIMCreateClassResponseMessage(
565 messageId,
|
566 kumpf 1.12 cimException,
|
567 mike 1.2 QueueIdStack()));
568 }
569 }
570
571 CIMGetClassResponseMessage* CIMOperationResponseDecoder::_decodeGetClassResponse(
572 XmlParser& parser, const String& messageId)
573 {
574 XmlEntry entry;
|
575 kumpf 1.12 CIMException cimException;
|
576 mike 1.2
|
577 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
578 mike 1.2 {
579 return(new CIMGetClassResponseMessage(
580 messageId,
|
581 kumpf 1.12 cimException,
|
582 mike 1.2 QueueIdStack(),
583 CIMClass()));
584 }
|
585 kumpf 1.37 else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
586 mike 1.2 {
587 CIMClass cimClass;
588
|
589 kumpf 1.37 if ((entry.type == XmlEntry::EMPTY_TAG) ||
590 !XmlReader::getClassElement(parser, cimClass))
591 {
|
592 mike 1.2 throw XmlValidationError(parser.getLine(),"expected CLASS element");
|
593 kumpf 1.37 }
|
594 mike 1.2
|
595 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
596 mike 1.2
597 return(new CIMGetClassResponseMessage(
598 messageId,
|
599 kumpf 1.12 cimException,
|
600 mike 1.2 QueueIdStack(),
601 cimClass));
602 }
603 else
604 {
605 throw XmlValidationError(parser.getLine(),
606 "expected ERROR or IRETURNVALUE element");
607 }
608 }
609
610 CIMModifyClassResponseMessage* CIMOperationResponseDecoder::_decodeModifyClassResponse(
611 XmlParser& parser, const String& messageId)
612 {
613 XmlEntry entry;
|
614 kumpf 1.12 CIMException cimException;
|
615 mike 1.2
|
616 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
617 mike 1.2 {
618 return(new CIMModifyClassResponseMessage(
619 messageId,
|
620 kumpf 1.12 cimException,
|
621 mike 1.2 QueueIdStack()));
622 }
|
623 kumpf 1.14 else
|
624 mike 1.2 {
|
625 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
626 kumpf 1.14 {
|
627 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
628 {
629 XmlReader::expectEndTag(parser, "IRETURNVALUE");
630 }
|
631 kumpf 1.14 }
|
632 mike 1.2
633 return(new CIMModifyClassResponseMessage(
634 messageId,
|
635 kumpf 1.12 cimException,
|
636 mike 1.2 QueueIdStack()));
637 }
638 }
639
640 CIMEnumerateClassNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassNamesResponse(
641 XmlParser& parser, const String& messageId)
642 {
643 XmlEntry entry;
|
644 kumpf 1.12 CIMException cimException;
|
645 mike 1.2
|
646 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
647 mike 1.2 {
648 return(new CIMEnumerateClassNamesResponseMessage(
649 messageId,
|
650 kumpf 1.12 cimException,
|
651 mike 1.2 QueueIdStack(),
|
652 kumpf 1.34 Array<CIMName>()));
|
653 mike 1.2 }
|
654 kumpf 1.14 else
|
655 mike 1.2 {
|
656 kumpf 1.34 Array<CIMName> classNames;
|
657 mike 1.2
|
658 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
659 kumpf 1.14 {
|
660 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
661 {
662 CIMName className;
|
663 kumpf 1.14
|
664 kumpf 1.37 while (XmlReader::getClassNameElement(parser, className, false))
665 classNames.append(className);
|
666 mike 1.2
|
667 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
668 }
|
669 kumpf 1.14 }
|
670 mike 1.2
671 return(new CIMEnumerateClassNamesResponseMessage(
672 messageId,
|
673 kumpf 1.12 cimException,
|
674 mike 1.2 QueueIdStack(),
675 classNames));
676 }
677 }
678
679 CIMEnumerateClassesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassesResponse(
680 XmlParser& parser, const String& messageId)
681 {
682 XmlEntry entry;
|
683 kumpf 1.12 CIMException cimException;
|
684 mike 1.2
|
685 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
686 mike 1.2 {
687 return(new CIMEnumerateClassesResponseMessage(
688 messageId,
|
689 kumpf 1.12 cimException,
|
690 mike 1.2 QueueIdStack(),
691 Array<CIMClass>()));
692 }
|
693 kumpf 1.14 else
|
694 mike 1.2 {
695 Array<CIMClass> cimClasses;
696
|
697 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
698 kumpf 1.14 {
|
699 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
700 {
701 CIMClass cimClass;
|
702 kumpf 1.14
|
703 kumpf 1.37 while (XmlReader::getClassElement(parser, cimClass))
704 cimClasses.append(cimClass);
|
705 mike 1.2
|
706 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
707 }
|
708 kumpf 1.14 }
|
709 mike 1.2
710 return(new CIMEnumerateClassesResponseMessage(
711 messageId,
|
712 kumpf 1.12 cimException,
|
713 mike 1.2 QueueIdStack(),
714 cimClasses));
715 }
716 }
717
718 CIMDeleteClassResponseMessage* CIMOperationResponseDecoder::_decodeDeleteClassResponse(
719 XmlParser& parser, const String& messageId)
720 {
721 XmlEntry entry;
|
722 kumpf 1.12 CIMException cimException;
|
723 mike 1.2
|
724 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
725 mike 1.2 {
726 return(new CIMDeleteClassResponseMessage(
727 messageId,
|
728 kumpf 1.12 cimException,
|
729 mike 1.2 QueueIdStack()));
730 }
|
731 kumpf 1.14 else
|
732 mike 1.2 {
|
733 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
734 kumpf 1.14 {
|
735 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
736 {
737 XmlReader::expectEndTag(parser, "IRETURNVALUE");
738 }
|
739 kumpf 1.14 }
|
740 mike 1.2
741 return(new CIMDeleteClassResponseMessage(
742 messageId,
|
743 kumpf 1.12 cimException,
|
744 mike 1.2 QueueIdStack()));
745 }
746 }
747
748 CIMCreateInstanceResponseMessage* CIMOperationResponseDecoder::_decodeCreateInstanceResponse(
749 XmlParser& parser, const String& messageId)
750 {
751 XmlEntry entry;
|
752 kumpf 1.12 CIMException cimException;
|
753 mike 1.2
|
754 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
755 mike 1.2 {
756 return(new CIMCreateInstanceResponseMessage(
757 messageId,
|
758 kumpf 1.12 cimException,
|
759 mike 1.2 QueueIdStack(),
|
760 kumpf 1.21 CIMObjectPath()));
|
761 mike 1.2 }
762 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
763 {
|
764 kumpf 1.21 CIMObjectPath instanceName;
|
765 mike 1.2 XmlReader::getInstanceNameElement(parser, instanceName);
766
|
767 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
768 mike 1.2
769 return(new CIMCreateInstanceResponseMessage(
770 messageId,
|
771 kumpf 1.12 cimException,
|
772 mike 1.2 QueueIdStack(),
773 instanceName));
774 }
775 else
776 {
777 throw XmlValidationError(parser.getLine(),
778 "expected ERROR or IRETURNVALUE element");
779 }
780 }
781
782 CIMGetInstanceResponseMessage* CIMOperationResponseDecoder::_decodeGetInstanceResponse(
783 XmlParser& parser, const String& messageId)
784 {
785 XmlEntry entry;
|
786 kumpf 1.12 CIMException cimException;
|
787 mike 1.2
|
788 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
789 mike 1.2 {
790 return(new CIMGetInstanceResponseMessage(
791 messageId,
|
792 kumpf 1.12 cimException,
|
793 mike 1.2 QueueIdStack(),
794 CIMInstance()));
795 }
|
796 kumpf 1.37 else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
797 mike 1.2 {
798 CIMInstance cimInstance;
799
|
800 kumpf 1.37 if ((entry.type == XmlEntry::EMPTY_TAG) ||
801 !XmlReader::getInstanceElement(parser, cimInstance))
|
802 mike 1.2 {
803 throw XmlValidationError(
804 parser.getLine(), "expected INSTANCE element");
805 }
806
|
807 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
808 mike 1.2
809 return(new CIMGetInstanceResponseMessage(
810 messageId,
|
811 kumpf 1.12 cimException,
|
812 mike 1.2 QueueIdStack(),
813 cimInstance));
814 }
815 else
816 {
817 throw XmlValidationError(parser.getLine(),
818 "expected ERROR or IRETURNVALUE element");
819 }
820 }
821
822 CIMModifyInstanceResponseMessage* CIMOperationResponseDecoder::_decodeModifyInstanceResponse(
823 XmlParser& parser, const String& messageId)
824 {
825 XmlEntry entry;
|
826 kumpf 1.12 CIMException cimException;
|
827 mike 1.2
|
828 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
829 mike 1.2 {
830 return(new CIMModifyInstanceResponseMessage(
831 messageId,
|
832 kumpf 1.12 cimException,
|
833 mike 1.2 QueueIdStack()));
834 }
|
835 kumpf 1.14 else
|
836 mike 1.2 {
|
837 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
838 kumpf 1.14 {
|
839 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
840 {
841 XmlReader::expectEndTag(parser, "IRETURNVALUE");
842 }
|
843 kumpf 1.14 }
|
844 mike 1.2
845 return(new CIMModifyInstanceResponseMessage(
846 messageId,
|
847 kumpf 1.12 cimException,
|
848 mike 1.2 QueueIdStack()));
849 }
850 }
851
852 CIMEnumerateInstanceNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstanceNamesResponse(
853 XmlParser& parser, const String& messageId)
854 {
855 XmlEntry entry;
|
856 kumpf 1.12 CIMException cimException;
|
857 mike 1.2
|
858 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
859 mike 1.2 {
860 return(new CIMEnumerateInstanceNamesResponseMessage(
861 messageId,
|
862 kumpf 1.12 cimException,
|
863 mike 1.2 QueueIdStack(),
|
864 kumpf 1.21 Array<CIMObjectPath>()));
|
865 mike 1.2 }
|
866 kumpf 1.14 else
|
867 mike 1.2 {
|
868 kumpf 1.21 Array<CIMObjectPath> instanceNames;
|
869 mike 1.2
|
870 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
871 mike 1.2 {
|
872 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
873 {
874 String className;
875 Array<CIMKeyBinding> keyBindings;
|
876 kumpf 1.14
|
877 kumpf 1.37 while (XmlReader::getInstanceNameElement(
878 parser, className, keyBindings))
879 {
880 CIMObjectPath r(
881 String::EMPTY,
882 String::EMPTY,
883 className,
884 keyBindings);
885 instanceNames.append(r);
886 }
887
888 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
889 kumpf 1.14 }
|
890 mike 1.2 }
891
892 return(new CIMEnumerateInstanceNamesResponseMessage(
893 messageId,
|
894 kumpf 1.12 cimException,
|
895 mike 1.2 QueueIdStack(),
896 instanceNames));
897 }
898 }
899
900 CIMEnumerateInstancesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstancesResponse(
901 XmlParser& parser, const String& messageId)
902 {
903 XmlEntry entry;
|
904 kumpf 1.12 CIMException cimException;
|
905 mike 1.2
|
906 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
907 mike 1.2 {
908 return(new CIMEnumerateInstancesResponseMessage(
909 messageId,
|
910 kumpf 1.12 cimException,
|
911 mike 1.2 QueueIdStack(),
|
912 kumpf 1.23 Array<CIMInstance>()));
|
913 mike 1.2 }
|
914 kumpf 1.14 else
|
915 mike 1.2 {
|
916 kumpf 1.23 Array<CIMInstance> namedInstances;
|
917 mike 1.2
|
918 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
919 kumpf 1.14 {
|
920 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
921 {
922 CIMInstance namedInstance;
|
923 mike 1.2
|
924 kumpf 1.37 while (XmlReader::getNamedInstanceElement(
925 parser, namedInstance))
926 {
927 namedInstances.append(namedInstance);
928 }
|
929 kumpf 1.14
|
930 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
931 }
|
932 kumpf 1.14 }
|
933 mike 1.2
934 return(new CIMEnumerateInstancesResponseMessage(
935 messageId,
|
936 kumpf 1.12 cimException,
|
937 mike 1.2 QueueIdStack(),
938 namedInstances));
939 }
940 }
941
942 CIMDeleteInstanceResponseMessage* CIMOperationResponseDecoder::_decodeDeleteInstanceResponse(
943 XmlParser& parser, const String& messageId)
944 {
945 XmlEntry entry;
|
946 kumpf 1.12 CIMException cimException;
|
947 mike 1.2
|
948 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
949 mike 1.2 {
950 return(new CIMDeleteInstanceResponseMessage(
951 messageId,
|
952 kumpf 1.12 cimException,
|
953 mike 1.2 QueueIdStack()));
954 }
|
955 kumpf 1.14 else
|
956 mike 1.2 {
|
957 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
958 kumpf 1.14 {
|
959 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
960 {
961 XmlReader::expectEndTag(parser, "IRETURNVALUE");
962 }
|
963 kumpf 1.14 }
|
964 mike 1.2
965 return(new CIMDeleteInstanceResponseMessage(
966 messageId,
|
967 kumpf 1.12 cimException,
|
968 mike 1.2 QueueIdStack()));
969 }
970 }
971
972 CIMGetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeGetPropertyResponse(
973 XmlParser& parser, const String& messageId)
974 {
975 XmlEntry entry;
|
976 kumpf 1.12 CIMException cimException;
|
977 mike 1.2
|
978 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
979 mike 1.2 {
980 return(new CIMGetPropertyResponseMessage(
981 messageId,
|
982 kumpf 1.12 cimException,
|
983 mike 1.2 QueueIdStack(),
984 CIMValue()));
985 }
|
986 kumpf 1.14 else
|
987 mike 1.2 {
|
988 kumpf 1.26 CIMValue cimValue(CIMTYPE_STRING, false);
|
989 kumpf 1.14
|
990 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
991 kumpf 1.14 {
|
992 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
|
993 kumpf 1.14 {
|
994 kumpf 1.37 if (!XmlReader::getPropertyValue(parser, cimValue))
995 {
996 // No value given; just return a null String value
997 }
998
999 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
1000 kumpf 1.14 }
1001 }
1002 else
|
1003 mike 1.2 {
|
1004 kumpf 1.14 // No value given; just return a null String value
|
1005 mike 1.2 }
1006
1007 return(new CIMGetPropertyResponseMessage(
1008 messageId,
|
1009 kumpf 1.12 cimException,
|
1010 mike 1.2 QueueIdStack(),
1011 cimValue));
1012 }
1013 }
1014
1015 CIMSetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeSetPropertyResponse(
1016 XmlParser& parser, const String& messageId)
1017 {
1018 XmlEntry entry;
|
1019 kumpf 1.12 CIMException cimException;
|
1020 mike 1.2
|
1021 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1022 mike 1.2 {
1023 return(new CIMSetPropertyResponseMessage(
1024 messageId,
|
1025 kumpf 1.12 cimException,
|
1026 mike 1.2 QueueIdStack()));
1027 }
|
1028 kumpf 1.14 else
|
1029 mike 1.2 {
|
1030 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1031 kumpf 1.14 {
|
1032 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1033 {
1034 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1035 }
|
1036 kumpf 1.14 }
|
1037 mike 1.2
1038 return(new CIMSetPropertyResponseMessage(
1039 messageId,
|
1040 kumpf 1.12 cimException,
|
1041 mike 1.2 QueueIdStack()));
1042 }
1043 }
1044
1045 CIMSetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeSetQualifierResponse(
1046 XmlParser& parser, const String& messageId)
1047 {
1048 XmlEntry entry;
|
1049 kumpf 1.12 CIMException cimException;
|
1050 mike 1.2
|
1051 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1052 mike 1.2 {
1053 return(new CIMSetQualifierResponseMessage(
1054 messageId,
|
1055 kumpf 1.12 cimException,
|
1056 mike 1.2 QueueIdStack()));
1057 }
|
1058 kumpf 1.14 else
|
1059 mike 1.2 {
|
1060 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1061 kumpf 1.14 {
|
1062 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1063 {
1064 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1065 }
|
1066 kumpf 1.14 }
|
1067 mike 1.2
1068 return(new CIMSetQualifierResponseMessage(
1069 messageId,
|
1070 kumpf 1.12 cimException,
|
1071 mike 1.2 QueueIdStack()));
1072 }
1073 }
1074
1075 CIMGetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeGetQualifierResponse(
1076 XmlParser& parser, const String& messageId)
1077 {
1078 XmlEntry entry;
|
1079 kumpf 1.12 CIMException cimException;
|
1080 mike 1.2
|
1081 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1082 mike 1.2 {
1083 return(new CIMGetQualifierResponseMessage(
1084 messageId,
|
1085 kumpf 1.12 cimException,
|
1086 mike 1.2 QueueIdStack(),
1087 CIMQualifierDecl()));
1088 }
1089 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1090 {
1091 CIMQualifierDecl qualifierDecl;
1092 XmlReader::getQualifierDeclElement(parser, qualifierDecl);
1093
|
1094 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
1095 mike 1.2
1096 return(new CIMGetQualifierResponseMessage(
1097 messageId,
|
1098 kumpf 1.12 cimException,
|
1099 mike 1.2 QueueIdStack(),
1100 qualifierDecl));
1101 }
1102 else
1103 {
1104 throw XmlValidationError(parser.getLine(),
1105 "expected ERROR or IRETURNVALUE element");
1106 }
1107 }
1108
1109 CIMEnumerateQualifiersResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateQualifiersResponse(
1110 XmlParser& parser, const String& messageId)
1111 {
1112 XmlEntry entry;
|
1113 kumpf 1.12 CIMException cimException;
|
1114 mike 1.2
|
1115 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1116 mike 1.2 {
1117 return(new CIMEnumerateQualifiersResponseMessage(
1118 messageId,
|
1119 kumpf 1.12 cimException,
|
1120 mike 1.2 QueueIdStack(),
1121 Array<CIMQualifierDecl>()));
1122 }
|
1123 kumpf 1.14 else
|
1124 mike 1.2 {
1125 Array<CIMQualifierDecl> qualifierDecls;
1126
|
1127 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1128 kumpf 1.14 {
|
1129 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1130 {
1131 CIMQualifierDecl qualifierDecl;
|
1132 kumpf 1.14
|
1133 kumpf 1.37 while (XmlReader::getQualifierDeclElement(
1134 parser, qualifierDecl))
1135 {
1136 qualifierDecls.append(qualifierDecl);
1137 }
|
1138 mike 1.2
|
1139 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1140 }
|
1141 kumpf 1.14 }
|
1142 mike 1.2
1143 return(new CIMEnumerateQualifiersResponseMessage(
1144 messageId,
|
1145 kumpf 1.12 cimException,
|
1146 mike 1.2 QueueIdStack(),
1147 qualifierDecls));
1148 }
1149 }
1150
1151 CIMDeleteQualifierResponseMessage* CIMOperationResponseDecoder::_decodeDeleteQualifierResponse(
1152 XmlParser& parser, const String& messageId)
1153 {
1154 XmlEntry entry;
|
1155 kumpf 1.12 CIMException cimException;
|
1156 mike 1.2
|
1157 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1158 mike 1.2 {
1159 return(new CIMDeleteQualifierResponseMessage(
1160 messageId,
|
1161 kumpf 1.12 cimException,
|
1162 mike 1.2 QueueIdStack()));
1163 }
|
1164 kumpf 1.14 else
|
1165 mike 1.2 {
|
1166 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1167 kumpf 1.14 {
|
1168 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1169 {
1170 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1171 }
|
1172 kumpf 1.14 }
|
1173 mike 1.2
1174 return(new CIMDeleteQualifierResponseMessage(
1175 messageId,
|
1176 kumpf 1.12 cimException,
|
1177 mike 1.2 QueueIdStack()));
1178 }
1179 }
1180
1181 //MEB:
1182
1183 CIMReferenceNamesResponseMessage* CIMOperationResponseDecoder::_decodeReferenceNamesResponse(
1184 XmlParser& parser, const String& messageId)
1185 {
1186 XmlEntry entry;
|
1187 kumpf 1.12 CIMException cimException;
|
1188 mike 1.2
|
1189 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1190 mike 1.2 {
1191 return(new CIMReferenceNamesResponseMessage(
1192 messageId,
|
1193 kumpf 1.12 cimException,
|
1194 mike 1.2 QueueIdStack(),
|
1195 kumpf 1.21 Array<CIMObjectPath>()));
|
1196 mike 1.2 }
|
1197 kumpf 1.14 else
|
1198 mike 1.2 {
|
1199 kumpf 1.21 Array<CIMObjectPath> objectPaths;
|
1200 mike 1.2
|
1201 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1202 kumpf 1.14 {
|
1203 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1204 {
1205 CIMObjectPath objectPath;
|
1206 kumpf 1.14
|
1207 kumpf 1.37 while (XmlReader::getObjectPathElement(parser, objectPath))
1208 objectPaths.append(objectPath);
|
1209 mike 1.2
|
1210 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1211 }
|
1212 kumpf 1.14 }
|
1213 mike 1.2
1214 return(new CIMReferenceNamesResponseMessage(
1215 messageId,
|
1216 kumpf 1.12 cimException,
|
1217 mike 1.2 QueueIdStack(),
1218 objectPaths));
1219 }
1220 }
1221
1222 CIMReferencesResponseMessage* CIMOperationResponseDecoder::_decodeReferencesResponse(
1223 XmlParser& parser, const String& messageId)
1224 {
1225 XmlEntry entry;
|
1226 kumpf 1.12 CIMException cimException;
|
1227 mike 1.2
|
1228 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1229 mike 1.2 {
1230 return(new CIMReferencesResponseMessage(
1231 messageId,
|
1232 kumpf 1.12 cimException,
|
1233 mike 1.2 QueueIdStack(),
|
1234 kumpf 1.24 Array<CIMObject>()));
|
1235 mike 1.2 }
|
1236 kumpf 1.14 else
|
1237 mike 1.2 {
|
1238 kumpf 1.24 Array<CIMObject> objectWithPathArray;
|
1239 mike 1.2
|
1240 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1241 kumpf 1.14 {
|
1242 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1243 {
1244 CIMObject objectWithPath;
|
1245 kumpf 1.14
|
1246 kumpf 1.37 while (XmlReader::getValueObjectWithPathElement(
1247 parser, objectWithPath))
1248 {
1249 objectWithPathArray.append(objectWithPath);
1250 }
|
1251 mike 1.2
|
1252 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1253 }
|
1254 kumpf 1.14 }
|
1255 mike 1.2
1256 return(new CIMReferencesResponseMessage(
1257 messageId,
|
1258 kumpf 1.12 cimException,
|
1259 mike 1.2 QueueIdStack(),
1260 objectWithPathArray));
1261 }
1262 }
1263
1264 CIMAssociatorNamesResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorNamesResponse(
1265 XmlParser& parser, const String& messageId)
1266 {
1267 XmlEntry entry;
|
1268 kumpf 1.12 CIMException cimException;
|
1269 mike 1.2
|
1270 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1271 mike 1.2 {
1272 return(new CIMAssociatorNamesResponseMessage(
1273 messageId,
|
1274 kumpf 1.12 cimException,
|
1275 mike 1.2 QueueIdStack(),
|
1276 kumpf 1.21 Array<CIMObjectPath>()));
|
1277 mike 1.2 }
|
1278 kumpf 1.14 else
|
1279 mike 1.2 {
|
1280 kumpf 1.21 Array<CIMObjectPath> objectPaths;
|
1281 mike 1.2
|
1282 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1283 kumpf 1.14 {
|
1284 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1285 {
1286 CIMObjectPath objectPath;
|
1287 kumpf 1.14
|
1288 kumpf 1.37 while (XmlReader::getObjectPathElement(parser, objectPath))
1289 objectPaths.append(objectPath);
|
1290 mike 1.2
|
1291 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1292 }
|
1293 kumpf 1.14 }
|
1294 mike 1.2
1295 return(new CIMAssociatorNamesResponseMessage(
1296 messageId,
|
1297 kumpf 1.12 cimException,
|
1298 mike 1.2 QueueIdStack(),
1299 objectPaths));
1300 }
1301 }
1302
1303 CIMAssociatorsResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorsResponse(
1304 XmlParser& parser, const String& messageId)
1305 {
1306 XmlEntry entry;
|
1307 kumpf 1.12 CIMException cimException;
|
1308 mike 1.2
|
1309 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1310 mike 1.2 {
1311 return(new CIMAssociatorsResponseMessage(
1312 messageId,
|
1313 kumpf 1.12 cimException,
|
1314 mike 1.2 QueueIdStack(),
|
1315 kumpf 1.24 Array<CIMObject>()));
|
1316 mike 1.2 }
|
1317 kumpf 1.14 else
|
1318 mike 1.2 {
|
1319 kumpf 1.24 Array<CIMObject> objectWithPathArray;
|
1320 mike 1.2
|
1321 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1322 kumpf 1.14 {
|
1323 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1324 {
1325 CIMObject objectWithPath;
|
1326 mike 1.2
|
1327 kumpf 1.37 while (XmlReader::getValueObjectWithPathElement(
1328 parser, objectWithPath))
1329 {
1330 objectWithPathArray.append(objectWithPath);
1331 }
|
1332 kumpf 1.14
|
1333 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1334 }
|
1335 kumpf 1.14 }
|
1336 mike 1.2
1337 return(new CIMAssociatorsResponseMessage(
|
1338 kumpf 1.10 messageId,
|
1339 kumpf 1.12 cimException,
|
1340 kumpf 1.10 QueueIdStack(),
1341 objectWithPathArray));
1342 }
1343 }
1344
1345 CIMExecQueryResponseMessage* CIMOperationResponseDecoder::_decodeExecQueryResponse(
1346 XmlParser& parser, const String& messageId)
1347 {
1348 XmlEntry entry;
|
1349 kumpf 1.12 CIMException cimException;
|
1350 kumpf 1.10
|
1351 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1352 kumpf 1.10 {
1353 return(new CIMExecQueryResponseMessage(
1354 messageId,
|
1355 kumpf 1.12 cimException,
|
1356 kumpf 1.10 QueueIdStack(),
|
1357 kumpf 1.24 Array<CIMObject>()));
|
1358 kumpf 1.10 }
|
1359 kumpf 1.14 else
|
1360 kumpf 1.10 {
|
1361 kumpf 1.24 Array<CIMObject> objectWithPathArray;
|
1362 kumpf 1.10
|
1363 kumpf 1.37 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1364 kumpf 1.14 {
|
1365 kumpf 1.37 if (entry.type != XmlEntry::EMPTY_TAG)
1366 {
1367 XmlReader::getObjectArray(parser, objectWithPathArray);
|
1368 kumpf 1.10
|
1369 kumpf 1.37 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1370 }
|
1371 kumpf 1.14 }
|
1372 kumpf 1.10
1373 return(new CIMExecQueryResponseMessage(
|
1374 mike 1.2 messageId,
|
1375 kumpf 1.12 cimException,
|
1376 mike 1.2 QueueIdStack(),
1377 objectWithPathArray));
1378 }
1379 }
1380
1381 CIMInvokeMethodResponseMessage* CIMOperationResponseDecoder::_decodeInvokeMethodResponse(
1382 XmlParser& parser, const String& messageId, const String& methodName)
1383 {
1384 XmlEntry entry;
|
1385 kumpf 1.12 CIMException cimException;
|
1386 mike 1.2
|
1387 kumpf 1.5 CIMParamValue paramValue;
1388 Array<CIMParamValue> outParameters;
|
1389 kumpf 1.6 CIMValue returnValue;
|
1390 mike 1.2 const char* paramName;
1391 String inValue;
1392
|
1393 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1394 mike 1.2 {
1395 return(new CIMInvokeMethodResponseMessage(
1396 messageId,
|
1397 kumpf 1.12 cimException,
|
1398 mike 1.2 QueueIdStack(),
|
1399 kumpf 1.6 returnValue,
|
1400 mike 1.2 outParameters,
1401 methodName));
1402 }
|
1403 kumpf 1.4 else
|
1404 mike 1.2 {
|
1405 kumpf 1.4 Boolean isReturnValue = false;
1406 Boolean isParamValue = false;
1407 Boolean gotReturnValue = false;
1408
1409 while ((isReturnValue =
|
1410 kumpf 1.6 XmlReader::getReturnValueElement(parser, returnValue)) ||
|
1411 kumpf 1.5 (isParamValue =
1412 XmlReader::getParamValueElement(parser, paramValue)))
|
1413 kumpf 1.4 {
1414 if (isReturnValue)
1415 {
1416 if (gotReturnValue)
1417 {
1418 throw XmlValidationError(parser.getLine(),
1419 "unexpected RETURNVALUE element");
1420 }
1421 gotReturnValue = true;
1422 }
1423 else // isParamValue == true
1424 {
|
1425 kumpf 1.5 outParameters.append(paramValue);
|
1426 kumpf 1.4 }
1427
1428 isReturnValue = false;
1429 isParamValue = false;
1430 }
1431
|
1432 mike 1.2 return(new CIMInvokeMethodResponseMessage(
1433 messageId,
|
1434 kumpf 1.12 cimException,
|
1435 mike 1.2 QueueIdStack(),
|
1436 kumpf 1.6 returnValue,
|
1437 mike 1.2 outParameters,
1438 methodName));
1439 }
1440 }
1441
1442 PEGASUS_NAMESPACE_END
|