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

   1 karl  1.74 //%2006////////////////////////////////////////////////////////////////////////
   2 mike  1.2  //
   3 karl  1.61 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6 karl  1.51 // IBM Corp.; EMC Corporation, The Open Group.
   7 karl  1.61 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9 karl  1.65 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11 karl  1.74 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12            // EMC Corporation; Symantec Corporation; The Open Group.
  13 mike  1.2  //
  14            // Permission is hereby granted, free of charge, to any person obtaining a copy
  15            // of this software and associated documentation files (the "Software"), to
  16            // deal in the Software without restriction, including without limitation the
  17            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18            // sell copies of the Software, and to permit persons to whom the Software is
  19            // furnished to do so, subject to the following conditions:
  20 kumpf 1.25 // 
  21 mike  1.2  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29            //
  30            //==============================================================================
  31            //
  32            // Author: Mike Brasher (mbrasher@bmc.com)
  33            //
  34            // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
  35            //              Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
  36            //              Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
  37            //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
  38 kumpf 1.23 //              Carol Ann Krug Graves, Hewlett-Packard Company
  39            //                  (carolann_graves@hp.com)
  40 kumpf 1.36 //              Sushma Fernandes, Hewlett-Packard Company
  41            //                  (sushma_fernandes@hp.com)
  42 david 1.38 //              Dave Rosckes (rosckes@us.ibm.com)
  43 kumpf 1.60 //              Seema Gupta (gseema@in.ibm.com) for PEP135
  44            //              Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1
  45 w.white 1.64 //              Willis White, IBM (whiwill@us.ibm.com)
  46 j.alex  1.68 //              John Alex, IBM (johnalex@us.ibm.com) - Bug#2290
  47 mike    1.2  //
  48              //%/////////////////////////////////////////////////////////////////////////////
  49              
  50              #include <Pegasus/Common/Config.h>
  51              #include <iostream>
  52 kumpf   1.15 #include <Pegasus/Common/Constants.h>
  53 mike    1.2  #include <Pegasus/Common/XmlParser.h>
  54              #include <Pegasus/Common/XmlReader.h>
  55              #include <Pegasus/Common/System.h>
  56              #include <Pegasus/Common/XmlWriter.h>
  57              #include <Pegasus/Common/HTTPMessage.h>
  58              #include <Pegasus/Common/CIMMessage.h>
  59 kumpf   1.60 #include <Pegasus/Common/Exception.h>
  60 mike    1.2  #include "CIMOperationResponseDecoder.h"
  61              
  62 w.white 1.64 
  63 humberto 1.43 // l10n
  64 w.white  1.64 #include <Pegasus/Common/MessageLoader.h> 
  65               
  66               
  67 humberto 1.43 
  68 mike     1.2  PEGASUS_USING_STD;
  69               
  70               PEGASUS_NAMESPACE_BEGIN
  71               
  72               CIMOperationResponseDecoder::CIMOperationResponseDecoder(
  73                   MessageQueue* outputQueue,
  74                   MessageQueue* encoderQueue,
  75 karl     1.41     ClientAuthenticator* authenticator,
  76                   Uint32 showInput)
  77 mike     1.2      :
  78 kumpf    1.16     MessageQueue(PEGASUS_QUEUENAME_OPRESPDECODER),
  79 mike     1.2      _outputQueue(outputQueue),
  80                   _encoderQueue(encoderQueue),
  81 karl     1.41     _authenticator(authenticator),
  82                   _showInput(showInput)
  83 mike     1.2  {
  84 j.alex   1.68 
  85 mike     1.2  }
  86               
  87               CIMOperationResponseDecoder::~CIMOperationResponseDecoder()
  88               {
  89               
  90               }
  91               
  92               void  CIMOperationResponseDecoder::setEncoderQueue(MessageQueue* encoderQueue)
  93               {
  94                   _encoderQueue = encoderQueue;
  95               }
  96               
  97               void CIMOperationResponseDecoder::handleEnqueue()
  98               {
  99                   Message* message = dequeue();
 100               
 101                   if (!message)
 102 kumpf    1.60         return;
 103 mike     1.2  
 104                   switch (message->getType())
 105                   {
 106 kumpf    1.60         case HTTP_MESSAGE:
 107                       {
 108                           HTTPMessage* httpMessage = (HTTPMessage*)message;
 109                           _handleHTTPMessage(httpMessage);
 110                           break;
 111                       }
 112 mike     1.2  
 113 kumpf    1.60         default:
 114 kumpf    1.17             PEGASUS_ASSERT(0);
 115 kumpf    1.60             break;
 116 mike     1.2      }
 117               
 118                   delete message;
 119               }
 120               
 121 a.dunfey 1.73 void CIMOperationResponseDecoder::setDataStorePointer(
 122                   ClientPerfDataStore* perfDataStore_ptr)
 123               {   dataStore = perfDataStore_ptr;
 124               }
 125               
 126 mike     1.2  void CIMOperationResponseDecoder::_handleHTTPMessage(HTTPMessage* httpMessage)
 127               {
 128                   //
 129                   // Parse the HTTP message:
 130                   //
 131 w.white  1.67     TimeValue networkEndTime = TimeValue::getCurrentTime();
 132 w.white  1.64 
 133 j.alex   1.68     String  connectClose;
 134                   String  startLine;
 135 mike     1.2      Array<HTTPHeader> headers;
 136 j.alex   1.68     char*   content;
 137                   Uint32  contentLength;
 138                   Boolean cimReconnect=false;
 139 mike     1.2  
 140 kumpf    1.19     if (httpMessage->message.size() == 0)
 141 kumpf    1.60     {
 142                       // l10n
 143               
 144                       // CIMClientMalformedHTTPException* malformedHTTPException =
 145                       //   new CIMClientMalformedHTTPException("Empty HTTP response message.");
 146               
 147                       MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EMPTY_RESPONSE", "Empty HTTP response message.");
 148                       String mlString(MessageLoader::getMessage(mlParms));
 149               
 150                       CIMClientMalformedHTTPException* malformedHTTPException =
 151                           new CIMClientMalformedHTTPException(mlString);
 152               
 153                       ClientExceptionMessage * response =
 154                           new ClientExceptionMessage(malformedHTTPException);
 155               
 156                       _outputQueue->enqueue(response);
 157                       return;
 158                   }
 159 kumpf    1.19 
 160 j.alex   1.68 
 161 mike     1.2      httpMessage->parse(startLine, headers, contentLength);
 162               
 163 kumpf    1.19     //
 164 j.alex   1.68     // Check for Connection: Close 
 165                   //
 166 j.alex   1.69     if (HTTPMessage::lookupHeader(headers, "Connection", connectClose, false))
 167 j.alex   1.68     {
 168                       if (String::equalNoCase(connectClose, "Close"))
 169                       {
 170                           //reconnect and then resend next request.
 171                           cimReconnect=true;
 172                       }
 173                   }
 174                   //
 175 kumpf    1.19     // Get the status line info
 176                   //
 177                   String httpVersion;
 178                   Uint32 statusCode;
 179                   String reasonPhrase;
 180               
 181                   Boolean parsableMessage = HTTPMessage::parseStatusLine(
 182                       startLine, httpVersion, statusCode, reasonPhrase);
 183                   if (!parsableMessage)
 184                   {
 185 kumpf    1.60         // l10n
 186               
 187                       // CIMClientMalformedHTTPException* malformedHTTPException = new
 188                       //   CIMClientMalformedHTTPException("Malformed HTTP response message.");
 189               
 190                       MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MALFORMED_RESPONSE", "Malformed HTTP response message.");
 191                       String mlString(MessageLoader::getMessage(mlParms));
 192               
 193                       CIMClientMalformedHTTPException* malformedHTTPException =
 194                           new CIMClientMalformedHTTPException(mlString);
 195 kumpf    1.19 
 196 kumpf    1.60         ClientExceptionMessage * response =
 197                           new ClientExceptionMessage(malformedHTTPException);
 198 j.alex   1.68       
 199                       response->setCloseConnect(cimReconnect);
 200 humberto 1.43 
 201 kumpf    1.60         _outputQueue->enqueue(response);
 202                       return;
 203 kumpf    1.19     }
 204               
 205 karl     1.41 #ifdef PEGASUS_CLIENT_TRACE_ENABLE
 206                   if (_showInput & 1)
 207                   {
 208                       cout << "CIMOperatonResponseDecoder";
 209                       httpMessage->printAll(cout);
 210                   }
 211                   if (_showInput & 2)
 212                   {
 213                       Uint32 size = httpMessage->message.size();
 214                       char* tmpBuf = new char[size+1];
 215               
 216                       strncpy( tmpBuf, httpMessage->message.getData(), size );
 217                       tmpBuf[size] = '\0';
 218                       Logger::put(Logger::STANDARD_LOG,
 219 yi.zhou  1.75             System::CIMSERVER,
 220 kumpf    1.60             Logger::TRACE,
 221                           "CIMOperationRequestDecoder::Response, XML content: $1",
 222                           tmpBuf);
 223 karl     1.41         delete []tmpBuf;
 224                   }
 225               #endif
 226               
 227 kumpf    1.8      try
 228 mike     1.2      {
 229 kumpf    1.8          if (_authenticator->checkResponseHeaderForChallenge(headers))
 230                       {
 231                           //
 232                           // Get the original request, put that in the encoder's queue for
 233                           // re-sending with authentication challenge response.
 234                           //
 235 kumpf    1.70             Message* reqMessage = _authenticator->releaseRequestMessage();
 236               
 237 j.alex   1.69             if (cimReconnect == true)
 238                           {
 239 kumpf    1.70                 reqMessage->setCloseConnect(cimReconnect);
 240 j.alex   1.69                 _outputQueue->enqueue(reqMessage);
 241                           } 
 242                           else 
 243                           {
 244                               _encoderQueue->enqueue(reqMessage);
 245                           }
 246 mike     1.2  
 247 kumpf    1.8              return;
 248                       }
 249                       else
 250                       {
 251                           //
 252                           // Received a valid/error response from the server.
 253                           // We do not need the original request message anymore, hence delete
 254                           // the request message by getting the handle from the ClientAuthenticator.
 255                           //
 256 kumpf    1.70             Message* reqMessage = _authenticator->releaseRequestMessage();
 257                           delete reqMessage;
 258 kumpf    1.8          }
 259 mike     1.2      }
 260 kumpf    1.8      catch(InvalidAuthHeader& e)
 261 mike     1.2      {
 262 kumpf    1.20         CIMClientMalformedHTTPException* malformedHTTPException =
 263                           new CIMClientMalformedHTTPException(e.getMessage());
 264 kumpf    1.17         ClientExceptionMessage * response =
 265                           new ClientExceptionMessage(malformedHTTPException);
 266 mike     1.2  
 267 j.alex   1.68         response->setCloseConnect(cimReconnect);
 268 kumpf    1.17         _outputQueue->enqueue(response);
 269 kumpf    1.15         return;
 270                   }
 271 kumpf    1.36 
 272 kumpf    1.52     // We have the response.  If authentication failed, we will generate a
 273                   // CIMClientHTTPErrorException below with the "401 Unauthorized" status
 274                   // in the (re-challenge) response.
 275 kumpf    1.15 
 276                   //
 277                   // Check for a success (200 OK) response
 278                   //
 279 kumpf    1.17     if (statusCode != HTTP_STATUSCODE_OK)
 280 kumpf    1.15     {
 281                       String cimError;
 282                       String pegasusError;
 283               
 284 brian.campbell 1.57         HTTPMessage::lookupHeader(headers, "CIMError", cimError, true);
 285 kumpf          1.15         HTTPMessage::lookupHeader(headers, PEGASUS_HTTPHEADERTAG_ERRORDETAIL, pegasusError);
 286 kumpf          1.35         try
 287                             {
 288                                 pegasusError = XmlReader::decodeURICharacters(pegasusError);
 289                             }
 290 brian.campbell 1.57         catch (ParseError&)
 291 kumpf          1.35         {
 292                                 // Ignore this exception.  We're more interested in having the
 293                                 // message in encoded form than knowing that the format is invalid.
 294                             }
 295 kumpf          1.15 
 296 kumpf          1.32         CIMClientHTTPErrorException* httpError =
 297 kumpf          1.54             new CIMClientHTTPErrorException(statusCode, reasonPhrase,
 298                                                                 cimError, pegasusError);
 299 kumpf          1.17         ClientExceptionMessage * response =
 300                                 new ClientExceptionMessage(httpError);
 301 kumpf          1.15 
 302 j.alex         1.68         response->setCloseConnect(cimReconnect);
 303 kumpf          1.15         _outputQueue->enqueue(response);
 304 kumpf          1.8          return;
 305 mike           1.2      }
 306                     
 307                         //
 308                         // Search for "CIMOperation" header:
 309                         //
 310                         String cimOperation;
 311                     
 312                         if (!HTTPMessage::lookupHeader(
 313 kumpf          1.60         headers, "CIMOperation", cimOperation, true))
 314 mike           1.2      {
 315 humberto       1.43       // l10n
 316                     
 317                           // CIMClientMalformedHTTPException* malformedHTTPException = new
 318                           //   CIMClientMalformedHTTPException("Missing CIMOperation HTTP header");
 319                     
 320 humberto       1.44       MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MISSING_CIMOP_HEADER", "Missing CIMOperation HTTP header");
 321 humberto       1.43       String mlString(MessageLoader::getMessage(mlParms));
 322 kumpf          1.60 
 323 humberto       1.43       CIMClientMalformedHTTPException* malformedHTTPException = new
 324 kumpf          1.60         CIMClientMalformedHTTPException(mlString);
 325                     
 326 kumpf          1.17         ClientExceptionMessage * response =
 327                                 new ClientExceptionMessage(malformedHTTPException);
 328                     
 329 j.alex         1.68         response->setCloseConnect(cimReconnect);
 330                     
 331 kumpf          1.17         _outputQueue->enqueue(response);
 332                             return;
 333 mike           1.2      }
 334                     
 335 chuck          1.39 
 336 brian.campbell 1.62 		// l10n start
 337 kumpf          1.60 // l10n end
 338 david          1.42     //
 339                         // Search for "Content-Type" header:
 340                         //
 341 kumpf          1.60 
 342                         // BUG 572, Use of Content-Type header and change error msg.
 343                         // If header exists, test type.  If not, ignore. We will find
 344                         // content type errors in text analysis.
 345                         // content-type header  value format:
 346                         //              type "/" subtype *( ";" parameter )
 347                         // ex. text/xml;Charset="utf8"
 348                         String cimContentType;
 349                     
 350                         if (HTTPMessage::lookupHeader(
 351                                 headers, "Content-Type", cimContentType, true))
 352                         {
 353                             Uint32 len;
 354                             String contentTypeValue;
 355                             if ((len = cimContentType.find(';')) != PEG_NOT_FOUND)
 356                                 contentTypeValue = cimContentType.subString(0,len);
 357                             else
 358                                 contentTypeValue = cimContentType;
 359                     
 360                             if (!String::equalNoCase(contentTypeValue, "text/xml") &&
 361                                 !String::equalNoCase(contentTypeValue, "application/xml"))
 362 kumpf          1.60         {
 363                                 CIMClientMalformedHTTPException* malformedHTTPException = new
 364                                     CIMClientMalformedHTTPException
 365                                         ("Bad Content-Type HTTP header; " + contentTypeValue);
 366                                 ClientExceptionMessage * response =
 367                                     new ClientExceptionMessage(malformedHTTPException);
 368                     
 369 j.alex         1.68             response->setCloseConnect(cimReconnect);
 370                     
 371 kumpf          1.60             _outputQueue->enqueue(response);
 372                                 return;
 373                             }
 374                         }
 375                         // comment out the error rejection code if the content-type header does
 376                         //    not exist
 377 karl           1.48 #ifdef PEGASUS_REJECT_ON_MISSING_CONTENTTYPE_HEADER
 378 kumpf          1.60     else
 379                         {
 380                             CIMClientMalformedHTTPException* malformedHTTPException = new
 381                                 CIMClientMalformedHTTPException
 382                                     ("Missing Content-Type HTTP header; ");
 383                             ClientExceptionMessage * response =
 384                                 new ClientExceptionMessage(malformedHTTPException);
 385                     
 386 j.alex         1.68         response->setCloseConnect(cimReconnect);
 387                     
 388 kumpf          1.60         _outputQueue->enqueue(response);
 389                             return;
 390                         }
 391 karl           1.48 #endif
 392 kumpf          1.60 
 393                         // look for any cim status codes. The HTTPConnection level would have
 394                         // added them here.
 395                     
 396                         String cimStatusCodeValue;
 397                         Boolean found = HTTPMessage::lookupHeader(headers, "CIMStatusCode",
 398                             cimStatusCodeValue, true);
 399                         CIMStatusCode cimStatusCodeNumber = CIM_ERR_SUCCESS;
 400                     
 401                         if (found == true &&
 402                             (cimStatusCodeNumber = (CIMStatusCode)
 403                              atoi(cimStatusCodeValue.getCString())) != CIM_ERR_SUCCESS)
 404                         {
 405                             String cimStatusCodeDescription;
 406                             found = HTTPMessage::lookupHeader(headers, "CIMStatusCodeDescription",
 407                                 cimStatusCodeDescription, true);
 408                             if (found == true && cimStatusCodeDescription.size() > 0)
 409                             {
 410                                 try
 411                                 {
 412                                     cimStatusCodeDescription =
 413 kumpf          1.60                     XmlReader::decodeURICharacters(cimStatusCodeDescription);
 414                                 }
 415                                 catch (ParseError&)
 416                                 {
 417                                 }
 418                             } // if there is a description with the code
 419                     
 420                             CIMException* cimStatusException =
 421                                 new CIMException(cimStatusCodeNumber,cimStatusCodeDescription);
 422 brian.campbell 1.62         cimStatusException->setContentLanguages(httpMessage->contentLanguages);
 423 kumpf          1.60         ClientExceptionMessage * response =
 424                                 new ClientExceptionMessage(cimStatusException);
 425 j.alex         1.68   
 426                             response->setCloseConnect(cimReconnect);
 427                     
 428 kumpf          1.60         _outputQueue->enqueue(response);
 429                             return;
 430                         }
 431 w.white        1.64     String serverTime;
 432                         if(HTTPMessage::lookupHeader(headers, "WBEMServerResponseTime", serverTime, true))
 433                         {
 434                             Uint32 sTime = (Uint32) atol(serverTime.getCString());
 435                             dataStore->setServerTime(sTime);
 436                         }
 437                     
 438 brian.campbell 1.59 
 439 mike           1.2      //
 440                         // Zero-terminate the message:
 441                         //
 442                         httpMessage->message.append('\0');
 443 keith.petley   1.40 
 444 mike           1.2      // Calculate the beginning of the content from the message size and
 445                         // the content length.  Subtract 1 to take into account the null
 446                         // character we just added to the end of the message.
 447                     
 448 david.dillard  1.63     content = (char *) httpMessage->message.getData() +
 449 karl           1.41         httpMessage->message.size() - contentLength - 1;
 450 mike           1.2  
 451                         //
 452                         // If it is a method response, then dispatch it to be handled:
 453                         //
 454                     
 455                         if (!String::equalNoCase(cimOperation, "MethodResponse"))
 456                         {
 457 kumpf          1.60         // l10n
 458 humberto       1.43 
 459 kumpf          1.60         // CIMClientMalformedHTTPException* malformedHTTPException =
 460                             //   new CIMClientMalformedHTTPException(
 461                             //        String("Received CIMOperation HTTP header value \"") +
 462                             //        cimOperation + "\", expected \"MethodResponse\"");
 463 humberto       1.43 
 464 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_METHODRESPONSE", "Received CIMOperation HTTP header value \"$1\", expected \"MethodResponse\"", cimOperation);
 465                             String mlString(MessageLoader::getMessage(mlParms));
 466 humberto       1.43 
 467 kumpf          1.60         CIMClientMalformedHTTPException* malformedHTTPException =
 468                                 new CIMClientMalformedHTTPException(mlString);
 469 humberto       1.43 
 470 kumpf          1.60         ClientExceptionMessage * response =
 471                                 new ClientExceptionMessage(malformedHTTPException);
 472 kumpf          1.17 
 473 j.alex         1.68         response->setCloseConnect(cimReconnect);
 474                     
 475 kumpf          1.17         _outputQueue->enqueue(response);
 476                             return;
 477 mike           1.2      }
 478                     
 479 w.white        1.64     dataStore->setResponseSize(contentLength);
 480                         dataStore->setEndNetworkTime(networkEndTime);
 481                         //dataStore->print();
 482 j.alex         1.68     _handleMethodResponse(content, httpMessage->contentLanguages,cimReconnect);  // l10n
 483 mike           1.2  }
 484                     
 485 j.alex         1.68 void CIMOperationResponseDecoder::_handleMethodResponse(
 486                         char* content,
 487 kumpf          1.72     const ContentLanguageList& contentLanguages,
 488 j.alex         1.68     Boolean cimReconnect) //l10n
 489 mike           1.2  {
 490                         Message* response = 0;
 491                     
 492                         //
 493                         // Create and initialize XML parser:
 494                         //
 495                     
 496                         XmlParser parser((char*)content);
 497                         XmlEntry entry;
 498                     
 499                         try
 500                         {
 501 kumpf          1.60         //
 502                             // Process <?xml ... >
 503                             //
 504 mike           1.2  
 505 kumpf          1.11         const char* xmlVersion = 0;
 506                             const char* xmlEncoding = 0;
 507                     
 508 kumpf          1.60         XmlReader::getXmlDeclaration(parser, xmlVersion, xmlEncoding);
 509 mike           1.2  
 510 kumpf          1.60         //
 511                             // Process <CIM ... >
 512                             //
 513 mike           1.2  
 514 kumpf          1.9          const char* cimVersion = 0;
 515                             const char* dtdVersion = 0;
 516                     
 517 kumpf          1.17         // ATTN-RK-P3-20020416: Need to validate these versions?
 518 kumpf          1.60         XmlReader::getCimStartTag(parser, cimVersion, dtdVersion);
 519 mike           1.2  
 520 kumpf          1.60         //
 521                             // Expect <MESSAGE ... >
 522                             //
 523 mike           1.2  
 524 kumpf          1.60         String messageId;
 525                             String protocolVersion;
 526 mike           1.2  
 527 kumpf          1.60         if (!XmlReader::getMessageStartTag(parser, messageId, protocolVersion))
 528                             {
 529                                 // l10n
 530 humberto       1.43 
 531 kumpf          1.60             // throw XmlValidationError(
 532                                 // parser.getLine(), "expected MESSAGE element");
 533 humberto       1.43 
 534 kumpf          1.60             MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_MESSAGE_ELEMENT",
 535                                     "expected MESSAGE element");
 536 humberto       1.43 
 537 kumpf          1.60             throw XmlValidationError(parser.getLine(), mlParms);
 538                             }
 539 humberto       1.43 
 540 mike           1.2  
 541 david.dillard  1.71         //
 542                             // This code for checking the protocol version was taken from the server code.
 543                             //
 544                             Boolean protocolVersionAccepted = false;
 545                     
 546                             if ((protocolVersion.size() >= 3) &&
 547                                (protocolVersion[0] == '1') &&
 548                                (protocolVersion[1] == '.'))
 549                             {
 550                                // Verify that all characters after the '.' are digits
 551                                Uint32 index = 2;
 552                                while ((index < protocolVersion.size()) &&
 553                                       (protocolVersion[index] >= '0') &&
 554                                       (protocolVersion[index] <= '9'))
 555                                {
 556                                   index++;
 557                                }
 558                     
 559                                if (index == protocolVersion.size())
 560                                {
 561                                   protocolVersionAccepted = true;
 562 david.dillard  1.71            }
 563                             }
 564 humberto       1.43 
 565 david.dillard  1.71         if (!protocolVersionAccepted)
 566                             {
 567                                 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.UNSUPPORTED_PROTOCOL", "Received unsupported protocol version \"$0\", expected \"$1\"", protocolVersion, "1.[0-9]+");
 568 kumpf          1.60             String mlString(MessageLoader::getMessage(mlParms));
 569 humberto       1.43 
 570 kumpf          1.60             CIMClientResponseException* responseException =
 571                                     new CIMClientResponseException(mlString);
 572 humberto       1.43 
 573 kumpf          1.17             ClientExceptionMessage * response =
 574                                     new ClientExceptionMessage(responseException);
 575 mike           1.2  
 576 j.alex         1.68             response->setCloseConnect(cimReconnect);
 577                     
 578 kumpf          1.17             _outputQueue->enqueue(response);
 579                                 return;
 580 kumpf          1.60         }
 581                     
 582                             //
 583                             // Expect <SIMPLERSP ... >
 584                             //
 585                     
 586                             XmlReader::expectStartTag(parser, entry, "SIMPLERSP");
 587                     
 588                             //
 589                             // Expect <IMETHODRESPONSE ... >
 590                             //
 591 mike           1.2  
 592 kumpf          1.60         const char* iMethodResponseName = 0;
 593                             Boolean isEmptyTag = false;
 594 humberto       1.43 
 595 kumpf          1.60         if (XmlReader::getIMethodResponseStartTag(
 596                                     parser, iMethodResponseName, isEmptyTag))
 597                             {
 598                                 //
 599                                 // Dispatch the method:
 600                                 //
 601                     
 602                                 if (System::strcasecmp(iMethodResponseName, "GetClass") == 0)
 603                                     response = _decodeGetClassResponse(
 604                                         parser, messageId, isEmptyTag);
 605                                 else if (System::strcasecmp(iMethodResponseName, "GetInstance") == 0)
 606                                     response = _decodeGetInstanceResponse(
 607                                         parser, messageId, isEmptyTag);
 608                                 else if (System::strcasecmp(iMethodResponseName, "EnumerateClassNames") == 0)
 609                                     response = _decodeEnumerateClassNamesResponse(
 610                                         parser, messageId, isEmptyTag);
 611                                 else if (System::strcasecmp(iMethodResponseName, "References") == 0)
 612                                     response = _decodeReferencesResponse(
 613                                         parser, messageId, isEmptyTag);
 614                                 else if (System::strcasecmp(iMethodResponseName, "ReferenceNames") == 0)
 615                                     response = _decodeReferenceNamesResponse(
 616 kumpf          1.60                     parser, messageId, isEmptyTag);
 617                                 else if (System::strcasecmp(iMethodResponseName, "AssociatorNames") == 0)
 618                                     response = _decodeAssociatorNamesResponse(
 619                                         parser, messageId, isEmptyTag);
 620                                 else if (System::strcasecmp(iMethodResponseName, "Associators") == 0)
 621                                     response = _decodeAssociatorsResponse(
 622                                         parser, messageId, isEmptyTag);
 623                                 else if (System::strcasecmp(iMethodResponseName, "CreateInstance") == 0)
 624                                     response = _decodeCreateInstanceResponse(
 625                                         parser, messageId, isEmptyTag);
 626                                 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstanceNames") == 0)
 627                                     response = _decodeEnumerateInstanceNamesResponse(
 628                                         parser, messageId, isEmptyTag);
 629                                 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstances") == 0)
 630                                     response = _decodeEnumerateInstancesResponse(
 631                                         parser, messageId, isEmptyTag);
 632                                 else if (System::strcasecmp(iMethodResponseName, "GetProperty") == 0)
 633                                     response = _decodeGetPropertyResponse(
 634                                         parser, messageId, isEmptyTag);
 635                                 else if (System::strcasecmp(iMethodResponseName, "SetProperty") == 0)
 636                                     response = _decodeSetPropertyResponse(
 637 kumpf          1.60                     parser, messageId, isEmptyTag);
 638                                 else if (System::strcasecmp(iMethodResponseName, "DeleteQualifier") == 0)
 639                                     response = _decodeDeleteQualifierResponse(
 640                                         parser, messageId, isEmptyTag);
 641                                 else if (System::strcasecmp(iMethodResponseName, "GetQualifier") == 0)
 642                                     response = _decodeGetQualifierResponse(
 643                                         parser, messageId, isEmptyTag);
 644                                 else if (System::strcasecmp(iMethodResponseName, "SetQualifier") == 0)
 645                                     response = _decodeSetQualifierResponse(
 646                                         parser, messageId, isEmptyTag);
 647                                 else if (System::strcasecmp(iMethodResponseName, "EnumerateQualifiers") == 0)
 648                                     response = _decodeEnumerateQualifiersResponse(
 649                                         parser, messageId, isEmptyTag);
 650                                 else if (System::strcasecmp(iMethodResponseName, "EnumerateClasses") == 0)
 651                                     response = _decodeEnumerateClassesResponse(
 652                                         parser, messageId, isEmptyTag);
 653                                 else if (System::strcasecmp(iMethodResponseName, "CreateClass") == 0)
 654                                     response = _decodeCreateClassResponse(
 655                                         parser, messageId, isEmptyTag);
 656                                 else if (System::strcasecmp(iMethodResponseName, "ModifyClass") == 0)
 657                                     response = _decodeModifyClassResponse(
 658 kumpf          1.60                     parser, messageId, isEmptyTag);
 659                                 else if (System::strcasecmp(iMethodResponseName, "ModifyInstance") == 0)
 660                                     response = _decodeModifyInstanceResponse(
 661                                         parser, messageId, isEmptyTag);
 662                                 else if (System::strcasecmp(iMethodResponseName, "DeleteClass") == 0)
 663                                     response = _decodeDeleteClassResponse(
 664                                         parser, messageId, isEmptyTag);
 665                                 else if (System::strcasecmp(iMethodResponseName, "DeleteInstance") == 0)
 666                                     response = _decodeDeleteInstanceResponse(
 667                                         parser, messageId, isEmptyTag);
 668                                 else if (System::strcasecmp(iMethodResponseName, "ExecQuery") == 0)
 669                                     response = _decodeExecQueryResponse(
 670                                         parser, messageId, isEmptyTag);
 671                                 else
 672                                 {
 673                                     // l10n
 674 humberto       1.43 
 675 mike           1.2                  // Unrecognized IMethodResponse name attribute
 676 kumpf          1.60                 // throw XmlValidationError(parser.getLine(),
 677                                     //   String("Unrecognized IMethodResponse name \"") +
 678                                     //        iMethodResponseName + "\"");
 679                     
 680                                     MessageLoaderParms mlParms(
 681                                         "Client.CIMOperationResponseDecoder.UNRECOGNIZED_NAME",
 682                                         "Unrecognized IMethodResponse name \"$0\"",
 683                                         iMethodResponseName);
 684                                     throw XmlValidationError(parser.getLine(), mlParms);
 685                                 }
 686 humberto       1.43 
 687 kumpf          1.60             //
 688                                 // Handle end tag:
 689                                 //
 690 humberto       1.43 
 691 kumpf          1.60             if (!isEmptyTag)
 692                                 {
 693                                     XmlReader::expectEndTag(parser, "IMETHODRESPONSE");
 694                                 }
 695                             }
 696                             else if (XmlReader::getMethodResponseStartTag(
 697                                          parser, iMethodResponseName, isEmptyTag))
 698                             {
 699                                 response = _decodeInvokeMethodResponse(
 700                                     parser, messageId, iMethodResponseName, isEmptyTag);
 701                     
 702 j.alex         1.68 
 703 kumpf          1.60             //
 704                                 // Handle end tag:
 705                                 //
 706                                 if (!isEmptyTag)
 707                                 {
 708                                     XmlReader::expectEndTag(parser, "METHODRESPONSE");
 709                                 }
 710                             }
 711                             else
 712                             {
 713                                 // l10n
 714 humberto       1.43 
 715 kumpf          1.60             // throw XmlValidationError(parser.getLine(),
 716                                 //   "expected METHODRESPONSE or IMETHODRESPONSE element");
 717                     
 718                                 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_METHODRESPONSE_OR_IMETHODRESPONSE_ELEMENT",
 719                                     "expected METHODRESPONSE or IMETHODRESPONSE element");
 720                     
 721                                 throw XmlValidationError(parser.getLine(), mlParms);
 722                             }
 723 mike           1.2  
 724                             //
 725                             // Handle end tags:
 726                             //
 727 kumpf          1.60         XmlReader::expectEndTag(parser, "SIMPLERSP");
 728                             XmlReader::expectEndTag(parser, "MESSAGE");
 729                             XmlReader::expectEndTag(parser, "CIM");
 730 mike           1.2      }
 731 kumpf          1.17     catch (XmlException& x)
 732                         {
 733 kumpf          1.60         Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::TRACE,
 734                                 "CIMOperationResponseDecoder::_handleMethodResponse - XmlException has occurred. Message: $0",x.getMessage());
 735 david          1.38 
 736 kumpf          1.17         if (response)
 737                             {
 738 karl           1.41 //#ifdef PEGASUS_SNIA_INTEROP_TEST
 739                     //         httpMessage->printAll(cout);
 740                     //#endif
 741 kumpf          1.60 
 742 kumpf          1.17             delete response;
 743                             }
 744                     
 745                             response = new ClientExceptionMessage(
 746 kumpf          1.20             new CIMClientXmlException(x.getMessage()));
 747 kumpf          1.17     }
 748 mike           1.2      catch (Exception& x)
 749                         {
 750 kumpf          1.50         // Might get MalformedObjectNameException, InvalidNameException, etc.
 751 kumpf          1.17 
 752                             if (response)
 753                             {
 754                                 delete response;
 755                             }
 756 mike           1.2  
 757 kumpf          1.17         response = new ClientExceptionMessage(
 758 kumpf          1.53             new CIMClientResponseException(x.getMessage()));
 759 mike           1.2      }
 760 chuck          1.39 
 761                     //l10n start
 762                     // l10n TODO - might want to move A-L and C-L to Message
 763                     // to make this more maintainable
 764 kumpf          1.60     // Add the language header to the request
 765                         CIMMessage * cimmsg = dynamic_cast<CIMMessage *>(response);
 766                         if (cimmsg != NULL)
 767                         {
 768                             cimmsg->operationContext.set(ContentLanguageListContainer(contentLanguages));
 769                         }
 770                         else
 771                         {
 772                             ;    // l10n TODO - error back to client here
 773                         }
 774                     // l10n end
 775 mike           1.2  
 776 j.alex         1.68     response->setCloseConnect(cimReconnect);
 777                     
 778                     
 779 mike           1.2      _outputQueue->enqueue(response);
 780                     }
 781                     
 782                     CIMCreateClassResponseMessage* CIMOperationResponseDecoder::_decodeCreateClassResponse(
 783 kumpf          1.60     XmlParser& parser,
 784                         const String& messageId,
 785                         Boolean isEmptyImethodresponseTag)
 786 mike           1.2  {
 787                         XmlEntry entry;
 788 kumpf          1.12     CIMException cimException;
 789 mike           1.2  
 790 kumpf          1.60     if (!isEmptyImethodresponseTag)
 791 mike           1.2      {
 792 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 793                             {
 794                                 return(new CIMCreateClassResponseMessage(
 795                                     messageId,
 796                                     cimException,
 797                                     QueueIdStack()));
 798                             }
 799 mike           1.2  
 800 kumpf          1.60         if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 801                             {
 802                                 if (entry.type != XmlEntry::EMPTY_TAG)
 803                                 {
 804                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 805                                 }
 806                             }
 807 mike           1.2      }
 808 kumpf          1.60 
 809                         return(new CIMCreateClassResponseMessage(
 810                             messageId,
 811                             cimException,
 812                             QueueIdStack()));
 813 mike           1.2  }
 814                     
 815                     CIMGetClassResponseMessage* CIMOperationResponseDecoder::_decodeGetClassResponse(
 816 kumpf          1.60     XmlParser& parser,
 817                         const String& messageId,
 818                         Boolean isEmptyImethodresponseTag)
 819 mike           1.2  {
 820                         XmlEntry entry;
 821 kumpf          1.12     CIMException cimException;
 822 mike           1.2  
 823 kumpf          1.60     if (isEmptyImethodresponseTag)
 824                         {
 825                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
 826                                 "Expected open of $0 element", "IMETHODRESPONSE");
 827                             throw XmlValidationError(parser.getLine(), mlParms);
 828                         }
 829                         else if (XmlReader::getErrorElement(parser, cimException))
 830 mike           1.2      {
 831 kumpf          1.60         return(new CIMGetClassResponseMessage(
 832                                 messageId,
 833                                 cimException,
 834                                 QueueIdStack(),
 835                                 CIMClass()));
 836 mike           1.2      }
 837 kumpf          1.37     else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 838 mike           1.2      {
 839 kumpf          1.60         CIMClass cimClass;
 840 mike           1.2  
 841 kumpf          1.60         if ((entry.type == XmlEntry::EMPTY_TAG) ||
 842                                 !XmlReader::getClassElement(parser, cimClass))
 843                             {
 844                                 // l10n
 845 humberto       1.43 
 846 kumpf          1.60             // throw XmlValidationError(parser.getLine(),"expected CLASS element");
 847 humberto       1.43 
 848 kumpf          1.60             MessageLoaderParms mlParms(
 849                                     "Client.CIMOperationResponseDecoder.EXPECTED_CLASS_ELEMENT",
 850                                     "expected CLASS element");
 851                                 throw XmlValidationError(parser.getLine(), mlParms);
 852                             }
 853 humberto       1.43 
 854 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
 855 humberto       1.43 
 856 kumpf          1.60         return(new CIMGetClassResponseMessage(
 857                                 messageId,
 858                                 cimException,
 859                                 QueueIdStack(),
 860                                 cimClass));
 861 mike           1.2      }
 862                         else
 863                         {
 864 kumpf          1.60         // l10n
 865 humberto       1.43 
 866 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
 867                             //   "expected ERROR or IRETURNVALUE element");
 868 humberto       1.43 
 869 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
 870                                 "expected ERROR or IRETURNVALUE element");
 871 humberto       1.43 
 872 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
 873 mike           1.2      }
 874                     }
 875                     
 876                     CIMModifyClassResponseMessage* CIMOperationResponseDecoder::_decodeModifyClassResponse(
 877 kumpf          1.60     XmlParser& parser,
 878                         const String& messageId,
 879                         Boolean isEmptyImethodresponseTag)
 880 mike           1.2  {
 881                         XmlEntry entry;
 882 kumpf          1.12     CIMException cimException;
 883 mike           1.2  
 884 kumpf          1.60     if (!isEmptyImethodresponseTag)
 885 mike           1.2      {
 886 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 887                             {
 888                                 return(new CIMModifyClassResponseMessage(
 889                                     messageId,
 890                                     cimException,
 891                                     QueueIdStack()));
 892                             }
 893                     
 894                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 895                             {
 896                                 if (entry.type != XmlEntry::EMPTY_TAG)
 897                                 {
 898                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 899                                 }
 900                             }
 901 mike           1.2      }
 902 kumpf          1.60 
 903                         return(new CIMModifyClassResponseMessage(
 904                             messageId,
 905                             cimException,
 906                             QueueIdStack()));
 907 mike           1.2  }
 908                     
 909                     CIMEnumerateClassNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassNamesResponse(
 910 kumpf          1.60     XmlParser& parser,
 911                         const String& messageId,
 912                         Boolean isEmptyImethodresponseTag)
 913 mike           1.2  {
 914                         XmlEntry entry;
 915 kumpf          1.12     CIMException cimException;
 916 kumpf          1.60     Array<CIMName> classNames;
 917 mike           1.2  
 918 kumpf          1.60     if (!isEmptyImethodresponseTag)
 919 mike           1.2      {
 920 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 921                             {
 922                                 return(new CIMEnumerateClassNamesResponseMessage(
 923                                     messageId,
 924                                     cimException,
 925                                     QueueIdStack(),
 926                                     Array<CIMName>()));
 927                             }
 928                     
 929                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 930                             {
 931                                 if (entry.type != XmlEntry::EMPTY_TAG)
 932                                 {
 933                                     CIMName className;
 934                     
 935                                     while (XmlReader::getClassNameElement(parser, className, false))
 936                                         classNames.append(className);
 937                     
 938                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 939                                 }
 940                             }
 941 mike           1.2      }
 942                     
 943 kumpf          1.60     return(new CIMEnumerateClassNamesResponseMessage(
 944                             messageId,
 945                             cimException,
 946                             QueueIdStack(),
 947                             classNames));
 948 mike           1.2  }
 949                     
 950                     CIMEnumerateClassesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassesResponse(
 951 kumpf          1.60     XmlParser& parser,
 952                         const String& messageId,
 953                         Boolean isEmptyImethodresponseTag)
 954 mike           1.2  {
 955                         XmlEntry entry;
 956 kumpf          1.12     CIMException cimException;
 957 kumpf          1.60     Array<CIMClass> cimClasses;
 958 mike           1.2  
 959 kumpf          1.60     if (!isEmptyImethodresponseTag)
 960 mike           1.2      {
 961 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
 962                             {
 963                                 return(new CIMEnumerateClassesResponseMessage(
 964                                     messageId,
 965                                     cimException,
 966                                     QueueIdStack(),
 967                                     Array<CIMClass>()));
 968                             }
 969                     
 970                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
 971                             {
 972                                 if (entry.type != XmlEntry::EMPTY_TAG)
 973                                 {
 974                                     CIMClass cimClass;
 975                     
 976                                     while (XmlReader::getClassElement(parser, cimClass))
 977                                         cimClasses.append(cimClass);
 978                     
 979                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
 980                                 }
 981                             }
 982 mike           1.2      }
 983                     
 984 kumpf          1.60     return(new CIMEnumerateClassesResponseMessage(
 985                             messageId,
 986                             cimException,
 987                             QueueIdStack(),
 988                             cimClasses));
 989 mike           1.2  }
 990                     
 991                     CIMDeleteClassResponseMessage* CIMOperationResponseDecoder::_decodeDeleteClassResponse(
 992 kumpf          1.60     XmlParser& parser,
 993                         const String& messageId,
 994                         Boolean isEmptyImethodresponseTag)
 995 mike           1.2  {
 996                         XmlEntry entry;
 997 kumpf          1.12     CIMException cimException;
 998 mike           1.2  
 999 kumpf          1.60     if (!isEmptyImethodresponseTag)
1000 mike           1.2      {
1001 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1002                             {
1003                                 return(new CIMDeleteClassResponseMessage(
1004                                     messageId,
1005                                     cimException,
1006                                     QueueIdStack()));
1007                             }
1008                     
1009                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1010                             {
1011                                 if (entry.type != XmlEntry::EMPTY_TAG)
1012                                 {
1013                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1014                                 }
1015                             }
1016 mike           1.2      }
1017 kumpf          1.60 
1018                         return(new CIMDeleteClassResponseMessage(
1019                             messageId,
1020                             cimException,
1021                             QueueIdStack()));
1022 mike           1.2  }
1023                     
1024                     CIMCreateInstanceResponseMessage* CIMOperationResponseDecoder::_decodeCreateInstanceResponse(
1025 kumpf          1.60     XmlParser& parser,
1026                         const String& messageId,
1027                         Boolean isEmptyImethodresponseTag)
1028 mike           1.2  {
1029                         XmlEntry entry;
1030 kumpf          1.12     CIMException cimException;
1031 mike           1.2  
1032 kumpf          1.60     if (isEmptyImethodresponseTag)
1033                         {
1034                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1035                                 "Expected open of $0 element", "IMETHODRESPONSE");
1036                             throw XmlValidationError(parser.getLine(), mlParms);
1037                         }
1038                         else if (XmlReader::getErrorElement(parser, cimException))
1039 mike           1.2      {
1040 kumpf          1.60         return(new CIMCreateInstanceResponseMessage(
1041                                 messageId,
1042                                 cimException,
1043                                 QueueIdStack(),
1044                                 CIMObjectPath()));
1045 mike           1.2      }
1046                         else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1047                         {
1048 kumpf          1.60         CIMObjectPath instanceName;
1049                             XmlReader::getInstanceNameElement(parser, instanceName);
1050 mike           1.2  
1051 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
1052 mike           1.2  
1053 kumpf          1.60         return(new CIMCreateInstanceResponseMessage(
1054                                 messageId,
1055                                 cimException,
1056                                 QueueIdStack(),
1057                                 instanceName));
1058 mike           1.2      }
1059                         else
1060                         {
1061 kumpf          1.60         // l10n
1062 humberto       1.43 
1063 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
1064                             //   "expected ERROR or IRETURNVALUE element");
1065 humberto       1.43 
1066 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1067                                 "expected ERROR or IRETURNVALUE element");
1068 humberto       1.43 
1069 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
1070 mike           1.2      }
1071                     }
1072                     
1073                     CIMGetInstanceResponseMessage* CIMOperationResponseDecoder::_decodeGetInstanceResponse(
1074 kumpf          1.60     XmlParser& parser,
1075                         const String& messageId,
1076                         Boolean isEmptyImethodresponseTag)
1077 mike           1.2  {
1078                         XmlEntry entry;
1079 kumpf          1.12     CIMException cimException;
1080 mike           1.2  
1081 kumpf          1.60     if (isEmptyImethodresponseTag)
1082                         {
1083                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1084                                 "Expected open of $0 element", "IMETHODRESPONSE");
1085                             throw XmlValidationError(parser.getLine(), mlParms);
1086                         }
1087                         else if (XmlReader::getErrorElement(parser, cimException))
1088 mike           1.2      {
1089 kumpf          1.60         return(new CIMGetInstanceResponseMessage(
1090                                 messageId,
1091                                 cimException,
1092                                 QueueIdStack(),
1093                                 CIMInstance()));
1094 mike           1.2      }
1095 kumpf          1.37     else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1096 mike           1.2      {
1097 kumpf          1.60         CIMInstance cimInstance;
1098 mike           1.2  
1099 kumpf          1.60         if ((entry.type == XmlEntry::EMPTY_TAG) ||
1100                                 !XmlReader::getInstanceElement(parser, cimInstance))
1101                             {
1102                                 // l10n
1103 humberto       1.43 
1104 kumpf          1.60             // throw XmlValidationError(
1105                                 // parser.getLine(), "expected INSTANCE element");
1106 humberto       1.43 
1107 kumpf          1.60             MessageLoaderParms mlParms(
1108                                     "Client.CIMOperationResponseDecoder.EXPECTED_INSTANCE_ELEMENT",
1109                                     "expected INSTANCE element");
1110 humberto       1.43 
1111 kumpf          1.60             throw XmlValidationError(parser.getLine(), mlParms);
1112                             }
1113 mike           1.2  
1114 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
1115 mike           1.2  
1116 kumpf          1.60         return(new CIMGetInstanceResponseMessage(
1117                                 messageId,
1118                                 cimException,
1119                                 QueueIdStack(),
1120                                 cimInstance));
1121 mike           1.2      }
1122                         else
1123                         {
1124 kumpf          1.60         // l10n
1125 humberto       1.43 
1126 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
1127                             //   "expected ERROR or IRETURNVALUE element");
1128 humberto       1.43 
1129 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1130                                 "expected ERROR or IRETURNVALUE element");
1131 humberto       1.43 
1132 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
1133 mike           1.2      }
1134                     }
1135                     
1136                     CIMModifyInstanceResponseMessage* CIMOperationResponseDecoder::_decodeModifyInstanceResponse(
1137 kumpf          1.60     XmlParser& parser,
1138                         const String& messageId,
1139                         Boolean isEmptyImethodresponseTag)
1140 mike           1.2  {
1141                         XmlEntry entry;
1142 kumpf          1.12     CIMException cimException;
1143 mike           1.2  
1144 kumpf          1.60     if (!isEmptyImethodresponseTag)
1145 mike           1.2      {
1146 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1147                             {
1148                                 return(new CIMModifyInstanceResponseMessage(
1149                                     messageId,
1150                                     cimException,
1151                                     QueueIdStack()));
1152                             }
1153                     
1154                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1155                             {
1156                                 if (entry.type != XmlEntry::EMPTY_TAG)
1157                                 {
1158                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1159                                 }
1160                             }
1161 mike           1.2      }
1162 kumpf          1.60 
1163                         return(new CIMModifyInstanceResponseMessage(
1164                             messageId,
1165                             cimException,
1166                             QueueIdStack()));
1167 mike           1.2  }
1168                     
1169                     CIMEnumerateInstanceNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstanceNamesResponse(
1170 kumpf          1.60     XmlParser& parser,
1171                         const String& messageId,
1172                         Boolean isEmptyImethodresponseTag)
1173 mike           1.2  {
1174                         XmlEntry entry;
1175 kumpf          1.12     CIMException cimException;
1176 kumpf          1.60     Array<CIMObjectPath> instanceNames;
1177 mike           1.2  
1178 kumpf          1.60     if (!isEmptyImethodresponseTag)
1179 mike           1.2      {
1180 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1181                             {
1182                                 return(new CIMEnumerateInstanceNamesResponseMessage(
1183                                     messageId,
1184                                     cimException,
1185                                     QueueIdStack(),
1186                                     Array<CIMObjectPath>()));
1187                             }
1188                     
1189                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1190                             {
1191                                 if (entry.type != XmlEntry::EMPTY_TAG)
1192                                 {
1193                                     String className;
1194                                     Array<CIMKeyBinding> keyBindings;
1195                     
1196                                     while (XmlReader::getInstanceNameElement(
1197                                         parser, className, keyBindings))
1198                                     {
1199                                         CIMObjectPath r(
1200                                             String::EMPTY,
1201 kumpf          1.60                         CIMNamespaceName(),
1202                                             className,
1203                                             keyBindings);
1204                                         instanceNames.append(r);
1205                                     }
1206                     
1207                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1208                                 }
1209                             }
1210 mike           1.2      }
1211                     
1212 kumpf          1.60     return(new CIMEnumerateInstanceNamesResponseMessage(
1213                             messageId,
1214                             cimException,
1215                             QueueIdStack(),
1216                             instanceNames));
1217 mike           1.2  }
1218                     
1219                     CIMEnumerateInstancesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstancesResponse(
1220 kumpf          1.60     XmlParser& parser,
1221                         const String& messageId,
1222                         Boolean isEmptyImethodresponseTag)
1223 mike           1.2  {
1224                         XmlEntry entry;
1225 kumpf          1.12     CIMException cimException;
1226 kumpf          1.60     Array<CIMInstance> namedInstances;
1227 mike           1.2  
1228 kumpf          1.60     if (!isEmptyImethodresponseTag)
1229 mike           1.2      {
1230 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1231                             {
1232                                 return(new CIMEnumerateInstancesResponseMessage(
1233                                     messageId,
1234                                     cimException,
1235                                     QueueIdStack(),
1236                                     Array<CIMInstance>()));
1237                             }
1238                     
1239                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1240                             {
1241                                 if (entry.type != XmlEntry::EMPTY_TAG)
1242                                 {
1243                                     CIMInstance namedInstance;
1244                     
1245                                     while (XmlReader::getNamedInstanceElement(
1246                                                parser, namedInstance))
1247                                     {
1248                                         namedInstances.append(namedInstance);
1249                                     }
1250                     
1251 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1252                                 }
1253                             }
1254 mike           1.2      }
1255                     
1256 kumpf          1.60     return(new CIMEnumerateInstancesResponseMessage(
1257                             messageId,
1258                             cimException,
1259                             QueueIdStack(),
1260                             namedInstances));
1261 mike           1.2  }
1262                     
1263                     CIMDeleteInstanceResponseMessage* CIMOperationResponseDecoder::_decodeDeleteInstanceResponse(
1264 kumpf          1.60     XmlParser& parser,
1265                         const String& messageId,
1266                         Boolean isEmptyImethodresponseTag)
1267 mike           1.2  {
1268                         XmlEntry entry;
1269 kumpf          1.12     CIMException cimException;
1270 mike           1.2  
1271 kumpf          1.60     if (!isEmptyImethodresponseTag)
1272 mike           1.2      {
1273 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1274                             {
1275                                 return(new CIMDeleteInstanceResponseMessage(
1276                                     messageId,
1277                                     cimException,
1278                                     QueueIdStack()));
1279                             }
1280                     
1281                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1282                             {
1283                                 if (entry.type != XmlEntry::EMPTY_TAG)
1284                                 {
1285                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1286                                 }
1287                             }
1288 mike           1.2      }
1289 kumpf          1.60 
1290                         return(new CIMDeleteInstanceResponseMessage(
1291                             messageId,
1292                             cimException,
1293                             QueueIdStack()));
1294 mike           1.2  }
1295                     
1296                     CIMGetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeGetPropertyResponse(
1297 kumpf          1.60     XmlParser& parser,
1298                         const String& messageId,
1299                         Boolean isEmptyImethodresponseTag)
1300 mike           1.2  {
1301                         XmlEntry entry;
1302 kumpf          1.12     CIMException cimException;
1303 kumpf          1.60     CIMValue cimValue(CIMTYPE_STRING, false);
1304 mike           1.2  
1305 kumpf          1.60     if (!isEmptyImethodresponseTag)
1306 mike           1.2      {
1307 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1308                             {
1309                                 return(new CIMGetPropertyResponseMessage(
1310                                     messageId,
1311                                     cimException,
1312                                     QueueIdStack(),
1313                                     CIMValue()));
1314                             }
1315 kumpf          1.14 
1316 kumpf          1.60         if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1317                             {
1318                                 if (entry.type != XmlEntry::EMPTY_TAG)
1319                                 {
1320                                     if (!XmlReader::getPropertyValue(parser, cimValue))
1321                                     {
1322 kumpf          1.37                     // No value given; just return a null String value
1323 kumpf          1.60                 }
1324 kumpf          1.37 
1325 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1326                                 }
1327                             }
1328                             else
1329                             {
1330 kumpf          1.14             // No value given; just return a null String value
1331 kumpf          1.60         }
1332                         }
1333 mike           1.2  
1334 kumpf          1.60     return(new CIMGetPropertyResponseMessage(
1335                             messageId,
1336                             cimException,
1337                             QueueIdStack(),
1338                             cimValue));
1339 mike           1.2  }
1340                     
1341                     CIMSetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeSetPropertyResponse(
1342 kumpf          1.60     XmlParser& parser,
1343                         const String& messageId,
1344                         Boolean isEmptyImethodresponseTag)
1345 mike           1.2  {
1346                         XmlEntry entry;
1347 kumpf          1.12     CIMException cimException;
1348 mike           1.2  
1349 kumpf          1.60     if (!isEmptyImethodresponseTag)
1350 mike           1.2      {
1351 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1352                             {
1353                                 return(new CIMSetPropertyResponseMessage(
1354                                     messageId,
1355                                     cimException,
1356                                     QueueIdStack()));
1357                             }
1358                     
1359                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1360                             {
1361                                 if (entry.type != XmlEntry::EMPTY_TAG)
1362                                 {
1363                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1364                                 }
1365                             }
1366 mike           1.2      }
1367 kumpf          1.60 
1368                         return(new CIMSetPropertyResponseMessage(
1369                             messageId,
1370                             cimException,
1371                             QueueIdStack()));
1372 mike           1.2  }
1373                     
1374                     CIMSetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeSetQualifierResponse(
1375 kumpf          1.60     XmlParser& parser,
1376                         const String& messageId,
1377                         Boolean isEmptyImethodresponseTag)
1378 mike           1.2  {
1379                         XmlEntry entry;
1380 kumpf          1.12     CIMException cimException;
1381 mike           1.2  
1382 kumpf          1.60     if (!isEmptyImethodresponseTag)
1383 mike           1.2      {
1384 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1385                             {
1386                                 return(new CIMSetQualifierResponseMessage(
1387                                     messageId,
1388                                     cimException,
1389                                     QueueIdStack()));
1390                             }
1391                     
1392                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1393                             {
1394                                 if (entry.type != XmlEntry::EMPTY_TAG)
1395                                 {
1396                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1397                                 }
1398                             }
1399 mike           1.2      }
1400 kumpf          1.60 
1401                         return(new CIMSetQualifierResponseMessage(
1402                             messageId,
1403                             cimException,
1404                             QueueIdStack()));
1405 mike           1.2  }
1406                     
1407                     CIMGetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeGetQualifierResponse(
1408 kumpf          1.60     XmlParser& parser,
1409                         const String& messageId,
1410                         Boolean isEmptyImethodresponseTag)
1411 mike           1.2  {
1412                         XmlEntry entry;
1413 kumpf          1.12     CIMException cimException;
1414 mike           1.2  
1415 kumpf          1.60     if (isEmptyImethodresponseTag)
1416                         {
1417                             MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1418                                 "Expected open of $0 element", "IMETHODRESPONSE");
1419                             throw XmlValidationError(parser.getLine(), mlParms);
1420                         }
1421                         else if (XmlReader::getErrorElement(parser, cimException))
1422 mike           1.2      {
1423 kumpf          1.60         return(new CIMGetQualifierResponseMessage(
1424                                 messageId,
1425                                 cimException,
1426                                 QueueIdStack(),
1427                                 CIMQualifierDecl()));
1428 mike           1.2      }
1429                         else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1430                         {
1431 kumpf          1.60         CIMQualifierDecl qualifierDecl;
1432                             XmlReader::getQualifierDeclElement(parser, qualifierDecl);
1433 mike           1.2  
1434 kumpf          1.60         XmlReader::expectEndTag(parser, "IRETURNVALUE");
1435 mike           1.2  
1436 kumpf          1.60         return(new CIMGetQualifierResponseMessage(
1437                                 messageId,
1438                                 cimException,
1439                                 QueueIdStack(),
1440                                 qualifierDecl));
1441 mike           1.2      }
1442                         else
1443                         {
1444 kumpf          1.60         // l10n
1445 humberto       1.43 
1446 kumpf          1.60         // throw XmlValidationError(parser.getLine(),
1447                             //   "expected ERROR or IRETURNVALUE element");
1448 humberto       1.43 
1449 kumpf          1.60         MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1450                             "expected ERROR or IRETURNVALUE element");
1451 humberto       1.43 
1452 kumpf          1.60         throw XmlValidationError(parser.getLine(), mlParms);
1453 mike           1.2      }
1454                     }
1455                     
1456                     CIMEnumerateQualifiersResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateQualifiersResponse(
1457 kumpf          1.60     XmlParser& parser,
1458                         const String& messageId,
1459                         Boolean isEmptyImethodresponseTag)
1460 mike           1.2  {
1461                         XmlEntry entry;
1462 kumpf          1.12     CIMException cimException;
1463 kumpf          1.60     Array<CIMQualifierDecl> qualifierDecls;
1464 mike           1.2  
1465 kumpf          1.60     if (!isEmptyImethodresponseTag)
1466 mike           1.2      {
1467 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1468                             {
1469                                 return(new CIMEnumerateQualifiersResponseMessage(
1470                                     messageId,
1471                                     cimException,
1472                                     QueueIdStack(),
1473                                     Array<CIMQualifierDecl>()));
1474                             }
1475                     
1476                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1477                             {
1478                                 if (entry.type != XmlEntry::EMPTY_TAG)
1479                                 {
1480                                     CIMQualifierDecl qualifierDecl;
1481                     
1482                                     while (XmlReader::getQualifierDeclElement(
1483                                                parser, qualifierDecl))
1484                                     {
1485                                         qualifierDecls.append(qualifierDecl);
1486                                     }
1487                     
1488 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1489                                 }
1490                             }
1491 mike           1.2      }
1492                     
1493 kumpf          1.60     return(new CIMEnumerateQualifiersResponseMessage(
1494                             messageId,
1495                             cimException,
1496                             QueueIdStack(),
1497                             qualifierDecls));
1498 mike           1.2  }
1499                     
1500                     CIMDeleteQualifierResponseMessage* CIMOperationResponseDecoder::_decodeDeleteQualifierResponse(
1501 kumpf          1.60     XmlParser& parser,
1502                         const String& messageId,
1503                         Boolean isEmptyImethodresponseTag)
1504 mike           1.2  {
1505                         XmlEntry entry;
1506 kumpf          1.12     CIMException cimException;
1507 mike           1.2  
1508 kumpf          1.60     if (!isEmptyImethodresponseTag)
1509 mike           1.2      {
1510 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1511                             {
1512                                 return(new CIMDeleteQualifierResponseMessage(
1513                                     messageId,
1514                                     cimException,
1515                                     QueueIdStack()));
1516                             }
1517                     
1518                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1519                             {
1520                                 if (entry.type != XmlEntry::EMPTY_TAG)
1521                                 {
1522                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1523                                 }
1524                             }
1525 mike           1.2      }
1526 kumpf          1.60 
1527                         return(new CIMDeleteQualifierResponseMessage(
1528                             messageId,
1529                             cimException,
1530                             QueueIdStack()));
1531 mike           1.2  }
1532                     
1533                     CIMReferenceNamesResponseMessage* CIMOperationResponseDecoder::_decodeReferenceNamesResponse(
1534 kumpf          1.60     XmlParser& parser,
1535                         const String& messageId,
1536                         Boolean isEmptyImethodresponseTag)
1537 mike           1.2  {
1538                         XmlEntry entry;
1539 kumpf          1.12     CIMException cimException;
1540 kumpf          1.60     Array<CIMObjectPath> objectPaths;
1541 mike           1.2  
1542 kumpf          1.60     if (!isEmptyImethodresponseTag)
1543 mike           1.2      {
1544 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1545                             {
1546                                 return(new CIMReferenceNamesResponseMessage(
1547                                     messageId,
1548                                     cimException,
1549                                     QueueIdStack(),
1550                                     Array<CIMObjectPath>()));
1551                             }
1552                     
1553                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1554                             {
1555                                 if (entry.type != XmlEntry::EMPTY_TAG)
1556                                 {
1557                                     CIMObjectPath objectPath;
1558                     
1559                                     while (XmlReader::getObjectPathElement(parser, objectPath))
1560                                         objectPaths.append(objectPath);
1561                     
1562                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1563                                 }
1564                             }
1565 mike           1.2      }
1566                     
1567 kumpf          1.60     return(new CIMReferenceNamesResponseMessage(
1568                             messageId,
1569                             cimException,
1570                             QueueIdStack(),
1571                             objectPaths));
1572 mike           1.2  }
1573                     
1574                     CIMReferencesResponseMessage* CIMOperationResponseDecoder::_decodeReferencesResponse(
1575 kumpf          1.60     XmlParser& parser,
1576                         const String& messageId,
1577                         Boolean isEmptyImethodresponseTag)
1578 mike           1.2  {
1579                         XmlEntry entry;
1580 kumpf          1.12     CIMException cimException;
1581 kumpf          1.60     Array<CIMObject> objectWithPathArray;
1582 mike           1.2  
1583 kumpf          1.60     if (!isEmptyImethodresponseTag)
1584 mike           1.2      {
1585 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1586                             {
1587                                 return(new CIMReferencesResponseMessage(
1588                                     messageId,
1589                                     cimException,
1590                                     QueueIdStack(),
1591                                     Array<CIMObject>()));
1592                             }
1593                     
1594                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1595                             {
1596                                 if (entry.type != XmlEntry::EMPTY_TAG)
1597                                 {
1598                                     CIMObject objectWithPath;
1599                     
1600                                     while (XmlReader::getValueObjectWithPathElement(
1601                                                parser, objectWithPath))
1602                                     {
1603                                         objectWithPathArray.append(objectWithPath);
1604                                     }
1605                     
1606 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1607                                 }
1608                             }
1609 mike           1.2      }
1610                     
1611 kumpf          1.60     return(new CIMReferencesResponseMessage(
1612                             messageId,
1613                             cimException,
1614                             QueueIdStack(),
1615                             objectWithPathArray));
1616 mike           1.2  }
1617                     
1618                     CIMAssociatorNamesResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorNamesResponse(
1619 kumpf          1.60     XmlParser& parser,
1620                         const String& messageId,
1621                         Boolean isEmptyImethodresponseTag)
1622 mike           1.2  {
1623                         XmlEntry entry;
1624 kumpf          1.12     CIMException cimException;
1625 kumpf          1.60     Array<CIMObjectPath> objectPaths;
1626 mike           1.2  
1627 kumpf          1.60     if (!isEmptyImethodresponseTag)
1628 mike           1.2      {
1629 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1630                             {
1631                                 return(new CIMAssociatorNamesResponseMessage(
1632                                     messageId,
1633                                     cimException,
1634                                     QueueIdStack(),
1635                                     Array<CIMObjectPath>()));
1636                             }
1637                     
1638                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1639                             {
1640                                 if (entry.type != XmlEntry::EMPTY_TAG)
1641                                 {
1642                                     CIMObjectPath objectPath;
1643                     
1644                                     while (XmlReader::getObjectPathElement(parser, objectPath))
1645                                         objectPaths.append(objectPath);
1646                     
1647                                     XmlReader::expectEndTag(parser, "IRETURNVALUE");
1648                                 }
1649                             }
1650 mike           1.2      }
1651                     
1652 kumpf          1.60     return(new CIMAssociatorNamesResponseMessage(
1653                             messageId,
1654                             cimException,
1655                             QueueIdStack(),
1656                             objectPaths));
1657 mike           1.2  }
1658                     
1659                     CIMAssociatorsResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorsResponse(
1660 kumpf          1.60     XmlParser& parser,
1661                         const String& messageId,
1662                         Boolean isEmptyImethodresponseTag)
1663 mike           1.2  {
1664                         XmlEntry entry;
1665 kumpf          1.12     CIMException cimException;
1666 kumpf          1.60     Array<CIMObject> objectWithPathArray;
1667 mike           1.2  
1668 kumpf          1.60     if (!isEmptyImethodresponseTag)
1669 mike           1.2      {
1670 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1671                             {
1672                                 return(new CIMAssociatorsResponseMessage(
1673                                     messageId,
1674                                     cimException,
1675                                     QueueIdStack(),
1676                                     Array<CIMObject>()));
1677                             }
1678                     
1679                             if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1680                             {
1681                                 if (entry.type != XmlEntry::EMPTY_TAG)
1682                                 {
1683                                     CIMObject objectWithPath;
1684                     
1685                                     while (XmlReader::getValueObjectWithPathElement(
1686                                                parser, objectWithPath))
1687                                     {
1688                                         objectWithPathArray.append(objectWithPath);
1689                                     }
1690                     
1691 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1692                                 }
1693                             }
1694 mike           1.2      }
1695                     
1696 kumpf          1.60     return(new CIMAssociatorsResponseMessage(
1697                             messageId,
1698                             cimException,
1699                             QueueIdStack(),
1700                             objectWithPathArray));
1701 kumpf          1.10 }
1702                     
1703                     CIMExecQueryResponseMessage* CIMOperationResponseDecoder::_decodeExecQueryResponse(
1704 kumpf          1.60     XmlParser& parser,
1705                         const String& messageId,
1706                         Boolean isEmptyImethodresponseTag)
1707 kumpf          1.10 {
1708                         XmlEntry entry;
1709 kumpf          1.12     CIMException cimException;
1710 kumpf          1.60     Array<CIMObject> objectWithPathArray;
1711 kumpf          1.10 
1712 kumpf          1.60     if (!isEmptyImethodresponseTag)
1713 kumpf          1.10     {
1714 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1715                             {
1716                                 return(new CIMExecQueryResponseMessage(
1717                                     messageId,
1718                                     cimException,
1719                                     QueueIdStack(),
1720                                     Array<CIMObject>()));
1721                             }
1722 kumpf          1.10 
1723 kumpf          1.60         if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1724                             {
1725                                 if (entry.type != XmlEntry::EMPTY_TAG)
1726                                 {
1727 kumpf          1.37                 XmlReader::getObjectArray(parser, objectWithPathArray);
1728 kumpf          1.10 
1729 kumpf          1.60                 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1730                                 }
1731                             }
1732 mike           1.2      }
1733 kumpf          1.60 
1734                         return(new CIMExecQueryResponseMessage(
1735                             messageId,
1736                             cimException,
1737                             QueueIdStack(),
1738                             objectWithPathArray));
1739 mike           1.2  }
1740                     
1741                     CIMInvokeMethodResponseMessage* CIMOperationResponseDecoder::_decodeInvokeMethodResponse(
1742 kumpf          1.60     XmlParser& parser,
1743                         const String& messageId,
1744                         const String& methodName,
1745                         Boolean isEmptyMethodresponseTag)
1746 mike           1.2  {
1747 kumpf          1.12     CIMException cimException;
1748 mike           1.2  
1749 kumpf          1.5      CIMParamValue paramValue;
1750                         Array<CIMParamValue> outParameters;
1751 kumpf          1.6      CIMValue returnValue;
1752 mike           1.2  
1753 kumpf          1.60     if (!isEmptyMethodresponseTag)
1754 mike           1.2      {
1755 kumpf          1.60         if (XmlReader::getErrorElement(parser, cimException))
1756                             {
1757                                 return(new CIMInvokeMethodResponseMessage(
1758                                     messageId,
1759                                     cimException,
1760                                     QueueIdStack(),
1761                                     returnValue,
1762                                     outParameters,
1763                                     methodName));
1764                             }
1765                     
1766 kumpf          1.4          Boolean isReturnValue = false;
1767                             Boolean isParamValue = false;
1768                             Boolean gotReturnValue = false;
1769                     
1770                             while ((isReturnValue =
1771 kumpf          1.6                      XmlReader::getReturnValueElement(parser, returnValue)) ||
1772 kumpf          1.5                 (isParamValue =
1773 kumpf          1.60                     XmlReader::getParamValueElement(parser, paramValue)))
1774 kumpf          1.4          {
1775                                 if (isReturnValue)
1776                                 {
1777                                     if (gotReturnValue)
1778                                     {
1779 kumpf          1.60                     // l10n
1780 humberto       1.43 
1781 kumpf          1.60                     // throw XmlValidationError(parser.getLine(),
1782                                         //   "unexpected RETURNVALUE element");
1783 humberto       1.43 
1784 kumpf          1.60                     MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_RETURNVALUE_ELEMENT",
1785                                             "unexpected RETURNVALUE element");
1786 humberto       1.43 
1787 kumpf          1.60                     throw XmlValidationError(parser.getLine(), mlParms);
1788 kumpf          1.4                  }
1789                                     gotReturnValue = true;
1790                                 }
1791                                 else    // isParamValue == true
1792                                 {
1793 kumpf          1.60                 outParameters.append(paramValue);
1794 kumpf          1.4              }
1795                     
1796                                 isReturnValue = false;
1797                                 isParamValue = false;
1798                             }
1799 kumpf          1.60     }
1800 kumpf          1.4  
1801 kumpf          1.60     return(new CIMInvokeMethodResponseMessage(
1802                             messageId,
1803                             cimException,
1804                             QueueIdStack(),
1805                             returnValue,
1806                             outParameters,
1807                             methodName));
1808 mike           1.2  }
1809                     
1810                     PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2