(file) Return to CIMOperationResponseDecoder.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Client

   1 mike  1.1.2.1 //%/////////////////////////////////////////////////////////////////////////////
   2               //
   3 kumpf 1.1.2.5 // Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM,
   4               // The Open Group, Tivoli Systems
   5 mike  1.1.2.1 //
   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               //
  13               // 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 kumpf 1.1.2.5 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
  27 kumpf 1.1.2.11 //              Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
  28 kumpf 1.1.2.10 //              Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
  29 kumpf 1.1.2.11 //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
  30 kumpf 1.1.2.10 //
  31 mike  1.1.2.1  //%/////////////////////////////////////////////////////////////////////////////
  32                
  33                #include <iostream>
  34                #include <Pegasus/Common/Config.h>
  35 mike  1.1.2.2  #include <Pegasus/Common/XmlParser.h>
  36                #include <Pegasus/Common/XmlReader.h>
  37 mike  1.1.2.1  #include <Pegasus/Common/System.h>
  38                #include <Pegasus/Common/XmlWriter.h>
  39                #include <Pegasus/Common/HTTPMessage.h>
  40                #include <Pegasus/Common/CIMMessage.h>
  41                #include "CIMOperationResponseDecoder.h"
  42                
  43                PEGASUS_USING_STD;
  44                
  45                PEGASUS_NAMESPACE_BEGIN
  46                
  47                CIMOperationResponseDecoder::CIMOperationResponseDecoder(
  48 kumpf 1.1.2.10     MessageQueue* outputQueue,
  49                    MessageQueue* encoderQueue,
  50                    ClientAuthenticator* authenticator)
  51                    :
  52                    _outputQueue(outputQueue),
  53                    _encoderQueue(encoderQueue),
  54                    _authenticator(authenticator)
  55 mike  1.1.2.1  {
  56                
  57                }
  58                
  59                CIMOperationResponseDecoder::~CIMOperationResponseDecoder()
  60                {
  61                
  62                }
  63                
  64 kumpf 1.1.2.10 void  CIMOperationResponseDecoder::setEncoderQueue(MessageQueue* encoderQueue)
  65                {
  66                    _encoderQueue = encoderQueue;
  67                }
  68                
  69 mike  1.1.2.1  void CIMOperationResponseDecoder::handleEnqueue()
  70                {
  71                    Message* message = dequeue();
  72                
  73                    if (!message)
  74                	return;
  75                
  76                    switch (message->getType())
  77                    {
  78                	case HTTP_MESSAGE:
  79                	{
  80                	    HTTPMessage* httpMessage = (HTTPMessage*)message;
  81 mike  1.1.2.2  	    _handleHTTPMessage(httpMessage);
  82                	    break;
  83 mike  1.1.2.1  	}
  84                
  85                	default:
  86                	    // ATTN: send this to the orphan queue!
  87                	    break;
  88                    }
  89                
  90                    delete message;
  91                }
  92                
  93                const char* CIMOperationResponseDecoder::getQueueName() const
  94                {
  95                    return "CIMOperationResponseDecoder";
  96                }
  97                
  98 mike  1.1.2.2  void CIMOperationResponseDecoder::_handleHTTPMessage(HTTPMessage* httpMessage)
  99                {
 100                    //
 101                    // Parse the HTTP message:
 102                    //
 103                
 104                    String startLine;
 105                    Array<HTTPHeader> headers;
 106                    Sint8* content;
 107                    Uint32 contentLength;
 108                
 109 kumpf 1.1.2.12     httpMessage->parse(startLine, headers, contentLength);
 110 mike  1.1.2.2  
 111 kumpf 1.1.2.10     if (_authenticator->checkResponseHeaderForChallenge(headers))
 112                    {
 113                        //
 114                        // Get the original request, put that in the encoder's queue for
 115                        // re-sending with authentication challenge response.
 116                        //
 117                
 118                        Message* reqMessage = _authenticator->getRequestMessage();
 119                        _encoderQueue->enqueue(reqMessage);
 120                
 121                        return;
 122                    }
 123                    else
 124                    {
 125                
 126                        //
 127                        // Received a valid/error response from the server.
 128                        // We do not need the original request message anymore, hence delete
 129                        // the request message by getting the handle from the ClientAuthenticator.
 130                        //
 131                        Message* reqMessage = _authenticator->getRequestMessage();
 132 kumpf 1.1.2.10         if (reqMessage)
 133                        {
 134                            delete reqMessage;
 135                        }
 136                    }
 137                
 138 mike  1.1.2.2      //
 139                    // Search for "CIMOperation" header:
 140                    //
 141                
 142                    String cimOperation;
 143                
 144                    if (!HTTPMessage::lookupHeader(
 145                	headers, "*CIMOperation", cimOperation, true))
 146                    {
 147                	// ATTN: error discarded at this time!
 148                	return;
 149                    }
 150                
 151                    //
 152                    // Zero-terminate the message:
 153                    //
 154                
 155                    httpMessage->message.append('\0');
 156 kumpf 1.1.2.12 
 157                    // Calculate the beginning of the content from the message size and
 158                    // the content length.  Subtract 1 to take into account the null
 159                    // character we just added to the end of the message.
 160                
 161                    content = (Sint8*) httpMessage->message.getData() +
 162                	httpMessage->message.size() - contentLength - 1;
 163 mike  1.1.2.2  
 164                    //
 165                    // If it is a method response, then dispatch it to be handled:
 166                    //
 167                
 168 mike  1.1.2.4      if (!String::equalNoCase(cimOperation, "MethodResponse"))
 169 mike  1.1.2.2      {
 170                	// ATTN: error discarded at this time!
 171                	return;
 172                    }
 173                
 174                    _handleMethodResponse(content);
 175                }
 176                
 177                void CIMOperationResponseDecoder::_handleMethodResponse(char* content)
 178                {
 179 mike  1.1.2.9      Message* response = 0;
 180                
 181 mike  1.1.2.2      //
 182                    // Create and initialize XML parser:
 183                    //
 184                
 185                    XmlParser parser((char*)content);
 186                    XmlEntry entry;
 187                
 188                    try
 189                    {
 190                	//
 191                	// Process <?xml ... >
 192                	//
 193                
 194                	XmlReader::expectXmlDeclaration(parser, entry);
 195                
 196                	//
 197                	// Process <CIM ... >
 198                	//
 199                
 200                	XmlReader::testCimStartTag(parser);
 201                
 202 mike  1.1.2.2  	//
 203                	// Expect <MESSAGE ... >
 204                	//
 205                
 206                	String messageId;
 207                	const char* protocolVersion = 0;
 208                
 209                	if (!XmlReader::getMessageStartTag(parser, messageId, protocolVersion))
 210                	    throw XmlValidationError(
 211                		parser.getLine(), "expected MESSAGE element");
 212                
 213                	if (strcmp(protocolVersion, "1.0") != 0)
 214                	{
 215                	    // ATTN: protocol version being ignored at present!
 216                
 217                	    return;
 218                	}
 219                
 220                	//
 221                	// Expect <SIMPLERSP ... >
 222                	//
 223 mike  1.1.2.2  
 224                	XmlReader::expectStartTag(parser, entry, "SIMPLERSP");
 225                
 226                	//
 227                	// Expect <IMETHODRESPONSE ... >
 228                	//
 229                
 230                	const char* iMethodResponseName = 0;
 231                
 232 kumpf 1.1.2.5  	if (XmlReader::getIMethodResponseStartTag(parser, iMethodResponseName))
 233 mike  1.1.2.2  	{
 234 kumpf 1.1.2.5  	    //
 235                	    // Dispatch the method:
 236                	    //
 237                
 238                	    if (EqualNoCase(iMethodResponseName, "GetClass"))
 239 kumpf 1.1.2.6  		response = _decodeGetClassResponse(parser, messageId);
 240 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "GetInstance"))
 241 kumpf 1.1.2.6  		response = _decodeGetInstanceResponse(parser, messageId);
 242 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "EnumerateClassNames"))
 243 mike  1.1.2.9  		response = _decodeEnumerateClassNamesResponse(parser,messageId);
 244 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "References"))
 245 kumpf 1.1.2.6  		response = _decodeReferencesResponse(parser, messageId);
 246 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "ReferenceNames"))
 247 kumpf 1.1.2.6  		response = _decodeReferenceNamesResponse(parser, messageId);
 248 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "AssociatorNames"))
 249 kumpf 1.1.2.6  		response = _decodeAssociatorNamesResponse(parser, messageId);
 250 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "Associators"))
 251 kumpf 1.1.2.6  		response = _decodeAssociatorsResponse(parser, messageId);
 252 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "CreateInstance"))
 253 kumpf 1.1.2.6  		response = _decodeCreateInstanceResponse(parser, messageId);
 254 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName,"EnumerateInstanceNames"))
 255 mike  1.1.2.9  		response = _decodeEnumerateInstanceNamesResponse(
 256 kumpf 1.1.2.10                   parser, messageId);
 257 kumpf 1.1.2.8  	    else if (EqualNoCase(iMethodResponseName,"EnumerateInstances"))
 258                		response = _decodeEnumerateInstancesResponse(parser, messageId);
 259                	    else if (EqualNoCase(iMethodResponseName, "GetProperty"))
 260                		response = _decodeGetPropertyResponse(parser, messageId);
 261                	    else if (EqualNoCase(iMethodResponseName, "SetProperty"))
 262                		response = _decodeSetPropertyResponse(parser, messageId);
 263 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "DeleteQualifier"))
 264 kumpf 1.1.2.6  		response = _decodeDeleteQualifierResponse(parser, messageId);
 265 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "GetQualifier"))
 266 kumpf 1.1.2.6  		response = _decodeGetQualifierResponse(parser, messageId);
 267 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "SetQualifier"))
 268 kumpf 1.1.2.6  		response = _decodeSetQualifierResponse(parser, messageId);
 269 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "EnumerateQualifiers"))
 270 mike  1.1.2.9  		response = _decodeEnumerateQualifiersResponse(parser,messageId);
 271 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "EnumerateClasses"))
 272 kumpf 1.1.2.6  		response = _decodeEnumerateClassesResponse(parser, messageId);
 273 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "CreateClass"))
 274 kumpf 1.1.2.6  		response = _decodeCreateClassResponse(parser, messageId);
 275 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "ModifyClass"))
 276 kumpf 1.1.2.6  		response = _decodeModifyClassResponse(parser, messageId);
 277 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "ModifyInstance"))
 278 kumpf 1.1.2.6  		response = _decodeModifyInstanceResponse(parser, messageId);
 279 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "DeleteClass"))
 280 kumpf 1.1.2.6  		response = _decodeDeleteClassResponse(parser, messageId);
 281 kumpf 1.1.2.5  	    else if (EqualNoCase(iMethodResponseName, "DeleteInstance"))
 282 kumpf 1.1.2.6  		response = _decodeDeleteInstanceResponse(parser, messageId);
 283 mike  1.1.2.9  	    else
 284                	    {
 285 kumpf 1.1.2.10     	        // ATTN: This message is received due to InvokeMethod 
 286                	        // from Serevr
 287 mike  1.1.2.9  
 288 kumpf 1.1.2.10 	        // We better return since response is unitialized if
 289                	        // this is reached. For now we print a message:
 290                	
 291                	        cout << "INFORM: " << __FILE__ << "(" << __LINE__ << "): ";
 292                	        cout << "Unexpected case" << endl;
 293                	        return;
 294 mike  1.1.2.9  	    }
 295 kumpf 1.1.2.5  	
 296                	    //
 297                	    // Handle end tags:
 298                	    //
 299 mike  1.1.2.2  
 300 kumpf 1.1.2.5  	    XmlReader::expectEndTag(parser, "IMETHODRESPONSE");
 301 mike  1.1.2.2  	}
 302 kumpf 1.1.2.5  	else if (XmlReader::getMethodResponseStartTag(parser, 
 303                	    iMethodResponseName))
 304                	{
 305 mike  1.1.2.9  	    response = _decodeInvokeMethodResponse(
 306 kumpf 1.1.2.10               parser, messageId, iMethodResponseName);
 307 mike  1.1.2.2  
 308 kumpf 1.1.2.5  	    //
 309                	    // Handle end tags:
 310                	    //
 311                	    XmlReader::expectEndTag(parser, "METHODRESPONSE");
 312                	}
 313                	else
 314                	{
 315                	    // ATTN: error ignored for now!
 316 mike  1.1.2.2  
 317 kumpf 1.1.2.5  	    return;
 318                	}
 319 mike  1.1.2.2  
 320                	XmlReader::expectEndTag(parser, "SIMPLERSP");
 321                	XmlReader::expectEndTag(parser, "MESSAGE");
 322                	XmlReader::expectEndTag(parser, "CIM");
 323                    }
 324                    catch (Exception& x)
 325                    {
 326                	// ATTN: ignore the exception for now!
 327                
 328                	cout << x.getMessage() << endl;
 329                	return;
 330                    }
 331 kumpf 1.1.2.6  
 332                    _outputQueue->enqueue(response);
 333 mike  1.1.2.2  }
 334                
 335 kumpf 1.1.2.6  CIMCreateClassResponseMessage* CIMOperationResponseDecoder::_decodeCreateClassResponse(
 336 mike  1.1.2.2      XmlParser& parser, 
 337                    const String& messageId)
 338 mike  1.1.2.1  {
 339 mike  1.1.2.3      XmlEntry entry;
 340                    CIMStatusCode code;
 341                    const char* description = 0;
 342                
 343                    if (XmlReader::getErrorElement(parser, code, description))
 344                    {
 345 kumpf 1.1.2.6  	return(new CIMCreateClassResponseMessage(
 346 mike  1.1.2.3  	    messageId,
 347                	    code,
 348                	    description,
 349                	    QueueIdStack()));
 350                
 351                    }
 352                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 353                    {
 354                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 355                
 356 kumpf 1.1.2.6  	return(new CIMCreateClassResponseMessage(
 357 mike  1.1.2.3  	    messageId,
 358                	    CIM_ERR_SUCCESS,
 359                	    String(),
 360                	    QueueIdStack()));
 361                    }
 362                    else
 363                    {
 364                	throw XmlValidationError(parser.getLine(),
 365                	    "expected ERROR or IRETURNVALUE element");
 366                    }
 367 mike  1.1.2.1  }
 368                
 369 kumpf 1.1.2.6  CIMGetClassResponseMessage* CIMOperationResponseDecoder::_decodeGetClassResponse(
 370 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 371 mike  1.1.2.1  {
 372 mike  1.1.2.2      XmlEntry entry;
 373                    CIMStatusCode code;
 374                    const char* description = 0;
 375                
 376                    if (XmlReader::getErrorElement(parser, code, description))
 377                    {
 378 kumpf 1.1.2.6  	return(new CIMGetClassResponseMessage(
 379 mike  1.1.2.2  	    messageId,
 380                	    code,
 381                	    description,
 382                	    QueueIdStack(),
 383 mike  1.1.2.3  	    CIMClass()));
 384 mike  1.1.2.2      }
 385                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 386                    {
 387                	CIMClass cimClass;
 388                
 389                	if (!XmlReader::getClassElement(parser, cimClass))
 390                	    throw XmlValidationError(parser.getLine(),"expected CLASS element");
 391                
 392                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 393                
 394 kumpf 1.1.2.6  	return(new CIMGetClassResponseMessage(
 395 mike  1.1.2.2  	    messageId,
 396                	    CIM_ERR_SUCCESS,
 397                	    String(),
 398                	    QueueIdStack(),
 399 mike  1.1.2.3  	    cimClass));
 400 mike  1.1.2.2      }
 401                    else
 402                    {
 403                	throw XmlValidationError(parser.getLine(),
 404                	    "expected ERROR or IRETURNVALUE element");
 405                    }
 406 mike  1.1.2.1  }
 407                
 408 kumpf 1.1.2.6  CIMModifyClassResponseMessage* CIMOperationResponseDecoder::_decodeModifyClassResponse(
 409 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 410 mike  1.1.2.1  {
 411 mike  1.1.2.3      XmlEntry entry;
 412                    CIMStatusCode code;
 413                    const char* description = 0;
 414                
 415                    if (XmlReader::getErrorElement(parser, code, description))
 416                    {
 417 kumpf 1.1.2.6  	return(new CIMModifyClassResponseMessage(
 418 mike  1.1.2.3  	    messageId,
 419                	    code,
 420                	    description,
 421                	    QueueIdStack()));
 422                    }
 423                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 424                    {
 425                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 426                
 427 kumpf 1.1.2.6  	return(new CIMModifyClassResponseMessage(
 428 mike  1.1.2.3  	    messageId,
 429                	    CIM_ERR_SUCCESS,
 430                	    String(),
 431                	    QueueIdStack()));
 432                    }
 433                    else
 434                    {
 435                	throw XmlValidationError(parser.getLine(),
 436                	    "expected ERROR or IRETURNVALUE element");
 437                    }
 438 mike  1.1.2.1  }
 439                
 440 kumpf 1.1.2.6  CIMEnumerateClassNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassNamesResponse(
 441 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 442 mike  1.1.2.1  {
 443 mike  1.1.2.3      XmlEntry entry;
 444                    CIMStatusCode code;
 445                    const char* description = 0;
 446                
 447                    if (XmlReader::getErrorElement(parser, code, description))
 448                    {
 449 kumpf 1.1.2.6  	return(new CIMEnumerateClassNamesResponseMessage(
 450 mike  1.1.2.3  	    messageId,
 451                	    code,
 452                	    description,
 453                	    QueueIdStack(),
 454                	    Array<String>()));
 455                    }
 456                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 457                    {
 458                	Array<String> classNames;
 459                	String className;
 460                
 461                	while (XmlReader::getClassNameElement(parser, className, false))
 462                	    classNames.append(className);
 463                
 464                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 465                
 466 kumpf 1.1.2.6  	return(new CIMEnumerateClassNamesResponseMessage(
 467 mike  1.1.2.3  	    messageId,
 468                	    CIM_ERR_SUCCESS,
 469                	    String(),
 470                	    QueueIdStack(),
 471                	    classNames));
 472                    }
 473                    else
 474                    {
 475                	throw XmlValidationError(parser.getLine(),
 476                	    "expected ERROR or IRETURNVALUE element");
 477                    }
 478 mike  1.1.2.1  }
 479                
 480 kumpf 1.1.2.6  CIMEnumerateClassesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassesResponse(
 481 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 482 mike  1.1.2.1  {
 483 mike  1.1.2.3      XmlEntry entry;
 484                    CIMStatusCode code;
 485                    const char* description = 0;
 486                
 487                    if (XmlReader::getErrorElement(parser, code, description))
 488                    {
 489 kumpf 1.1.2.6  	return(new CIMEnumerateClassesResponseMessage(
 490 mike  1.1.2.3  	    messageId,
 491                	    code,
 492                	    description,
 493                	    QueueIdStack(),
 494                	    Array<CIMClass>()));
 495                    }
 496                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 497                    {
 498                	Array<CIMClass> cimClasses;
 499                	CIMClass cimClass;
 500                
 501                	while (XmlReader::getClassElement(parser, cimClass))
 502                	    cimClasses.append(cimClass);
 503                
 504                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 505                
 506 kumpf 1.1.2.6  	return(new CIMEnumerateClassesResponseMessage(
 507 mike  1.1.2.3  	    messageId,
 508                	    CIM_ERR_SUCCESS,
 509                	    String(),
 510                	    QueueIdStack(),
 511                	    cimClasses));
 512                    }
 513                    else
 514                    {
 515                	throw XmlValidationError(parser.getLine(),
 516                	    "expected ERROR or IRETURNVALUE element");
 517                    }
 518 mike  1.1.2.1  }
 519                
 520 kumpf 1.1.2.6  CIMDeleteClassResponseMessage* CIMOperationResponseDecoder::_decodeDeleteClassResponse(
 521 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 522 mike  1.1.2.1  {
 523 mike  1.1.2.3      XmlEntry entry;
 524                    CIMStatusCode code;
 525                    const char* description = 0;
 526                
 527                    if (XmlReader::getErrorElement(parser, code, description))
 528                    {
 529 kumpf 1.1.2.6  	return(new CIMDeleteClassResponseMessage(
 530 mike  1.1.2.3  	    messageId,
 531                	    code,
 532                	    description,
 533                	    QueueIdStack()));
 534                    }
 535                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 536                    {
 537                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 538                
 539 kumpf 1.1.2.6  	return(new CIMDeleteClassResponseMessage(
 540 mike  1.1.2.3  	    messageId,
 541                	    CIM_ERR_SUCCESS,
 542                	    String(),
 543                	    QueueIdStack()));
 544                    }
 545                    else
 546                    {
 547                	throw XmlValidationError(parser.getLine(),
 548                	    "expected ERROR or IRETURNVALUE element");
 549                    }
 550 mike  1.1.2.1  }
 551                
 552 kumpf 1.1.2.6  CIMCreateInstanceResponseMessage* CIMOperationResponseDecoder::_decodeCreateInstanceResponse(
 553 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 554 mike  1.1.2.1  {
 555 mike  1.1.2.3      XmlEntry entry;
 556                    CIMStatusCode code;
 557                    const char* description = 0;
 558                
 559                    if (XmlReader::getErrorElement(parser, code, description))
 560                    {
 561 kumpf 1.1.2.6  	return(new CIMCreateInstanceResponseMessage(
 562 mike  1.1.2.3  	    messageId,
 563                	    code,
 564                	    description,
 565 kumpf 1.1.2.7  	    QueueIdStack(),
 566                	    CIMReference()));
 567 mike  1.1.2.3      }
 568                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 569                    {
 570 kumpf 1.1.2.7  	CIMReference instanceName;
 571                	XmlReader::getInstanceNameElement(parser, instanceName);
 572                
 573 mike  1.1.2.3  	XmlReader::testEndTag(parser, "IRETURNVALUE");
 574                
 575 kumpf 1.1.2.6  	return(new CIMCreateInstanceResponseMessage(
 576 mike  1.1.2.3  	    messageId,
 577                	    CIM_ERR_SUCCESS,
 578                	    String(),
 579 kumpf 1.1.2.7  	    QueueIdStack(),
 580                	    instanceName));
 581 mike  1.1.2.3      }
 582                    else
 583                    {
 584                	throw XmlValidationError(parser.getLine(),
 585                	    "expected ERROR or IRETURNVALUE element");
 586                    }
 587 mike  1.1.2.1  }
 588                
 589 kumpf 1.1.2.6  CIMGetInstanceResponseMessage* CIMOperationResponseDecoder::_decodeGetInstanceResponse(
 590 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 591 mike  1.1.2.1  {
 592 mike  1.1.2.3      XmlEntry entry;
 593                    CIMStatusCode code;
 594                    const char* description = 0;
 595                
 596                    if (XmlReader::getErrorElement(parser, code, description))
 597                    {
 598 kumpf 1.1.2.6  	return(new CIMGetInstanceResponseMessage(
 599 mike  1.1.2.3  	    messageId,
 600                	    code,
 601                	    description,
 602                	    QueueIdStack(),
 603                	    CIMInstance()));
 604                    }
 605                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 606                    {
 607                	CIMInstance cimInstance;
 608                
 609                	if (!XmlReader::getInstanceElement(parser, cimInstance))
 610                	{
 611                	    throw XmlValidationError(
 612                		parser.getLine(), "expected INSTANCE element");
 613                	}
 614                
 615                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 616                
 617 kumpf 1.1.2.6  	return(new CIMGetInstanceResponseMessage(
 618 mike  1.1.2.3  	    messageId,
 619                	    CIM_ERR_SUCCESS,
 620                	    String(),
 621                	    QueueIdStack(),
 622                	    cimInstance));
 623                    }
 624                    else
 625                    {
 626                	throw XmlValidationError(parser.getLine(),
 627                	    "expected ERROR or IRETURNVALUE element");
 628                    }
 629 mike  1.1.2.1  }
 630                
 631 kumpf 1.1.2.6  CIMModifyInstanceResponseMessage* CIMOperationResponseDecoder::_decodeModifyInstanceResponse(
 632 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 633 mike  1.1.2.1  {
 634 mike  1.1.2.3      XmlEntry entry;
 635                    CIMStatusCode code;
 636                    const char* description = 0;
 637                
 638                    if (XmlReader::getErrorElement(parser, code, description))
 639                    {
 640 kumpf 1.1.2.6  	return(new CIMModifyInstanceResponseMessage(
 641 mike  1.1.2.3  	    messageId,
 642                	    code,
 643                	    description,
 644                	    QueueIdStack()));
 645                    }
 646                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 647                    {
 648                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 649                
 650 kumpf 1.1.2.6  	return(new CIMModifyInstanceResponseMessage(
 651 mike  1.1.2.3  	    messageId,
 652                	    CIM_ERR_SUCCESS,
 653                	    String(),
 654                	    QueueIdStack()));
 655                    }
 656                    else
 657                    {
 658                	throw XmlValidationError(parser.getLine(),
 659                	    "expected ERROR or IRETURNVALUE element");
 660                    }
 661 mike  1.1.2.1  }
 662                
 663 kumpf 1.1.2.6  CIMEnumerateInstanceNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstanceNamesResponse(
 664 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 665 mike  1.1.2.1  {
 666 mike  1.1.2.3      XmlEntry entry;
 667                    CIMStatusCode code;
 668                    const char* description = 0;
 669                
 670                    if (XmlReader::getErrorElement(parser, code, description))
 671                    {
 672 kumpf 1.1.2.6  	return(new CIMEnumerateInstanceNamesResponseMessage(
 673 mike  1.1.2.3  	    messageId,
 674                	    code,
 675                	    description,
 676                	    QueueIdStack(),
 677                	    Array<CIMReference>()));
 678                    }
 679                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 680                    {
 681                	Array<CIMReference> instanceNames;
 682                	String className;
 683                	Array<KeyBinding> keyBindings;
 684                
 685                	while (XmlReader::getInstanceNameElement(
 686                	    parser, className, keyBindings))
 687                	{
 688                	    CIMReference r(
 689                		String::EMPTY,
 690                		String::EMPTY,
 691                		className,
 692                		keyBindings);
 693                	    instanceNames.append(r);
 694 mike  1.1.2.3  	}
 695                
 696                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 697                
 698 kumpf 1.1.2.6  	return(new CIMEnumerateInstanceNamesResponseMessage(
 699 mike  1.1.2.3  	    messageId,
 700                	    CIM_ERR_SUCCESS,
 701                	    String(),
 702                	    QueueIdStack(),
 703                	    instanceNames));
 704                    }
 705                    else
 706                    {
 707                	throw XmlValidationError(parser.getLine(),
 708                	    "expected ERROR or IRETURNVALUE element");
 709                    }
 710 mike  1.1.2.1  }
 711                
 712 kumpf 1.1.2.8  CIMEnumerateInstancesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstancesResponse(
 713                    XmlParser& parser, const String& messageId)
 714                {
 715                    XmlEntry entry;
 716                    CIMStatusCode code;
 717                    const char* description = 0;
 718                
 719                    if (XmlReader::getErrorElement(parser, code, description))
 720                    {
 721                	return(new CIMEnumerateInstancesResponseMessage(
 722                	    messageId,
 723                	    code,
 724                	    description,
 725                	    QueueIdStack(),
 726 kumpf 1.1.2.11 	    Array<CIMNamedInstance>()));
 727 kumpf 1.1.2.8      }
 728                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 729                    {
 730 kumpf 1.1.2.11 	Array<CIMNamedInstance> namedInstances;
 731                	CIMNamedInstance tmp;
 732 kumpf 1.1.2.8  
 733 kumpf 1.1.2.11 	while (XmlReader::getNamedInstanceElement(parser, tmp))
 734                	    namedInstances.append(tmp);
 735 kumpf 1.1.2.8  
 736                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 737                
 738                	return(new CIMEnumerateInstancesResponseMessage(
 739                	    messageId,
 740                	    CIM_ERR_SUCCESS,
 741                	    String(),
 742                	    QueueIdStack(),
 743 kumpf 1.1.2.11 	    namedInstances));
 744 kumpf 1.1.2.8      }
 745                    else
 746                    {
 747                	throw XmlValidationError(parser.getLine(),
 748                	    "expected ERROR or IRETURNVALUE element");
 749                    }
 750                }
 751                
 752 kumpf 1.1.2.6  CIMDeleteInstanceResponseMessage* CIMOperationResponseDecoder::_decodeDeleteInstanceResponse(
 753 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 754 mike  1.1.2.1  {
 755 mike  1.1.2.3      XmlEntry entry;
 756                    CIMStatusCode code;
 757                    const char* description = 0;
 758                
 759                    if (XmlReader::getErrorElement(parser, code, description))
 760                    {
 761 kumpf 1.1.2.6  	return(new CIMDeleteInstanceResponseMessage(
 762 mike  1.1.2.3  	    messageId,
 763                	    code,
 764                	    description,
 765                	    QueueIdStack()));
 766                    }
 767                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 768                    {
 769                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 770                
 771 kumpf 1.1.2.6  	return(new CIMDeleteInstanceResponseMessage(
 772 kumpf 1.1.2.8  	    messageId,
 773                	    CIM_ERR_SUCCESS,
 774                	    String(),
 775                	    QueueIdStack()));
 776                    }
 777                    else
 778                    {
 779                	throw XmlValidationError(parser.getLine(),
 780                	    "expected ERROR or IRETURNVALUE element");
 781                    }
 782                }
 783                
 784                CIMGetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeGetPropertyResponse(
 785                    XmlParser& parser, const String& messageId)
 786                {
 787                    XmlEntry entry;
 788                    CIMStatusCode code;
 789                    const char* description = 0;
 790                
 791                    if (XmlReader::getErrorElement(parser, code, description))
 792                    {
 793 kumpf 1.1.2.8  	return(new CIMGetPropertyResponseMessage(
 794                	    messageId,
 795                	    code,
 796                	    description,
 797                	    QueueIdStack(),
 798                	    CIMValue()));
 799                    }
 800                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 801                    {
 802                	CIMValue cimValue;
 803                
 804                	if (!XmlReader::getPropertyValue(parser, cimValue))
 805                	{
 806                            // ATTN: Don't know what type of CIMValue to expect
 807                	    throw XmlValidationError(
 808                		parser.getLine(),
 809                                "expected VALUE, VALUE.ARRAY, or VALUE.REFERENCE element");
 810                	}
 811                
 812                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 813                
 814 kumpf 1.1.2.8  	return(new CIMGetPropertyResponseMessage(
 815                	    messageId,
 816                	    CIM_ERR_SUCCESS,
 817                	    String(),
 818                	    QueueIdStack(),
 819                	    cimValue));
 820                    }
 821                    else
 822                    {
 823                	throw XmlValidationError(parser.getLine(),
 824                	    "expected ERROR or IRETURNVALUE element");
 825                    }
 826                }
 827                
 828                CIMSetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeSetPropertyResponse(
 829                    XmlParser& parser, const String& messageId)
 830                {
 831                    XmlEntry entry;
 832                    CIMStatusCode code;
 833                    const char* description = 0;
 834                
 835 kumpf 1.1.2.8      if (XmlReader::getErrorElement(parser, code, description))
 836                    {
 837                	return(new CIMSetPropertyResponseMessage(
 838                	    messageId,
 839                	    code,
 840                	    description,
 841                	    QueueIdStack()));
 842                    }
 843                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 844                    {
 845                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 846                
 847                	return(new CIMSetPropertyResponseMessage(
 848 mike  1.1.2.3  	    messageId,
 849                	    CIM_ERR_SUCCESS,
 850                	    String(),
 851                	    QueueIdStack()));
 852                    }
 853                    else
 854                    {
 855                	throw XmlValidationError(parser.getLine(),
 856                	    "expected ERROR or IRETURNVALUE element");
 857                    }
 858 mike  1.1.2.1  }
 859                
 860 kumpf 1.1.2.6  CIMSetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeSetQualifierResponse(
 861 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 862 mike  1.1.2.1  {
 863 mike  1.1.2.3      XmlEntry entry;
 864                    CIMStatusCode code;
 865                    const char* description = 0;
 866                
 867                    if (XmlReader::getErrorElement(parser, code, description))
 868                    {
 869 kumpf 1.1.2.6  	return(new CIMSetQualifierResponseMessage(
 870 mike  1.1.2.3  	    messageId,
 871                	    code,
 872                	    description,
 873                	    QueueIdStack()));
 874                    }
 875                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 876                    {
 877                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 878                
 879 kumpf 1.1.2.6  	return(new CIMSetQualifierResponseMessage(
 880 mike  1.1.2.3  	    messageId,
 881                	    CIM_ERR_SUCCESS,
 882                	    String(),
 883                	    QueueIdStack()));
 884                    }
 885                    else
 886                    {
 887                	throw XmlValidationError(parser.getLine(),
 888                	    "expected ERROR or IRETURNVALUE element");
 889                    }
 890 mike  1.1.2.1  }
 891                
 892 kumpf 1.1.2.6  CIMGetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeGetQualifierResponse(
 893 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 894 mike  1.1.2.1  {
 895 mike  1.1.2.3      XmlEntry entry;
 896                    CIMStatusCode code;
 897                    const char* description = 0;
 898                
 899                    if (XmlReader::getErrorElement(parser, code, description))
 900                    {
 901 kumpf 1.1.2.6  	return(new CIMGetQualifierResponseMessage(
 902 mike  1.1.2.3  	    messageId,
 903                	    code,
 904                	    description,
 905                	    QueueIdStack(),
 906                	    CIMQualifierDecl()));
 907                    }
 908                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 909                    {
 910                	CIMQualifierDecl qualifierDecl;
 911                	XmlReader::getQualifierDeclElement(parser, qualifierDecl);
 912                
 913                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 914                
 915 kumpf 1.1.2.6  	return(new CIMGetQualifierResponseMessage(
 916 mike  1.1.2.3  	    messageId,
 917                	    CIM_ERR_SUCCESS,
 918                	    String(),
 919                	    QueueIdStack(),
 920                	    qualifierDecl));
 921                    }
 922                    else
 923                    {
 924                	throw XmlValidationError(parser.getLine(),
 925                	    "expected ERROR or IRETURNVALUE element");
 926                    }
 927 mike  1.1.2.1  }
 928                
 929 kumpf 1.1.2.6  CIMEnumerateQualifiersResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateQualifiersResponse(
 930 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 931 mike  1.1.2.1  {
 932 mike  1.1.2.3      XmlEntry entry;
 933                    CIMStatusCode code;
 934                    const char* description = 0;
 935                
 936                    if (XmlReader::getErrorElement(parser, code, description))
 937                    {
 938 kumpf 1.1.2.6  	return(new CIMEnumerateQualifiersResponseMessage(
 939 mike  1.1.2.3  	    messageId,
 940                	    code,
 941                	    description,
 942                	    QueueIdStack(),
 943                	    Array<CIMQualifierDecl>()));
 944                    }
 945                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 946                    {
 947                	Array<CIMQualifierDecl> qualifierDecls;
 948                	CIMQualifierDecl qualifierDecl;
 949                
 950                	while (XmlReader::getQualifierDeclElement(parser, qualifierDecl))
 951                	    qualifierDecls.append(qualifierDecl);
 952                
 953                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 954                
 955 kumpf 1.1.2.6  	return(new CIMEnumerateQualifiersResponseMessage(
 956 mike  1.1.2.3  	    messageId,
 957                	    CIM_ERR_SUCCESS,
 958                	    String(),
 959                	    QueueIdStack(),
 960                	    qualifierDecls));
 961                    }
 962                    else
 963                    {
 964                	throw XmlValidationError(parser.getLine(),
 965                	    "expected ERROR or IRETURNVALUE element");
 966                    }
 967 mike  1.1.2.1  }
 968                
 969 kumpf 1.1.2.6  CIMDeleteQualifierResponseMessage* CIMOperationResponseDecoder::_decodeDeleteQualifierResponse(
 970 mike  1.1.2.2      XmlParser& parser, const String& messageId)
 971 mike  1.1.2.1  {
 972 mike  1.1.2.3      XmlEntry entry;
 973                    CIMStatusCode code;
 974                    const char* description = 0;
 975                
 976                    if (XmlReader::getErrorElement(parser, code, description))
 977                    {
 978 kumpf 1.1.2.6  	return(new CIMDeleteQualifierResponseMessage(
 979 mike  1.1.2.3  	    messageId,
 980                	    code,
 981                	    description,
 982                	    QueueIdStack()));
 983                    }
 984                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
 985                    {
 986                	XmlReader::testEndTag(parser, "IRETURNVALUE");
 987                
 988 kumpf 1.1.2.6  	return(new CIMDeleteQualifierResponseMessage(
 989 mike  1.1.2.3  	    messageId,
 990                	    CIM_ERR_SUCCESS,
 991                	    String(),
 992                	    QueueIdStack()));
 993                    }
 994                    else
 995                    {
 996                	throw XmlValidationError(parser.getLine(),
 997                	    "expected ERROR or IRETURNVALUE element");
 998                    }
 999 mike  1.1.2.1  }
1000                
1001 mike  1.1.2.3  //MEB:
1002                
1003 kumpf 1.1.2.6  CIMReferenceNamesResponseMessage* CIMOperationResponseDecoder::_decodeReferenceNamesResponse(
1004 mike  1.1.2.2      XmlParser& parser, const String& messageId)
1005 mike  1.1.2.1  {
1006 mike  1.1.2.3      XmlEntry entry;
1007                    CIMStatusCode code;
1008                    const char* description = 0;
1009                
1010                    if (XmlReader::getErrorElement(parser, code, description))
1011                    {
1012 kumpf 1.1.2.6  	return(new CIMReferenceNamesResponseMessage(
1013 mike  1.1.2.3  	    messageId,
1014                	    code,
1015                	    description,
1016                	    QueueIdStack(),
1017                	    Array<CIMReference>()));
1018                    }
1019                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1020                    {
1021                	CIMReference objectPath;
1022                	Array<CIMReference> objectPaths;
1023                
1024                	while (XmlReader::getObjectPathElement(parser, objectPath))
1025                	    objectPaths.append(objectPath);
1026                
1027                	XmlReader::testEndTag(parser, "IRETURNVALUE");
1028                
1029 kumpf 1.1.2.6  	return(new CIMReferenceNamesResponseMessage(
1030 mike  1.1.2.3  	    messageId,
1031                	    CIM_ERR_SUCCESS,
1032                	    String(),
1033                	    QueueIdStack(),
1034                	    objectPaths));
1035                    }
1036                    else
1037                    {
1038                	throw XmlValidationError(parser.getLine(),
1039                	    "expected ERROR or IRETURNVALUE element");
1040                    }
1041 mike  1.1.2.1  }
1042                
1043 kumpf 1.1.2.6  CIMReferencesResponseMessage* CIMOperationResponseDecoder::_decodeReferencesResponse(
1044 mike  1.1.2.2      XmlParser& parser, const String& messageId)
1045 mike  1.1.2.1  {
1046 mike  1.1.2.3      XmlEntry entry;
1047                    CIMStatusCode code;
1048                    const char* description = 0;
1049                
1050                    if (XmlReader::getErrorElement(parser, code, description))
1051                    {
1052 kumpf 1.1.2.6  	return(new CIMReferencesResponseMessage(
1053 mike  1.1.2.3  	    messageId,
1054                	    code,
1055                	    description,
1056                	    QueueIdStack(),
1057                	    Array<CIMObjectWithPath>()));
1058                    }
1059                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1060                    {
1061                	Array<CIMObjectWithPath> objectWithPathArray;
1062                	CIMObjectWithPath tmp;
1063                
1064                	while (XmlReader::getObjectWithPath(parser, tmp))
1065                	    objectWithPathArray.append(tmp);
1066                
1067                	XmlReader::testEndTag(parser, "IRETURNVALUE");
1068                
1069 kumpf 1.1.2.6  	return(new CIMReferencesResponseMessage(
1070 mike  1.1.2.3  	    messageId,
1071                	    CIM_ERR_SUCCESS,
1072                	    String(),
1073                	    QueueIdStack(),
1074                	    objectWithPathArray));
1075                    }
1076                    else
1077                    {
1078                	throw XmlValidationError(parser.getLine(),
1079                	    "expected ERROR or IRETURNVALUE element");
1080                    }
1081 mike  1.1.2.1  }
1082                
1083 kumpf 1.1.2.6  CIMAssociatorNamesResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorNamesResponse(
1084 mike  1.1.2.2      XmlParser& parser, const String& messageId)
1085 mike  1.1.2.1  {
1086 mike  1.1.2.3      XmlEntry entry;
1087                    CIMStatusCode code;
1088                    const char* description = 0;
1089                
1090                    if (XmlReader::getErrorElement(parser, code, description))
1091                    {
1092 kumpf 1.1.2.6  	return(new CIMAssociatorNamesResponseMessage(
1093 mike  1.1.2.3  	    messageId,
1094                	    code,
1095                	    description,
1096                	    QueueIdStack(),
1097                	    Array<CIMReference>()));
1098                    }
1099                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1100                    {
1101                	CIMReference objectPath;
1102                	Array<CIMReference> objectPaths;
1103                
1104                	while (XmlReader::getObjectPathElement(parser, objectPath))
1105                	    objectPaths.append(objectPath);
1106                
1107                	XmlReader::testEndTag(parser, "IRETURNVALUE");
1108                
1109 kumpf 1.1.2.6  	return(new CIMAssociatorNamesResponseMessage(
1110 mike  1.1.2.3  	    messageId,
1111                	    CIM_ERR_SUCCESS,
1112                	    String(),
1113                	    QueueIdStack(),
1114                	    objectPaths));
1115                    }
1116                    else
1117                    {
1118                	throw XmlValidationError(parser.getLine(),
1119                	    "expected ERROR or IRETURNVALUE element");
1120                    }
1121 mike  1.1.2.1  }
1122                
1123 kumpf 1.1.2.6  CIMAssociatorsResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorsResponse(
1124 mike  1.1.2.2      XmlParser& parser, const String& messageId)
1125 mike  1.1.2.1  {
1126 mike  1.1.2.3      XmlEntry entry;
1127                    CIMStatusCode code;
1128                    const char* description = 0;
1129                
1130                    if (XmlReader::getErrorElement(parser, code, description))
1131                    {
1132 kumpf 1.1.2.6  	return(new CIMAssociatorsResponseMessage(
1133 mike  1.1.2.3  	    messageId,
1134                	    code,
1135                	    description,
1136                	    QueueIdStack(),
1137                	    Array<CIMObjectWithPath>()));
1138                    }
1139                    else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1140                    {
1141                	Array<CIMObjectWithPath> objectWithPathArray;
1142                	CIMObjectWithPath tmp;
1143                
1144                	while (XmlReader::getObjectWithPath(parser, tmp))
1145                	    objectWithPathArray.append(tmp);
1146                
1147                	XmlReader::testEndTag(parser, "IRETURNVALUE");
1148                
1149 kumpf 1.1.2.6  	return(new CIMAssociatorsResponseMessage(
1150 mike  1.1.2.3  	    messageId,
1151                	    CIM_ERR_SUCCESS,
1152                	    String(),
1153                	    QueueIdStack(),
1154                	    objectWithPathArray));
1155                    }
1156                    else
1157                    {
1158                	throw XmlValidationError(parser.getLine(),
1159                	    "expected ERROR or IRETURNVALUE element");
1160 kumpf 1.1.2.5      }
1161                }
1162                
1163 kumpf 1.1.2.6  CIMInvokeMethodResponseMessage* CIMOperationResponseDecoder::_decodeInvokeMethodResponse(
1164 kumpf 1.1.2.5      XmlParser& parser, const String& messageId, const String& methodName)
1165                {
1166                    XmlEntry entry;
1167                    CIMStatusCode code;
1168                    const char* description = 0;
1169                
1170                    CIMValue value;
1171                    Array<CIMParamValue> outParameters;
1172                    const char* paramName;
1173                    String inValue;
1174                
1175                    if (XmlReader::getErrorElement(parser, code, description))
1176                    {
1177 kumpf 1.1.2.6  	return(new CIMInvokeMethodResponseMessage(
1178 kumpf 1.1.2.5  	    messageId,
1179                	    code,
1180                	    description,
1181                	    QueueIdStack(),
1182                	    value,
1183                	    outParameters,
1184                	    methodName));
1185                    }
1186                    else if (XmlReader::testStartTag(parser, entry, "RETURNVALUE"))
1187                    {
1188                	XmlReader::getValueElement(parser, CIMType::STRING, value);
1189                
1190                	XmlReader::testEndTag(parser, "RETURNVALUE");
1191                
1192                	while (XmlReader::getParamValueTag(parser, paramName))
1193                	{
1194                	    //XmlReader::getValueElement(parser, CIMType::NONE, inValue);
1195                	    XmlReader::getStringValueElement(parser, inValue, true);
1196                
1197                	    outParameters.append(CIMParamValue(
1198                		CIMParameter(paramName, CIMType::STRING),
1199 kumpf 1.1.2.5  		CIMValue(inValue)));
1200                	
1201                	    XmlReader::expectEndTag(parser, "PARAMVALUE");
1202                	}
1203                
1204 kumpf 1.1.2.6  	return(new CIMInvokeMethodResponseMessage(
1205 kumpf 1.1.2.5  	    messageId,
1206                	    CIM_ERR_SUCCESS,
1207                	    String(),
1208                	    QueueIdStack(),
1209                	    value,
1210                	    outParameters,
1211                	    methodName));
1212                    }
1213                    else
1214                    {
1215                	throw XmlValidationError(parser.getLine(),
1216                	    "expected ERROR or RETURNVALUE element");
1217 mike  1.1.2.3      }
1218 mike  1.1.2.1  }
1219                
1220                PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2