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

   1 martin 1.91 //%LICENSE////////////////////////////////////////////////////////////////
   2 martin 1.92 //
   3 martin 1.91 // Licensed to The Open Group (TOG) under one or more contributor license
   4             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   5             // this work for additional information regarding copyright ownership.
   6             // Each contributor licenses this file to you under the OpenPegasus Open
   7             // Source License; you may not use this file except in compliance with the
   8             // License.
   9 martin 1.92 //
  10 martin 1.91 // Permission is hereby granted, free of charge, to any person obtaining a
  11             // copy of this software and associated documentation files (the "Software"),
  12             // to deal in the Software without restriction, including without limitation
  13             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  14             // and/or sell copies of the Software, and to permit persons to whom the
  15             // Software is furnished to do so, subject to the following conditions:
  16 martin 1.92 //
  17 martin 1.91 // The above copyright notice and this permission notice shall be included
  18             // in all copies or substantial portions of the Software.
  19 martin 1.92 //
  20 martin 1.91 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  21 martin 1.92 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22 martin 1.91 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  23             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  24             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  25             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  26             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27 martin 1.92 //
  28 martin 1.91 //////////////////////////////////////////////////////////////////////////
  29 brian.campbell 1.67 //
  30                     //%/////////////////////////////////////////////////////////////////////////////
  31                     
  32                     #ifndef PegasusDispatcher_Dispatcher_h
  33                     #define PegasusDispatcher_Dispatcher_h
  34                     
  35                     #include <Pegasus/Common/Config.h>
  36                     #include <Pegasus/Common/Thread.h>
  37                     #include <Pegasus/Common/MessageQueue.h>
  38                     #include <Pegasus/Common/CIMMessage.h>
  39                     #include <Pegasus/Common/CIMObject.h>
  40                     #include <Pegasus/Common/OperationContextInternal.h>
  41                     #include <Pegasus/Common/QueryExpressionRep.h>
  42                     #include <Pegasus/Common/AutoPtr.h>
  43 karl           1.103 #include <Pegasus/Common/UintArgs.h>
  44 karl           1.101 #include <Pegasus/Common/ArrayIterator.h>
  45                      #include <Pegasus/Common/Magic.h>
  46 brian.campbell 1.67  
  47                      #include <Pegasus/Repository/CIMRepository.h>
  48                      
  49                      #include <Pegasus/Server/CIMServer.h>
  50 kumpf          1.82  #include \
  51                          <Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h>
  52 brian.campbell 1.67  #include <Pegasus/Server/Linkage.h>
  53 venkat.puvvada 1.87  #include <Pegasus/Server/reg_table.h>
  54 karl           1.103 #include <Pegasus/Server/EnumerationContext.h>
  55 karl           1.105 #ifdef PEGASUS_ENABLE_FQL
  56                      ////  Temporarily disabled because of conflicts between this and
  57                      ////  QueryExpressionRep that causes errors.  Also temporarily disabled
  58                      ////  The function that uses this since there is an error I cannot figure out.
  59                      ///#include <Pegasus/FQL/FQLQueryExpressionRep.h>
  60                      #endif
  61 brian.campbell 1.67  PEGASUS_NAMESPACE_BEGIN
  62 karl           1.101 PEGASUS_USING_STD;
  63 karl           1.97  //
  64                      // Convience Macro to simplify conversion of String to const char*
  65                      //
  66                      #define CSTRING(ARG) (const char*) ARG.getCString()
  67 brian.campbell 1.67  
  68 karl           1.99  /******************************************************************************
  69                      **
  70                      **  ProviderInfo Class - manage info about classes and providers received
  71                      **      from provider lookup functions. Provides info on classes and providers
  72                      **      in enumerations and association looksups including provider type,
  73                      **      etc. This class is private to the dispatcher.
  74                      **
  75                      ******************************************************************************/
  76 brian.campbell 1.67  
  77                      class PEGASUS_SERVER_LINKAGE ProviderInfo
  78                      {
  79                      public:
  80 karl           1.97      /**
  81                           * Constructor with only className. Used in those cases where
  82                           * the ProviderInfo object is supplied to one of the lookup
  83                           * methods with only classname.  The remaining information (ex.
  84                           * serviceId, controlProviderName, etc. can be added with the
  85                           * addProviderInfo function.
  86                           *
  87                           */
  88 kumpf          1.86      ProviderInfo(const CIMName& className_)
  89                              : className(className_),
  90 venkat.puvvada 1.88            serviceId(0),
  91 kumpf          1.82            hasProvider(false),
  92                                hasProviderNormalization(false),
  93                                hasNoQuery(true)
  94 brian.campbell 1.67      {
  95                          }
  96 karl           1.97      /**
  97                             Constructor with className, serviceId, and
  98                             controlProviderName. All basic information in the
  99                             constructor.
 100                           */
 101 chip           1.72      ProviderInfo(
 102 kumpf          1.86          const CIMName& className_,
 103 venkat.puvvada 1.87          Uint32 serviceId_,
 104 kumpf          1.86          const String& controlProviderName_)
 105                              : className(className_),
 106 venkat.puvvada 1.87            serviceId(serviceId_),
 107 kumpf          1.86            controlProviderName(controlProviderName_),
 108 kumpf          1.82            hasProvider(false),
 109                                hasProviderNormalization(false),
 110                                hasNoQuery(true)
 111 brian.campbell 1.67      {
 112                          }
 113 karl           1.97      /**
 114                             Copy constructor
 115                           */
 116 kumpf          1.82      ProviderInfo(const ProviderInfo& providerInfo)
 117 chip           1.72          : className(providerInfo.className),
 118 venkat.puvvada 1.87            serviceId(providerInfo.serviceId),
 119 kumpf          1.82            controlProviderName(providerInfo.controlProviderName),
 120                                hasProvider(providerInfo.hasProvider),
 121 ouyang.jian    1.85            hasProviderNormalization(providerInfo.hasProviderNormalization),
 122 kumpf          1.82            hasNoQuery(providerInfo.hasNoQuery)
 123 brian.campbell 1.67      {
 124                              if (providerInfo.providerIdContainer.get() != 0)
 125                              {
 126                                  providerIdContainer.reset(
 127                                      new ProviderIdContainer(*providerInfo.providerIdContainer));
 128                              }
 129                          }
 130                      
 131 kumpf          1.82      ProviderInfo& operator=(const ProviderInfo& providerInfo)
 132 brian.campbell 1.67      {
 133                              if (&providerInfo != this)
 134                              {
 135                                  className = providerInfo.className;
 136 venkat.puvvada 1.87              serviceId = providerInfo.serviceId;
 137 brian.campbell 1.67              controlProviderName = providerInfo.controlProviderName;
 138                                  hasProvider = providerInfo.hasProvider;
 139 chip           1.72              hasProviderNormalization = providerInfo.hasProviderNormalization;
 140 brian.campbell 1.67              hasNoQuery = providerInfo.hasNoQuery;
 141 chip           1.72  
 142 brian.campbell 1.67              providerIdContainer.reset();
 143 chip           1.72  
 144 brian.campbell 1.67              if (providerInfo.providerIdContainer.get() != 0)
 145                                  {
 146 kumpf          1.82                  providerIdContainer.reset(new ProviderIdContainer(
 147                                          *providerInfo.providerIdContainer.get()));
 148 brian.campbell 1.67              }
 149                              }
 150 chip           1.72  
 151 kumpf          1.82          return *this;
 152 brian.campbell 1.67      }
 153                      
 154 karl           1.97      /**
 155                              Method to add serviceID, etc. after the object is constructed.
 156                              Use with the constructor that only adds className to complete
 157                              the basic registration info for the provider.
 158                          */
 159                          void addProviderInfo(Uint32 serviceId_, Boolean hasProvider_,
 160                                               Boolean hasNoQuery_)
 161                          {
 162                              serviceId = serviceId_;
 163                              hasProvider = hasProvider_;
 164                              hasNoQuery = hasNoQuery_;
 165                          }
 166                      
 167 chip           1.72      CIMName className;
 168 venkat.puvvada 1.87      Uint32 serviceId;
 169 chip           1.72      String controlProviderName;
 170                          Boolean hasProvider;
 171                          Boolean hasProviderNormalization;
 172                          Boolean hasNoQuery;
 173 brian.campbell 1.67      AutoPtr<ProviderIdContainer> providerIdContainer;
 174                      
 175                      private:
 176 karl           1.97      // Empty constructor not allowed.
 177 kumpf          1.82      ProviderInfo()
 178 chip           1.72      {
 179                          }
 180 brian.campbell 1.67  };
 181 karl           1.99  /*
 182                          Container for items of ProviderInfo to manage a list of ProviderInfo
 183                          information objects. The providerCounter
 184                          counts the number of providers in the list not the number of objects
 185                          in the list.  Classes without providers may also exist in the list.
 186                      */
 187 karl           1.101 class PEGASUS_SERVER_LINKAGE ProviderInfoList
 188 karl           1.99  {
 189                      public:
 190 karl           1.101     ProviderInfoList()
 191                          : providerCount(0), _index(0)
 192 karl           1.99      {
 193                          }
 194 karl           1.101     ~ProviderInfoList()
 195 karl           1.99      {
 196                          }
 197 karl           1.101     /** Get size of list. Note This may not match count of providers
 198                          */
 199                          Uint32 size();
 200                      
 201                          /** Append a class to the list.  This function does NOT
 202                              increment the providerCount. This allows classes that do not
 203                              have providers to be added to the list to be processed by
 204                              the dispatcher.
 205                              @param ProviderInfo defining the class to be appended
 206                           */
 207                          void appendClass(ProviderInfo& x);
 208                      
 209 karl           1.103     /** Append a new Provider to the list.  This function
 210 karl           1.101         increments the ProviderCount.  This count may be different
 211                              than the count of items in the array
 212                              @param x ProviderInfo to append to the list
 213                           */
 214                          void appendProvider(ProviderInfo& x);
 215                      
 216                          /**  Test to determine if there are more entries in the providerInfoList.
 217                              The getNext() function should be used in conjunction with this to
 218                              get the next entry from the list. When the instance of the class
 219                              is initialized it sets a pointer to the start of the list.  Each
 220                              hasMore() finds the next providerInfo that matches the isProvider
 221                              criteria. When the last entry is processed, it sets the pointer back
 222                              to the start of the list so it can be used again without a formal
 223                              reset function.
 224                              @param isProvider Boolean true if next is request for
 225                              providers or false if it is for classes that do not have a
 226                              provider.
 227                              @return true if more, false if finished
 228                      
 229                              <p><b>Example:</b>
 230 karl           1.102 
 231 karl           1.101         while (providerInfo.hasMore(x, true)) // loop to return all providers
 232                              or
 233                              while (providerInfo.hasMore(x, false)) // loop to returns classes w/o
 234                                  providers
 235                          */
 236                          Boolean hasMore(Boolean isProvider);
 237                      
 238                          /** Get the current providerInfo item in the  ProviderInfoList
 239                              array. This function must follow the hasMore() function that
 240                              determines if there are more entries in the array.
 241                              while (providerInfoList.hasMore(true))
 242                              {
 243                                  providerInfo pI = providerInfoList.getNext()
 244                                  ....
 245                              }
 246                              @exception generates IndexOutOfBound exception if the
 247                              request is made after haveMore returns false or possibly
 248                              without executing the hasMore function.
 249                          */
 250                          ProviderInfo& getNext();
 251                      
 252 karl           1.101     /** get the index for the current entry in the providerInfoList.
 253                              Use this after getNext() to retrieve an index. Used only as
 254                              a counter for displays today.
 255                              @return Uint32
 256                           */
 257                          Uint32 getIndex();
 258                      
 259 karl           1.103     // Execute the pegtrace that displays class/provider
 260                          void pegRoutingTrace(ProviderInfo& providerInfo, const char * reqMsgName,
 261                                               String& messageId);
 262                      
 263 karl           1.101 // The following are purely debug functionality and are normally not
 264                      // compiled.  To compile them for testing of the results of the
 265                      // lookup providers functionality enable the following define.
 266                      #define PROVIDER_INFO_DISPLAY
 267                      #ifdef PROVIDER_INFO_DISPLAY
 268                          void trace(const CIMNamespaceName& nameSpace, const CIMName& className,
 269                                     Boolean assoc = false, const CIMName& assocClass = CIMName());
 270                      
 271                          // display the classname and hasprovider info
 272                          void display();
 273                      
 274                      #endif
 275                      
 276                          // Count of providers found. This may differ from size if classes were
 277                          // found that do not have providers.
 278                          Uint32 providerCount;
 279                      
 280                      private:
 281                          Array<ProviderInfo> _array;
 282                          Uint32 _index;
 283                      };
 284 karl           1.101 
 285                      // inline methods for ProviderInfoList
 286                      inline Uint32 ProviderInfoList::size()
 287                      {
 288                          return _array.size();
 289                      }
 290                      
 291                      inline void ProviderInfoList::appendClass(ProviderInfo& x)
 292                      {
 293                          _array.append(x);
 294                      }
 295                      
 296                      inline void ProviderInfoList::appendProvider(ProviderInfo& x)
 297                      {
 298                          _array.append(x);
 299                          providerCount++;
 300                      }
 301                      
 302                      inline ProviderInfo& ProviderInfoList::getNext()
 303                      {
 304                          return _array[_index++];
 305 karl           1.101 }
 306                      inline Uint32 ProviderInfoList::getIndex()
 307                      {
 308                          return _index - 1;
 309                      }
 310                      
 311                      #ifdef PROVIDER_INFO_DISPLAY
 312                      inline void ProviderInfoList::trace(const CIMNamespaceName& nameSpace,
 313                          const CIMName& className, Boolean assoc, const CIMName& assocClass)
 314                      {
 315                          String display;
 316                          for (Uint32 i = 0; i < size() ; i++)
 317 karl           1.99      {
 318 karl           1.101         display.append(_array[i].className.getString());
 319                              display.append(_array[i].hasProvider? "+ ":"- ");
 320 karl           1.99      }
 321 karl           1.101     PEG_TRACE((TRC_DISPATCHER,Tracer::LEVEL1,
 322                              "providerList namespace %s className %s %s%s"
 323                                  "  count %u provider count %u %s",
 324                              (const char *)nameSpace.getString().getCString(),
 325                              (const char *)className.getString().getCString(),
 326                              (assoc? "assoc:" : ""),
 327                              (assoc? (const char *)assocClass.getString().getCString() : ""),
 328                              size(), providerCount,
 329                              (const char *)display.getCString()));
 330                      }
 331                      inline void ProviderInfoList::display()
 332 karl           1.99      {
 333 karl           1.101         for (Uint32 i = 0 ; i < _array.size() ; i++)
 334                              {
 335                                  ProviderInfo& pi = _array[i];
 336                                  cout << i << " " <<  pi.className.getString() << " "
 337 karl           1.106                  << boolToString(pi.hasProvider) << endl;
 338 karl           1.101         }
 339 karl           1.99      }
 340 karl           1.101 #endif
 341 karl           1.99  /******************************************************************************
 342                      **
 343                      **  OperationAggregate Class
 344                      **
 345                      ******************************************************************************/
 346 brian.campbell 1.67  /* Class to manage the aggregation of data required by post processors. This
 347                          class is private to the dispatcher. An instance is created by the operation
 348                          dispatcher to aggregate request and response information and used by the
 349 karl           1.101     post processor to aggregate responses together. It is not released until
 350                          the request is complete.
 351                          Includes all data from the request used by the dispatcher aggregator
 352                          functions.
 353 brian.campbell 1.67  */
 354                      class PEGASUS_SERVER_LINKAGE OperationAggregate
 355                      {
 356 dave.sudlik    1.78      friend class CIMOperationRequestDispatcher;
 357 brian.campbell 1.67  public:
 358 karl           1.103     /** Operation Aggregate constructor.  Builds an aggregation
 359 brian.campbell 1.67          object.
 360 karl           1.101         @param request - CIMOprationRequestMessage containing copy
 361                                             of the original request
 362                              @param className Cimname Classname for the request
 363                              @param nameSpace CIMNamespace Namespace defined for the
 364                                               request
 365                              @param totalIssued Uint32 Sets number of responses expected
 366                              @param requiresHostnameCompletion Boolean flag for
 367                                                                aggregator to execute host
 368                                                                name completion
 369                              @param hasPropList - tells aggregator to move propertylist
 370                                                 back to responses.  Required because
 371                                                 issue getting responses back from OOP
 372                                                 with propertylist entact. (Optional
 373                                                 Default = false)
 374                              @param query QueryExpressionRep* The query Statement. Used
 375                              only by CQL & WQL OperationRequestDispatchers (Optional)
 376                              @param String queryLanguage (Optional)
 377 karl           1.102     */
 378 karl           1.100     OperationAggregate(CIMOperationRequestMessage* request,
 379 kumpf          1.82          CIMName className,
 380 karl           1.101         CIMNamespaceName nameSpace,
 381                              Uint32 totalIssued,
 382                              Boolean requiresHostnameCompletion,
 383                              Boolean hasPropList = false,
 384 kumpf          1.82          QueryExpressionRep* query = 0,
 385                              String queryLanguage = String::EMPTY);
 386 brian.campbell 1.67  
 387                          virtual ~OperationAggregate();
 388 chip           1.69  
 389 brian.campbell 1.67      // Tests validity by checking the magic number we put into the
 390                          // packet.
 391                      
 392                          Boolean valid() const;
 393                      
 394 karl           1.101     // Increment the total Operation Requests issued parameter by 1
 395                          void incTotalIssued();
 396 brian.campbell 1.67  
 397 karl           1.103     Uint32 getTotalIssued() const;
 398 brian.campbell 1.67  
 399 karl           1.105     //// KS_TODO set inline
 400                          void setFilterParameters(QueryExpressionRep* query, const String& ql)
 401                          {
 402                              _filterResponse = true;
 403                              _queryLanguage = ql;
 404                              _query = query;
 405                          }
 406                      
 407 karl           1.103     // Append a new entry to the response list.
 408 brian.campbell 1.67  
 409 karl           1.103     void appendResponse(CIMResponseMessage* response);
 410 chip           1.69  
 411 brian.campbell 1.67      Uint32 numberResponses() const;
 412                      
 413 karl           1.103     CIMOperationRequestMessage* getRequest() const;
 414 brian.campbell 1.67  
 415                          CIMResponseMessage* getResponse(const Uint32& pos);
 416                      
 417                          // allow dispatcher to remove the response so it doesn't become
 418                          // destroyed when the poA is destroyed.
 419                      
 420                          CIMResponseMessage* removeResponse(const Uint32& pos);
 421                      
 422                          void deleteResponse(const Uint32&pos);
 423                      
 424 kumpf          1.83      MessageType getRequestType() const;
 425 brian.campbell 1.67  
 426 kumpf          1.82      void resequenceResponse(CIMResponseMessage& response);
 427 brian.campbell 1.67  
 428 karl           1.103     /** sets the parameters required for pull operations into a new
 429                           *  operation aggregate that was created as part of an Open...
 430                           *  Operation.
 431                           *
 432                           * @param enContext EnumerationContext defined for this sequence
 433                           * @param contextString String representing the operation
 434                           *      Context defined for this sequence
 435                           */
 436                          void setPullOperation(EnumerationContext* enContext);
 437                      
 438                          bool isPullOperation() const;
 439                      
 440 brian.campbell 1.67      String _messageId;
 441 karl           1.105     Boolean _filterResponse;
 442 kumpf          1.83      MessageType _msgRequestType;
 443 brian.campbell 1.67      Uint32 _dest;
 444 karl           1.101     CIMName _className;
 445 brian.campbell 1.67      CIMNamespaceName _nameSpace;
 446 karl           1.101 
 447                          // Set upon creation of OA object and used by handleAggregation
 448                          Boolean _requiresHostnameCompletion;
 449                          Boolean _hasPropList;
 450                      
 451 brian.campbell 1.67      Array<String> propertyList;
 452                          QueryExpressionRep* _query;
 453                          String _queryLanguage;
 454 karl           1.103     Boolean _pullOperation;
 455                          Boolean _enumerationFinished;
 456                          Boolean _closeReceived;
 457 karl           1.106     // Identification of enumerationContext defined for the pull operation
 458                          // for which this is the operation aggregating object
 459 karl           1.103     EnumerationContext* _enumerationContext;
 460 karl           1.106     String _contextId;
 461 brian.campbell 1.67  
 462                      private:
 463 karl           1.103     /** Hidden (unimplemented) copy and assignment constructors */
 464 kumpf          1.77      OperationAggregate(const OperationAggregate& x);
 465 karl           1.103     OperationAggregate& operator=(const OperationAggregate&);
 466 brian.campbell 1.67  
 467                          Array<CIMResponseMessage*> _responseList;
 468                          Mutex _appendResponseMutex;
 469 dave.sudlik    1.78      Mutex _enqueueResponseMutex;
 470 karl           1.103     Mutex _enqueuePullResponseMutex;
 471 karl           1.100     CIMOperationRequestMessage* _request;
 472 brian.campbell 1.67      Uint32 _totalIssued;
 473 kumpf          1.82      Uint32 _totalReceived;
 474                          Uint32 _totalReceivedComplete;
 475                          Uint32 _totalReceivedExpected;
 476                          Uint32 _totalReceivedErrors;
 477 a.dunfey       1.75      Uint32 _totalReceivedNotSupported;
 478 karl           1.101 
 479                          Magic<0xC531B144> _magic;
 480 brian.campbell 1.67  };
 481                      
 482 karl           1.103 inline Uint32 OperationAggregate::getTotalIssued() const
 483 karl           1.101 {
 484                          return _totalIssued;
 485                      }
 486                      
 487                      inline void OperationAggregate::incTotalIssued()
 488                      {
 489                          _totalIssued++;
 490                      }
 491                      
 492 karl           1.103 inline CIMOperationRequestMessage* OperationAggregate::getRequest() const
 493 karl           1.101 {
 494                          return _request;
 495                      }
 496                      
 497                      inline MessageType OperationAggregate::getRequestType() const
 498                      {
 499                          return _msgRequestType;
 500                      }
 501                      
 502 karl           1.103 inline bool OperationAggregate::isPullOperation() const
 503                      {
 504                          return _pullOperation;
 505                      }
 506                      
 507                      /******************************************************************************
 508                      **
 509                      **  CIMOperationRequestDispatcher Class
 510                      **
 511                      ******************************************************************************/
 512                      
 513 kumpf          1.82  class PEGASUS_SERVER_LINKAGE CIMOperationRequestDispatcher :
 514                          public MessageQueueService
 515 brian.campbell 1.67  {
 516 karl           1.103     friend struct ProviderRequests;
 517 kumpf          1.82  public:
 518 brian.campbell 1.67  
 519 kumpf          1.82      typedef MessageQueueService Base;
 520 brian.campbell 1.67  
 521 kumpf          1.82      CIMOperationRequestDispatcher(
 522                              CIMRepository* repository,
 523                              ProviderRegistrationManager* providerRegistrationManager);
 524 brian.campbell 1.67  
 525 kumpf          1.82      virtual ~CIMOperationRequestDispatcher();
 526 brian.campbell 1.67  
 527 kumpf          1.82      virtual void handleEnqueue(Message*);
 528 brian.campbell 1.67  
 529 kumpf          1.82      virtual void handleEnqueue();
 530 brian.campbell 1.67  
 531 kumpf          1.82      void handleGetClassRequest(
 532                              CIMGetClassRequestMessage* request);
 533 brian.campbell 1.67  
 534 kumpf          1.82      void handleGetInstanceRequest(
 535                              CIMGetInstanceRequestMessage* request);
 536 brian.campbell 1.67  
 537 kumpf          1.82      void handleDeleteClassRequest(
 538                              CIMDeleteClassRequestMessage* request);
 539 brian.campbell 1.67  
 540 kumpf          1.82      void handleDeleteInstanceRequest(
 541                              CIMDeleteInstanceRequestMessage* request);
 542 brian.campbell 1.67  
 543 kumpf          1.82      void handleCreateClassRequest(
 544                              CIMCreateClassRequestMessage* request);
 545 brian.campbell 1.67  
 546 kumpf          1.82      void handleCreateInstanceRequest(
 547                              CIMCreateInstanceRequestMessage* request);
 548 brian.campbell 1.67  
 549 kumpf          1.82      void handleModifyClassRequest(
 550                              CIMModifyClassRequestMessage* request);
 551 brian.campbell 1.67  
 552 kumpf          1.82      void handleModifyInstanceRequest(
 553                              CIMModifyInstanceRequestMessage* request);
 554 brian.campbell 1.67  
 555 kumpf          1.82      void handleEnumerateClassesRequest(
 556                              CIMEnumerateClassesRequestMessage* request);
 557 brian.campbell 1.67  
 558 kumpf          1.82      void handleEnumerateClassNamesRequest(
 559                              CIMEnumerateClassNamesRequestMessage* request);
 560 brian.campbell 1.67  
 561 kumpf          1.82      void handleEnumerateInstancesRequest(
 562                              CIMEnumerateInstancesRequestMessage* request);
 563 brian.campbell 1.67  
 564 kumpf          1.82      void handleEnumerateInstanceNamesRequest(
 565                              CIMEnumerateInstanceNamesRequestMessage* request);
 566 brian.campbell 1.67  
 567 kumpf          1.82      void handleAssociatorsRequest(
 568                              CIMAssociatorsRequestMessage* request);
 569 brian.campbell 1.67  
 570 kumpf          1.82      void handleAssociatorNamesRequest(
 571                              CIMAssociatorNamesRequestMessage* request);
 572 brian.campbell 1.67  
 573 kumpf          1.82      void handleReferencesRequest(
 574                              CIMReferencesRequestMessage* request);
 575 brian.campbell 1.67  
 576 kumpf          1.82      void handleReferenceNamesRequest(
 577                              CIMReferenceNamesRequestMessage* request);
 578 brian.campbell 1.67  
 579 kumpf          1.82      void handleGetPropertyRequest(
 580                              CIMGetPropertyRequestMessage* request);
 581 brian.campbell 1.67  
 582 kumpf          1.82      void handleSetPropertyRequest(
 583                              CIMSetPropertyRequestMessage* request);
 584 brian.campbell 1.67  
 585 kumpf          1.82      void handleGetQualifierRequest(
 586                              CIMGetQualifierRequestMessage* request);
 587 brian.campbell 1.67  
 588 kumpf          1.82      void handleSetQualifierRequest(
 589                              CIMSetQualifierRequestMessage* request);
 590 brian.campbell 1.67  
 591 kumpf          1.82      void handleDeleteQualifierRequest(
 592                              CIMDeleteQualifierRequestMessage* request);
 593 brian.campbell 1.67  
 594 kumpf          1.82      void handleEnumerateQualifiersRequest(
 595                              CIMEnumerateQualifiersRequestMessage* request);
 596 brian.campbell 1.67  
 597 kumpf          1.82      void handleExecQueryRequest(
 598                              CIMExecQueryRequestMessage* request);
 599 brian.campbell 1.67  
 600 kumpf          1.82      void handleInvokeMethodRequest(
 601                              CIMInvokeMethodRequestMessage* request);
 602 brian.campbell 1.67  
 603 karl           1.103  // EXP_PULL_BEGIN
 604                          bool handleOpenEnumerateInstancesRequest(
 605                              CIMOpenEnumerateInstancesRequestMessage* request);
 606                      
 607                          bool handleOpenEnumerateInstancePathsRequest(
 608                              CIMOpenEnumerateInstancePathsRequestMessage* request);
 609                      
 610                          bool handleOpenReferenceInstancesRequest(
 611                              CIMOpenReferenceInstancesRequestMessage* request);
 612                      
 613                          bool handleOpenReferenceInstancePathsRequest(
 614                              CIMOpenReferenceInstancePathsRequestMessage* request);
 615                      
 616                          bool handleOpenAssociatorInstancesRequest(
 617                              CIMOpenAssociatorInstancesRequestMessage* request);
 618                      
 619                          bool handleOpenAssociatorInstancePathsRequest(
 620                              CIMOpenAssociatorInstancePathsRequestMessage* request);
 621                      
 622                          bool handleOpenQueryInstancesRequest(
 623                              CIMOpenQueryInstancesRequestMessage* request);
 624 karl           1.103 
 625                          bool handlePullInstancesWithPath(
 626                              CIMPullInstancesWithPathRequestMessage* request);
 627                      
 628                          bool handlePullInstancePaths(
 629                              CIMPullInstancePathsRequestMessage* request);
 630                      
 631                          bool handlePullInstances(
 632                              CIMPullInstancesRequestMessage* request);
 633                      
 634                          void handleCloseEnumeration(
 635                              CIMCloseEnumerationRequestMessage* request);
 636                      
 637                          void handleEnumerationCount(
 638                              CIMEnumerationCountRequestMessage* request);
 639                      
 640 karl           1.105 // EXP_PULL_END
 641 karl           1.103 
 642                          /** Common Request handling for ExecQuery and OpenQueryRequests.
 643                             This function gets the provider list, get instances from the
 644                             repository and calls the required providers.
 645                      
 646                             @param request CIMExecQueryRequestMessage. The request being issued
 647                      
 648                             @param cimException CIMException - Contains an exception if
 649                             the processing fails and the return from the function is false.
 650                      
 651                             @param enumerationContext* EnumertionContext if this is a
 652                             pull operation or NULL if not.
 653                      
 654                             @param queryLanguage const char* defining query language (ex.
 655                                                  "WQL")
 656                      
 657                             @return bool true if processing completed successfully or
 658                             false if there is an error.  cimException contains CIMException
 659                             if return is false.
 660                          */
 661                          bool handleQueryRequestCommon(
 662 karl           1.103         CIMExecQueryRequestMessage* request,
 663                              CIMException& cimException,
 664                              EnumerationContext* enumerationContext,
 665                              const char* queryLanguage,
 666                              const CIMName& className,
 667                              QueryExpressionRep* qx);
 668                      
 669                      
 670                          /** Callback from Providers, etc. This callback is used for
 671                              Operations that aggregate response information. This is the
 672                              callback pointer used by the _forwardForAggregation
 673                              function.
 674                              @param AsyncOpNode *
 675                              @param MessageQueue*
 676                              @param userParam Pointer to data that is transparently
 677                              carrried through the call to callback process. It contains
 678                              a pointer to the OperationAggregate.
 679                           */
 680 karl           1.106     static void _forwardedForAggregationCallback(
 681 kumpf          1.82          AsyncOpNode*,
 682                              MessageQueue*,
 683                              void*);
 684 brian.campbell 1.67  
 685 karl           1.103     /** Callback from providers etc. for operations that do not
 686                              aggregate response. This callback pointer used by
 687                              _forwardToProvider functions.
 688                              @param AsyncOpNode *
 689                              @param MessageQueue*
 690                              @param userParam Contains the request message
 691                           */
 692 karl           1.106     static void _forwardedRequestCallback(
 693 kumpf          1.82          AsyncOpNode*,
 694                              MessageQueue*,
 695                              void*);
 696 brian.campbell 1.67  
 697 kumpf          1.82      // Response Handler functions
 698 brian.campbell 1.67  
 699 marek          1.95      void handleOperationResponseAggregation(
 700 karl           1.101         OperationAggregate* poA);
 701 brian.campbell 1.67  
 702 kumpf          1.82      void handleExecQueryResponseAggregation(OperationAggregate* poA);
 703 brian.campbell 1.67  
 704 karl           1.103     // Issue RequestToProvider Functions
 705                          void issueRequestsToProviders(CIMEnumerateInstancesRequestMessage* request,
 706                              Uint32 numberOfClasses,
 707                              ProviderInfoList& providerInfos,
 708                              OperationAggregate* poA);
 709                      
 710 karl           1.106 //EXP_PULL_BEGIN
 711 karl           1.104 
 712 karl           1.106     /* Issue saved pull/open response immediatly even if there
 713                             is nothing to send. Allows the server to respond to pull operations
 714                             if the providers are very slow
 715 karl           1.104     */
 716 karl           1.106     static void issueSavedResponse(EnumerationContext* en);
 717 karl           1.104 
 718 karl           1.106 //EXP_PULL_END
 719 kumpf          1.82  protected:
 720                      
 721                          /** _getSubClassNames - Gets the names of all subclasses of the defined
 722                              class (including the class) and returns it in an array of strings. Uses
 723                              a similar function in the repository class to get the names.
 724                              @param namespace
 725                              @param className
 726                              @return Array of strings with class names.  Note that there should be
 727                              at least one classname in the array (the input name)
 728                              Note that there is a special exception to this function, the __namespace
 729                              class which does not have any representation in the class repository.
 730                              @exception CIMException(CIM_ERR_INVALID_CLASS)
 731                          */
 732 brian.campbell 1.67      Array<CIMName> _getSubClassNames(
 733                              const CIMNamespaceName& nameSpace,
 734 david.dillard  1.73          const CIMName& className);
 735 brian.campbell 1.67  
 736 karl           1.97      ProviderIdContainer* _updateProviderContainer(
 737 brian.campbell 1.67          const CIMNamespaceName& nameSpace,
 738 karl           1.97          const CIMInstance& pInstance,
 739                              const CIMInstance& pmInstance);
 740 brian.campbell 1.67  
 741 david.dillard  1.73      // @exception CIMException
 742 karl           1.99      ProviderInfoList _lookupAllInstanceProviders(
 743 brian.campbell 1.67          const CIMNamespaceName& nameSpace,
 744 karl           1.99          const CIMName& className);
 745 brian.campbell 1.67  
 746 karl           1.99      ProviderInfoList _lookupAllAssociationProviders(
 747 brian.campbell 1.67          const CIMNamespaceName& nameSpace,
 748                              const CIMObjectPath& objectName,
 749                              const CIMName& assocClass,
 750 karl           1.99          const String& role);
 751 brian.campbell 1.67  
 752 karl           1.97      ProviderInfo _lookupInstanceProvider(
 753 brian.campbell 1.67          const CIMNamespaceName& nameSpace,
 754 karl           1.97          const CIMName& className);
 755 brian.campbell 1.67  
 756 kumpf          1.82      String _lookupMethodProvider(
 757                              const CIMNamespaceName& nameSpace,
 758                              const CIMName& className,
 759                              const CIMName& methodName,
 760                              ProviderIdContainer** providerIdContainer);
 761 brian.campbell 1.67  
 762 karl           1.101     /*Forward the response defined for aggregation processing
 763                            and queue for output.  Note this function is called
 764                            when a response that should be processed through the
 765 karl           1.103       aggregator already exists. It just queues the response because
 766                            one exists.
 767 karl           1.101     */
 768                          void _forwardResponseForAggregation(
 769                              CIMOperationRequestMessage* request,
 770                              OperationAggregate* poA,
 771                              CIMResponseMessage* response);
 772                      
 773                          /*
 774                              Forward a request for aggregation.  This is the path used
 775 karl           1.103         to forward aggregating operation requests to providers,
 776 karl           1.101         control providers, and services
 777                          */
 778 karl           1.103     void _forwardAggregatingRequestToProvider(
 779 karl           1.101         const ProviderInfo& providerInfo,
 780                              CIMOperationRequestMessage* request,
 781                              OperationAggregate* poA);
 782                      
 783                          /*  Commmon aggregating function used by both _forwardResponseForAggregation
 784 karl           1.103         and _forwardRequestForAggregation above. This is an inline function
 785                              //// FUTURE we should be able to eliminate this one completely
 786                              //// in favor of the one above. Also change the name.
 787 karl           1.101     */
 788 kumpf          1.82      void _forwardRequestForAggregation(
 789 venkat.puvvada 1.87          Uint32 serviceId,
 790 brian.campbell 1.67          const String& controlProviderName,
 791 karl           1.100         CIMOperationRequestMessage* request,
 792 brian.campbell 1.67          OperationAggregate* poA,
 793 kumpf          1.82          CIMResponseMessage* response = 0);
 794 brian.campbell 1.67  
 795 karl           1.103     void _forwardRequestToSingleProvider(
 796 karl           1.97          const ProviderInfo& providerInfo,
 797 karl           1.100         CIMOperationRequestMessage* request,
 798                              CIMOperationRequestMessage* requestCopy);
 799 brian.campbell 1.67  
 800 kumpf          1.82      void _getProviderName(
 801 kumpf          1.81            const OperationContext& context,
 802                                String& moduleName,
 803                                String& providerName);
 804                      
 805 kumpf          1.82      void _logOperation(
 806 karl           1.100         const CIMOperationRequestMessage* request,
 807 kumpf          1.82          const CIMResponseMessage* response);
 808                      
 809 karl           1.99      void _enqueueExceptionResponse(
 810 karl           1.100         CIMOperationRequestMessage* request,
 811 karl           1.99          CIMException& exception);
 812                      
 813                          void _enqueueExceptionResponse(
 814 karl           1.100         CIMOperationRequestMessage* request,
 815 karl           1.99          TraceableCIMException& exception);
 816                      
 817                          void _enqueueExceptionResponse(
 818 karl           1.100         CIMOperationRequestMessage* request,
 819 karl           1.99          CIMStatusCode code,
 820                              const String& ExtraInfo);
 821                      
 822 karl           1.101     /** Send the defined response synchronously using the data in
 823                              the OperationAggragate to define destination.  This function
 824                              is used to deliver parts of aggregated responses where each
 825                              response may not be a complete message (i.e chunks). This
 826                              function is controlled by a mutex so that only one chunk may
 827                              be delivered at a time.
 828                              @param poA OperationAggregate* that defines the current
 829                                         state of the aggregated response
 830                              @param response CIMResponseMessage defining the current
 831                                              response segment
 832                      
 833                              @return Boolean Returns true if the response is complete
 834                                      with this segment.
 835                           */
 836 kumpf          1.82      Boolean _enqueueResponse(
 837                              OperationAggregate*& poA,
 838                              CIMResponseMessage*& response);
 839 kumpf          1.81  
 840 karl           1.101     /** Enqueue a simple response aschronously.  Destination is
 841                              determied by the request.
 842                              @param request CIMOperationReqeustMessage that defines
 843                                             destination
 844                              @param response CIMResponseMessage that contains response
 845                                              data
 846                           */
 847 kumpf          1.82      void _enqueueResponse(
 848 karl           1.100         CIMOperationRequestMessage* request,
 849 kumpf          1.82          CIMResponseMessage* response);
 850 brian.campbell 1.67  
 851 kumpf          1.82      CIMValue _convertValueType(const CIMValue& value, CIMType type);
 852 brian.campbell 1.67  
 853 kumpf          1.82      void _fixInvokeMethodParameterTypes(CIMInvokeMethodRequestMessage* request);
 854 brian.campbell 1.67  
 855 kumpf          1.82      void _fixSetPropertyValueType(CIMSetPropertyRequestMessage* request);
 856 brian.campbell 1.67  
 857 karl           1.99      // Request Error Response Functions - The following functions test for
 858                          // particular operations parameters, etc. and if the tests fail
 859                          // generate error response messages.  They all follow the same common
 860                          // pattern of returning true if the test fails so that the main
 861                          // function must test the result and return.  This allows putting
 862                          // the trace method return into the CIMOperationRequestDispatcher main.
 863 karl           1.103     //
 864                      // EXP_PULL_BEGIN
 865                      
 866                          bool _rejectIfPullParametersFailTests(
 867                              CIMOpenOperationRequestMessage* request,
 868 karl           1.105         Uint32& operationMaxObjectCount,
 869                              Boolean allowQueryFilter);
 870 karl           1.103 
 871                          bool _rejectIfContinueOnError(CIMOperationRequestMessage* request,
 872                              Boolean continueOnError);
 873                      
 874                          bool _rejectInvalidFilterParameters(CIMOperationRequestMessage* request,
 875                              const String& filterQueryLanguageParam,
 876 karl           1.105         const String& filterQueryParam,
 877                              Boolean allowQueryFilter);
 878 karl           1.103 
 879                          bool _rejectInvalidMaxObjectCountParam(
 880                              CIMOperationRequestMessage* request,
 881                              const Uint32 maxObjectCountParam,
 882                              bool requiredParameter,
 883                              Uint32& value,
 884                              const Uint32 defaultValue);
 885                      
 886                          bool _rejectInvalidOperationTimeout(CIMOperationRequestMessage* request,
 887                              const Uint32Arg& operationTimeout);
 888                      
 889                          bool _rejectInvalidEnumerationContext(
 890                              CIMOperationRequestMessage* request,
 891                              EnumerationContext* enumerationContext);
 892                      
 893                          bool _rejectIfContextTimedOut(CIMOperationRequestMessage* request,
 894                              Boolean isTimedOut);
 895                      
 896                          bool _rejectInvalidPullRequest(CIMOperationRequestMessage* request,
 897                              Boolean valid);
 898                      
 899 karl           1.103     bool _rejectIfEnumerationContextProcessing(
 900                              CIMOperationRequestMessage* request,
 901                              Boolean processing);
 902 karl           1.105 
 903                      #ifdef PEGASUS_ENABLE_FQL
 904                          //// Temporarily disabled because of issue where we are losing
 905                          //// data.
 906                      ////  FQLQueryExpressionRep* handleFQLQueryRequest(
 907                      ////      CIMOpenOperationRequestMessage* msg);
 908                      #endif
 909 karl           1.103 // EXP_PULL_END
 910 karl           1.99  
 911 karl           1.100     Boolean _rejectAssociationTraversalDisabled(
 912                              CIMOperationRequestMessage* request,
 913 karl           1.99          const String& opName);
 914                      
 915 karl           1.100     Boolean _rejectInvalidRoleParameter(CIMOperationRequestMessage* request,
 916 karl           1.99          const String& roleParameter,
 917                              const String& parameterName);
 918                      
 919                          Boolean _rejectInvalidObjectPathParameter(
 920 karl           1.100         CIMOperationRequestMessage* request,
 921 karl           1.99          const CIMObjectPath& path);
 922                      
 923 karl           1.102     /**Tests for existence of the class defined in the request and
 924                             if successful return true with the class in the targetClass
 925                             argument. Note that exceptions are caught in this method.
 926                      
 927                              @param request CIMOperationRequestMessage containing
 928                                             Request. Note that this depends on class name
 929                                             and namespace being in this message
 930                              @param targetClass CIMClass class to be returned if request
 931                                                 successful
 932                      
 933                              @return Boolean true if class in request->className found
 934                                      for request->nameSpace. False if not found.
 935                           */
 936                      
 937                          Boolean _rejectInvalidClassParameter(CIMOperationRequestMessage* request,
 938                              CIMConstClass& targetClass);
 939                      
 940 karl           1.103     void _rejectCreateContextFailed(CIMOperationRequestMessage* request);
 941                      
 942 karl           1.102     /**Equivalent to _rejectInvalidClassParameter above except that
 943                             it included objecName parameter
 944                      
 945                              @param request
 946                              @param nameSpace
 947                              @param objectName
 948                      
 949                              @return Boolean
 950                           */
 951 karl           1.100     Boolean _rejectInvalidClassParameter(CIMOperationRequestMessage* request,
 952 karl           1.99          const CIMNamespaceName& nameSpace,
 953                              const CIMObjectPath& objectName);
 954                      
 955 karl           1.103     /* generate and return the required exception if this test fails
 956                      
 957                          */
 958                          Boolean _CIMExceptionIfNoProvidersOrRepository(
 959                              CIMOperationRequestMessage* request,
 960                              const ProviderInfoList& providerInfos,
 961                              CIMException& cimException);
 962 karl           1.99      /**
 963                              Reject if no providers or repository for this class
 964                          */
 965 karl           1.100     Boolean _rejectNoProvidersOrRepository(CIMOperationRequestMessage* request,
 966 karl           1.102         const ProviderInfoList&);
 967 karl           1.99  
 968                          /**
 969 karl           1.103         Reject if the number of providers required to complete an
 970 karl           1.99          operation is greater than the maximum allowed.
 971                              @param nameSpace The target namespace of the operation.
 972                              @param className The name of the class specified in the request.
 973 karl           1.101         @param providerInfoList Contains count of the number of
 974                                  providers required to complete the operation.
 975 karl           1.99          @exception CIMException if the providerCount is greater than the
 976                                  maximum allowed.
 977                          */
 978                          void _rejectEnumerateTooBroad(
 979                              const CIMNamespaceName& nameSpace,
 980                              const CIMName& className,
 981                              Uint32 providerCount);
 982                      
 983 kumpf          1.84      /**
 984                              Checks whether the specified class is defined in the specified
 985                              namespace.
 986                              @param nameSpace The namespace to check for className.
 987                              @param className The name of the class to check for in nameSpace.
 988                              @return True if the specified class is defined in the specified
 989                                  namespace, false otherwise.
 990                          */
 991                          Boolean _checkExistenceOfClass(
 992                              const CIMNamespaceName& nameSpace,
 993                              const CIMName& className);
 994                      
 995 mike           1.90      CIMConstClass _getClass(
 996 kumpf          1.82          const CIMNamespaceName& nameSpace,
 997                              const CIMName& className,
 998                              CIMException& cimException);
 999 brian.campbell 1.67  
1000 karl           1.102 /*
1001                          Check to determine if we have any providers or repository for this
1002                          class.
1003                          NOTE: There may be issues with this test in general since it is use
1004                          for enumerates, etc. and the goal there is to never exception for
1005                          things like this, simply return no objects.  On the other hand
1006                          This is a real boundary condition for the server where the
1007                          repository is not to be used and there are NO providers registered.
1008 karl           1.103     KS_TODO - Check if this is really valid
1009 karl           1.102 */
1010                          Boolean _checkNoProvidersOrRepository(CIMOperationRequestMessage* request,
1011                              Uint32 providerCount, const CIMName& className);
1012                      
1013 karl           1.101     Boolean _forwardEnumerationToProvider(
1014                              ProviderInfo &providerInfo,
1015 karl           1.99          OperationAggregate* poA,
1016 karl           1.101         CIMOperationRequestMessage* request);
1017 chip           1.69  
1018 karl           1.102     void enumerateInstancesFromRepository(
1019                              CIMEnumerateInstancesResponseMessage *response,
1020                              OperationAggregate* poA,
1021                              CIMOperationRequestMessage* request);
1022                      
1023 kumpf          1.82      CIMRepository* _repository;
1024 brian.campbell 1.67  
1025 kumpf          1.82      ProviderRegistrationManager* _providerRegistrationManager;
1026 karl           1.102 
1027 karl           1.99      //
1028                          // Enable particular Operations or services
1029                          //
1030 kumpf          1.82      Boolean _enableAssociationTraversal;
1031                          Boolean _enableIndicationService;
1032 karl           1.99  
1033 karl           1.104     // KS_TODO the following should be private.
1034 karl           1.99      // Define the maximum number of classes that system will enumerate
1035                          // Allows the system to limit the size of enumeration responses,
1036                          // at least in terms of number of classes that can be included in
1037                          // an enumeration. Does not limit number of objects in enumeration
1038                          // response.
1039 kumpf          1.82      Uint32 _maximumEnumerateBreadth;
1040 karl           1.99  
1041 karl           1.103     // Define the maximum number of objects that the system will accept
1042                          // for pull operation input parameter.
1043 karl           1.104 
1044                          Uint32 _systemPullOperationMaxObjectCount;
1045                      
1046 karl           1.103 
1047                          // Define whether the system will accept the value zero as a valid
1048                          // pull interoperation timeout. Since the value of zero disables the
1049                          // timer this would mean that the system operates with no timeout
1050                          // between pull operations. This should be somewhere externally as
1051                          // a configuration parameter
1052                          Boolean _rejectZeroOperationTimeoutValue;
1053                      
1054                          // Value for maximum timeout for pull operations.  If this value is
1055                          // exceeded, the operation request will be rejected.
1056 karl           1.104     // Set from configuration manager
1057 karl           1.103     Uint32 _pullOperationMaxTimeout;
1058                      
1059 venkat.puvvada 1.87      Uint32 _providerManagerServiceId;
1060 karl           1.103 
1061 kumpf          1.82  #ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION
1062                          Array<String> _excludeModulesFromNormalization;
1063                      #endif
1064 brian.campbell 1.67  
1065 karl           1.97      // meta dispatcher integration
1066 kumpf          1.82      virtual void _handle_async_request(AsyncRequest* req);
1067 brian.campbell 1.67  
1068 karl           1.104     // Process NotifyConfigChangeRequests
1069                          CIMNotifyConfigChangeResponseMessage* handlePropertyUpdateRequest(
1070                              CIMNotifyConfigChangeRequestMessage *message);
1071                      
1072 karl           1.101     Boolean _enumerateFromRepository(
1073                              CIMOperationRequestMessage* request,
1074                              OperationAggregate* poA,
1075                              ProviderInfoList& providerInfos);
1076                      
1077 karl           1.103     void _issueImmediateOpenOrPullResponseMessage(
1078                              CIMOperationRequestMessage* request,
1079                              CIMOpenOrPullResponseDataMessage* response,
1080                              EnumerationContext* en,
1081                              Uint32 operationMaxObjectCount);
1082                      
1083                          bool issueOpenOrPullResponseMessage(
1084                              CIMOperationRequestMessage* openRequest,
1085                              CIMOpenOrPullResponseDataMessage* openResponse,
1086                              EnumerationContext* en,
1087                              Uint32 operationMaxObjectCount,
1088                              Boolean requireCompleteResponses);
1089                      
1090 karl           1.97  private:
1091                          static void _handle_enqueue_callback(AsyncOpNode*, MessageQueue*, void*);
1092 brian.campbell 1.67  
1093 karl           1.97      Boolean _lookupAssociationProvider(
1094                              const CIMNamespaceName& nameSpace,
1095                              const CIMName& assocClass,
1096                              ProviderInfo& providerInfo );
1097 brian.campbell 1.67  
1098 karl           1.97      Array<String> _lookupRegisteredAssociationProvider(
1099                              const CIMNamespaceName& nameSpace,
1100                              const CIMName& assocClass,
1101                              ProviderIdContainer** container);
1102 brian.campbell 1.67  
1103 karl           1.97      Boolean _lookupInternalProvider(
1104                              const CIMNamespaceName& nameSpace,
1105                              const CIMName& className,
1106                              ProviderInfo& providerInfo);
1107 brian.campbell 1.67  
1108 karl           1.101     Boolean _getAssocFromRepository(
1109                              CIMOperationRequestMessage* request,
1110                              OperationAggregate* poA,
1111                              ProviderInfoList& providerInfos,
1112                              CIMResponseMessage* response);
1113                      
1114 karl           1.103 /**
1115                         Complete processing for the pull operations, pullInstancesWithPath
1116                         and Pull InstancePaths.  This function replaces all the code in the
1117                         pull functions including the input checking code because the pull operations
1118                         are exactly the same except for the response object type.
1119                         @param this -  Pointer to the CIMOperationRequestDispatcher object.
1120                                Required to execute dispatcher methods
1121                         @param request CIMPullOperationRequestMessage* Defines the pull
1122                                      request message pointer
1123                         @param pullResponse - AutoPtr<CIMOpenOrPullResponseDataMessage>& defines the
1124                                      response message for this pull response
1125                         @param requestName - String with the request name. Used internally for
1126                                      traces, etc.
1127                      */
1128                          bool processPullRequest(
1129                              CIMPullOperationRequestMessage* request,
1130                              CIMOpenOrPullResponseDataMessage*  pullResponse,
1131                              const char * requestName);
1132                      // EXP_PULL_BEGIN
1133                      
1134                          // pointer to EnumerationContextTable which allocates
1135 karl           1.103     // and releases enumeration context objects.
1136                          EnumerationContextTable *_enumerationContextTable;
1137 karl           1.105 // EXP_PULL_END
1138 karl           1.103 
1139 karl           1.97      // Pointer to internal RoutingTable for Control Providers and Services
1140 venkat.puvvada 1.87      DynamicRoutingTable *_routing_table;
1141 karl           1.103 
1142                          // internal bool that defines whether handleEnqueue will delete
1143                          // the original request.  Used because in some cases the handler
1144                          // retains the request beyond the life of the handleEnqueue call.
1145                          bool _deleteRequestRequired;
1146 brian.campbell 1.67  };
1147                      
1148 karl           1.102 // Forward response to Common Request Aggregator.  This is simply
1149 karl           1.103 // a syntatic simplification that sends the response directly to the
1150                      // aggregation component because a response exists.
1151 karl           1.101 inline void CIMOperationRequestDispatcher::_forwardResponseForAggregation(
1152                          CIMOperationRequestMessage* request,
1153                          OperationAggregate* poA,
1154                          CIMResponseMessage* response)
1155                      {
1156                          _forwardRequestForAggregation(
1157                              getQueueId(),
1158                              String(),
1159                              request,
1160                              poA,
1161                              response);
1162                      }
1163                      
1164 karl           1.102 /*
1165                          For request for aggregation with poA as parameter.
1166                      */
1167 karl           1.103 inline void CIMOperationRequestDispatcher::_forwardAggregatingRequestToProvider(
1168 karl           1.101     const ProviderInfo& providerInfo,
1169                          CIMOperationRequestMessage* request,
1170                          OperationAggregate* poA)
1171                      {
1172                          _forwardRequestForAggregation(
1173                              providerInfo.serviceId,
1174                              providerInfo.controlProviderName,
1175                              request,
1176                              poA);
1177                      }
1178                      
1179 brian.campbell 1.67  PEGASUS_NAMESPACE_END
1180                      
1181                      #endif /* PegasusDispatcher_Dispatcher_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2