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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2