(file) Return to ProviderMessageHandler.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / Default

   1 kumpf 1.1 //%2006////////////////////////////////////////////////////////////////////////
   2           //
   3           // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4           // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5           // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6           // IBM Corp.; EMC Corporation, The Open Group.
   7           // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8           // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9           // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10           // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11           // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12           // EMC Corporation; Symantec Corporation; The Open Group.
  13           //
  14           // Permission is hereby granted, free of charge, to any person obtaining a copy
  15           // of this software and associated documentation files (the "Software"), to
  16           // deal in the Software without restriction, including without limitation the
  17           // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18           // sell copies of the Software, and to permit persons to whom the Software is
  19           // furnished to do so, subject to the following conditions:
  20           // 
  21           // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22 kumpf 1.1 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23           // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24           // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25           // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26           // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27           // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28           // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29           //
  30           //==============================================================================
  31           //
  32           //%/////////////////////////////////////////////////////////////////////////////
  33           
  34           #include "ProviderMessageHandler.h"
  35           
  36 kumpf 1.9 #include <exception>
  37           
  38 kumpf 1.1 #include <Pegasus/Common/OperationContextInternal.h>
  39           #include <Pegasus/Common/Tracer.h>
  40           #include <Pegasus/Common/StatisticalData.h>
  41           #include <Pegasus/Common/Logger.h>
  42           #include <Pegasus/Common/MessageLoader.h>
  43           #include <Pegasus/Common/Constants.h>
  44           
  45           #include <Pegasus/Provider/CIMInstanceQueryProvider.h>
  46           #include <Pegasus/Provider/CIMAssociationProvider.h>
  47           #include <Pegasus/Provider/CIMMethodProvider.h>
  48           #include <Pegasus/Provider/CIMIndicationProvider.h>
  49           #include <Pegasus/Provider/CIMIndicationConsumerProvider.h>
  50           
  51           #include <Pegasus/Query/QueryExpression/QueryExpression.h>
  52           #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
  53           
  54           #include <Pegasus/ProviderManager2/SimpleResponseHandler.h>
  55           #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
  56           #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
  57           
  58 dmitry.mikulin 1.11 #define HANDLE_PROVIDER_CALL(traceString, providerCall, handler)       \
  59                         do                                                                 \
  60 kumpf          1.9      {                                                                  \
  61                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,                \
  62 dmitry.mikulin 1.11             "Calling provider." #traceString ": %s",                   \
  63                                 (const char*)_fullyQualifiedProviderName.getCString()));   \
  64                             try                                                            \
  65                             {                                                              \
  66                                 providerCall;                                              \
  67                             }                                                              \
  68                             catch (CIMException& e)                                        \
  69                             {                                                              \
  70                                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,            \
  71                                     "Provider CIMException: %s",                           \
  72                                     (const char*)e.getMessage().getCString()));            \
  73                                 handler.setCIMException(e);                                \
  74                             }                                                              \
  75                             catch (Exception& e)                                           \
  76                             {                                                              \
  77                                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,            \
  78                                     "Provider Exception: %s",                              \
  79                                     (const char*)e.getMessage().getCString()));            \
  80                                 handler.setStatus(                                         \
  81                                     CIM_ERR_FAILED,                                        \
  82                                     e.getContentLanguages(),                               \
  83 dmitry.mikulin 1.11                 e.getMessage());                                       \
  84                             }                                                              \
  85                             catch (const PEGASUS_STD(exception)& e)                        \
  86                             {                                                              \
  87                                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,            \
  88                                     "Provider exception: %s", e.what()));                  \
  89                                 handler.setStatus(CIM_ERR_FAILED, e.what());               \
  90                             }                                                              \
  91                             catch (...)                                                    \
  92                             {                                                              \
  93                                 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,     \
  94                                     "Provider unknown exception");                         \
  95                                 handler.setStatus(CIM_ERR_FAILED, "Unknown error.");       \
  96                             }                                                              \
  97                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,                \
  98                                 "Returned from provider." #traceString ": %s",             \
  99                                 (const char*)_fullyQualifiedProviderName.getCString()));   \
 100                         } while (0)
 101 kumpf          1.1  
 102                     PEGASUS_NAMESPACE_BEGIN
 103                     
 104                     template<class T>
 105                     inline T* getProviderInterface(CIMProvider* provider)
 106                     {
 107 kumpf          1.5      T* p = dynamic_cast<T*>(provider);
 108 kumpf          1.1  
 109                         if (p == 0)
 110                         {
 111                             throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, MessageLoaderParms(
 112                                 "ProviderManager.ProviderFacade.INVALID_PROVIDER_INTERFACE",
 113                                 "Invalid provider interface."));
 114                         }
 115                     
 116                         return p;
 117                     }
 118                     
 119                     //
 120                     // Default Provider Manager
 121                     //
 122                     ProviderMessageHandler::ProviderMessageHandler(
 123 dmitry.mikulin 1.11     const String& moduleName,
 124 kumpf          1.1      const String& name,
 125                         CIMProvider* provider,
 126                         PEGASUS_INDICATION_CALLBACK_T indicationCallback,
 127                         PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,
 128                         Boolean subscriptionInitComplete)
 129                         : _name(name),
 130 dmitry.mikulin 1.11       _fullyQualifiedProviderName(moduleName + ":" + name),
 131 kumpf          1.1        _provider(provider),
 132                           _indicationCallback(indicationCallback),
 133                           _responseChunkCallback(responseChunkCallback),
 134                           _subscriptionInitComplete(subscriptionInitComplete),
 135                           _indicationResponseHandler(0)
 136                     {
 137                     }
 138                     
 139                     ProviderMessageHandler::~ProviderMessageHandler()
 140                     {
 141                     }
 142                     
 143                     String ProviderMessageHandler::getName() const
 144                     {
 145                         return _name;
 146                     }
 147                     
 148 kumpf          1.6  CIMProvider* ProviderMessageHandler::getProvider()
 149                     {
 150                         return _provider;
 151                     }
 152                     
 153 kumpf          1.1  void ProviderMessageHandler::setProvider(CIMProvider* provider)
 154                     {
 155                         _provider = provider;
 156                     }
 157                     
 158                     void ProviderMessageHandler::initialize(CIMOMHandle& cimom)
 159                     {
 160 dmitry.mikulin 1.11     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 161                             "Calling provider.initialize: %s",
 162                             (const char*)_fullyQualifiedProviderName.getCString()));
 163                     
 164                         try
 165                         {
 166                             _provider->initialize(cimom);
 167                         }
 168                         catch (...)
 169                         {
 170                             PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL2,
 171                                 "Caught exception from provider %s initialize() method.",
 172                                 (const char*)_fullyQualifiedProviderName.getCString()));
 173                             throw;
 174                         }
 175                     
 176                         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 177                             "Returned from provider.initialize: %s",
 178                             (const char*)_fullyQualifiedProviderName.getCString()));
 179 kumpf          1.1  }
 180                     
 181                     void ProviderMessageHandler::terminate()
 182                     {
 183                         _disableIndications();
 184 kumpf          1.2  
 185 dmitry.mikulin 1.11     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 186                             "Calling provider.terminate: %s",
 187                             (const char*)_fullyQualifiedProviderName.getCString()));
 188                     
 189 kumpf          1.2      try
 190                         {
 191                             _provider->terminate();
 192                         }
 193                         catch (...)
 194                         {
 195 dmitry.mikulin 1.11         PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL2,
 196                                 "Caught exception from provider %s terminate() method.",
 197                                 (const char*)_fullyQualifiedProviderName.getCString()));
 198                             throw;
 199 kumpf          1.2      }
 200 dmitry.mikulin 1.11 
 201                         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 202                             "Returned from provider.terminate: %s",
 203                             (const char*)_fullyQualifiedProviderName.getCString()));
 204 kumpf          1.1  }
 205                     
 206                     void ProviderMessageHandler::subscriptionInitComplete()
 207                     {
 208                         if (status.testSubscriptions())
 209                         {
 210                             _enableIndications();
 211                         }
 212                     
 213                         _subscriptionInitComplete = true;
 214                     }
 215                     
 216                     CIMResponseMessage* ProviderMessageHandler::processMessage(
 217                         CIMRequestMessage* request)
 218                     {
 219                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 220                             "ProviderMessageHandler::processMessage()");
 221                     
 222                         CIMResponseMessage* response = 0;
 223                     
 224 kumpf          1.3      try
 225                         {
 226                             // pass the request message to a handler method based on message type
 227                             switch(request->getType())
 228                             {
 229                             case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 230                                 response = _handleGetInstanceRequest(request);
 231                                 break;
 232                     
 233                             case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 234                                 response = _handleEnumerateInstancesRequest(request);
 235                                 break;
 236                     
 237                             case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 238                                 response = _handleEnumerateInstanceNamesRequest(request);
 239                                 break;
 240                     
 241                             case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 242                                 response = _handleCreateInstanceRequest(request);
 243                                 break;
 244                     
 245 kumpf          1.3          case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 246                                 response = _handleModifyInstanceRequest(request);
 247                                 break;
 248                     
 249                             case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 250                                 response = _handleDeleteInstanceRequest(request);
 251                                 break;
 252                     
 253                             case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 254                                 response = _handleExecQueryRequest(request);
 255                                 break;
 256                     
 257                             case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 258                                 response = _handleAssociatorsRequest(request);
 259                                 break;
 260                     
 261                             case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 262                                 response = _handleAssociatorNamesRequest(request);
 263                                 break;
 264                     
 265                             case CIM_REFERENCES_REQUEST_MESSAGE:
 266 kumpf          1.3              response = _handleReferencesRequest(request);
 267                                 break;
 268                     
 269                             case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 270                                 response = _handleReferenceNamesRequest(request);
 271                                 break;
 272                     
 273                             case CIM_GET_PROPERTY_REQUEST_MESSAGE:
 274                                 response = _handleGetPropertyRequest(request);
 275                                 break;
 276                     
 277                             case CIM_SET_PROPERTY_REQUEST_MESSAGE:
 278                                 response = _handleSetPropertyRequest(request);
 279                                 break;
 280                     
 281                             case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 282                                 response = _handleInvokeMethodRequest(request);
 283                                 break;
 284                     
 285                             case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 286                                 response = _handleCreateSubscriptionRequest(request);
 287 kumpf          1.3              break;
 288                     
 289                             case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 290                                 response = _handleModifySubscriptionRequest(request);
 291                                 break;
 292                     
 293                             case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 294                                 response = _handleDeleteSubscriptionRequest(request);
 295                                 break;
 296                     
 297                             case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 298                                 response = _handleExportIndicationRequest(request);
 299                                 break;
 300                     
 301                             default:
 302                                 PEGASUS_ASSERT(0);
 303                                 break;
 304                             }
 305                         }
 306                         catch (CIMException& e)
 307                         {
 308 kumpf          1.3          PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 309                                 "CIMException: " + e.getMessage());
 310                             response = request->buildResponse();
 311                             response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
 312                                 e.getContentLanguages(), e.getCode(), e.getMessage());
 313                         }
 314                         catch (Exception& e)
 315 kumpf          1.1      {
 316 kumpf          1.3          PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 317                                 "Exception: " + e.getMessage());
 318                             response = request->buildResponse();
 319                             response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
 320                                 e.getContentLanguages(), CIM_ERR_FAILED, e.getMessage());
 321                         }
 322                         catch (...)
 323                         {
 324 marek          1.8          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 325 kumpf          1.3              "Exception: Unknown");
 326                             response = request->buildResponse();
 327                             response->cimException = PEGASUS_CIM_EXCEPTION(
 328                                 CIM_ERR_FAILED, "Unknown error.");
 329 kumpf          1.1      }
 330                     
 331                         PEG_METHOD_EXIT();
 332                     
 333                         return response;
 334                     }
 335                     
 336 kumpf          1.3  OperationContext ProviderMessageHandler::_createProviderOperationContext(
 337                         const OperationContext& context)
 338                     {
 339                         OperationContext providerContext;
 340                     
 341                         providerContext.insert(context.get(IdentityContainer::NAME));
 342                         providerContext.insert(context.get(AcceptLanguageListContainer::NAME));
 343                         providerContext.insert(context.get(ContentLanguageListContainer::NAME));
 344                     
 345                         return providerContext;
 346                     }
 347                     
 348 kumpf          1.1  CIMResponseMessage* ProviderMessageHandler::_handleGetInstanceRequest(
 349                         CIMRequestMessage* message)
 350                     {
 351                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 352                             "ProviderMessageHandler::_handleGetInstanceRequest");
 353                     
 354                         CIMGetInstanceRequestMessage* request =
 355                             dynamic_cast<CIMGetInstanceRequestMessage*>(message);
 356                         PEGASUS_ASSERT(request != 0);
 357                     
 358 kumpf          1.3      AutoPtr<CIMGetInstanceResponseMessage> response(
 359 kumpf          1.1          dynamic_cast<CIMGetInstanceResponseMessage*>(
 360 kumpf          1.3              request->buildResponse()));
 361                         PEGASUS_ASSERT(response.get() != 0);
 362 kumpf          1.1  
 363                         // create a handler for this request
 364                         GetInstanceResponseHandler handler(
 365 kumpf          1.3          request, response.get(), _responseChunkCallback);
 366 kumpf          1.1  
 367 kumpf          1.3      // make target object path
 368                         CIMObjectPath objectPath(
 369                             System::getHostName(),
 370                             request->nameSpace,
 371                             request->instanceName.getClassName(),
 372                             request->instanceName.getKeyBindings());
 373 kumpf          1.1  
 374 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 375                             "ProviderMessageHandler::_handleGetInstanceRequest - "
 376                                 "Object path: $0",
 377                             objectPath.toString()));
 378 kumpf          1.1  
 379 kumpf          1.3      OperationContext providerContext(
 380                             _createProviderOperationContext(request->operationContext));
 381 kumpf          1.1  
 382 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 383 kumpf          1.1  
 384 kumpf          1.3      CIMInstanceProvider* provider =
 385                             getProviderInterface<CIMInstanceProvider>(_provider);
 386 kumpf          1.1  
 387 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 388 kumpf          1.1  
 389 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 390                             getInstance,
 391 kumpf          1.1          provider->getInstance(
 392 kumpf          1.3              providerContext,
 393 kumpf          1.1              objectPath,
 394                                 request->includeQualifiers,
 395                                 request->includeClassOrigin,
 396                                 request->propertyList,
 397 kumpf          1.3              handler),
 398 dmitry.mikulin 1.11         handler);
 399 kumpf          1.1  
 400                         PEG_METHOD_EXIT();
 401 kumpf          1.3      return response.release();
 402 kumpf          1.1  }
 403                     
 404                     CIMResponseMessage* ProviderMessageHandler::_handleEnumerateInstancesRequest(
 405                         CIMRequestMessage* message)
 406                     {
 407                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 408                             "ProviderMessageHandler::_handleEnumerateInstanceRequest");
 409                     
 410                         CIMEnumerateInstancesRequestMessage* request =
 411                             dynamic_cast<CIMEnumerateInstancesRequestMessage*>(message);
 412                         PEGASUS_ASSERT(request != 0);
 413                     
 414 kumpf          1.3      AutoPtr<CIMEnumerateInstancesResponseMessage> response(
 415 kumpf          1.1          dynamic_cast<CIMEnumerateInstancesResponseMessage*>(
 416 kumpf          1.3              request->buildResponse()));
 417                         PEGASUS_ASSERT(response.get() != 0);
 418 kumpf          1.1  
 419                         // create a handler for this request
 420                         EnumerateInstancesResponseHandler handler(
 421 kumpf          1.3          request, response.get(), _responseChunkCallback);
 422 kumpf          1.1  
 423 kumpf          1.3      // make target object path
 424                         CIMObjectPath objectPath(
 425                             System::getHostName(),
 426                             request->nameSpace,
 427                             request->className);
 428 kumpf          1.1  
 429 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 430                             "ProviderMessageHandler::_handleEnumerateInstancesRequest - "
 431                                 "Object path: $0",
 432                             objectPath.toString()));
 433 kumpf          1.1  
 434 kumpf          1.3      OperationContext providerContext(
 435                             _createProviderOperationContext(request->operationContext));
 436 kumpf          1.1  
 437 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 438 kumpf          1.1  
 439 kumpf          1.3      CIMInstanceProvider* provider =
 440                             getProviderInterface<CIMInstanceProvider>(_provider);
 441 kumpf          1.1  
 442 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 443 kumpf          1.1  
 444 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 445                             enumerateInstances,
 446 kumpf          1.1          provider->enumerateInstances(
 447 kumpf          1.3              providerContext,
 448 kumpf          1.1              objectPath,
 449                                 request->includeQualifiers,
 450                                 request->includeClassOrigin,
 451                                 request->propertyList,
 452 kumpf          1.3              handler),
 453 dmitry.mikulin 1.11         handler);
 454 kumpf          1.1  
 455                         PEG_METHOD_EXIT();
 456 kumpf          1.3      return response.release();
 457 kumpf          1.1  }
 458                     
 459 kumpf          1.5  CIMResponseMessage*
 460                         ProviderMessageHandler::_handleEnumerateInstanceNamesRequest(
 461                             CIMRequestMessage* message)
 462 kumpf          1.1  {
 463                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 464                             "ProviderMessageHandler::_handleEnumerateInstanceNamesRequest");
 465                     
 466                         CIMEnumerateInstanceNamesRequestMessage* request =
 467                             dynamic_cast<CIMEnumerateInstanceNamesRequestMessage*>(message);
 468                         PEGASUS_ASSERT(request != 0);
 469                     
 470 kumpf          1.3      AutoPtr<CIMEnumerateInstanceNamesResponseMessage> response(
 471 kumpf          1.1          dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>(
 472 kumpf          1.3              request->buildResponse()));
 473                         PEGASUS_ASSERT(response.get() != 0);
 474 kumpf          1.1  
 475                         // create a handler for this request
 476                         EnumerateInstanceNamesResponseHandler handler(
 477 kumpf          1.3          request, response.get(), _responseChunkCallback);
 478 kumpf          1.1  
 479 kumpf          1.3      // make target object path
 480                         CIMObjectPath objectPath(
 481                             System::getHostName(),
 482                             request->nameSpace,
 483                             request->className);
 484 kumpf          1.1  
 485 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 486                             "ProviderMessageHandler::_handleEnumerateInstanceNamesRequest - "
 487                                 "Object path: $0",
 488                             objectPath.toString()));
 489 kumpf          1.1  
 490 kumpf          1.3      OperationContext providerContext(
 491                             _createProviderOperationContext(request->operationContext));
 492 kumpf          1.1  
 493 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 494 kumpf          1.1  
 495 kumpf          1.3      CIMInstanceProvider* provider =
 496                             getProviderInterface<CIMInstanceProvider>(_provider);
 497 kumpf          1.1  
 498 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 499 kumpf          1.1  
 500 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 501                             enumerateInstanceNames,
 502 kumpf          1.1          provider->enumerateInstanceNames(
 503 kumpf          1.3              providerContext,
 504 kumpf          1.1              objectPath,
 505 kumpf          1.3              handler),
 506 dmitry.mikulin 1.11         handler);
 507 kumpf          1.1  
 508                         PEG_METHOD_EXIT();
 509 kumpf          1.3      return response.release();
 510 kumpf          1.1  }
 511                     
 512                     CIMResponseMessage* ProviderMessageHandler::_handleCreateInstanceRequest(
 513                         CIMRequestMessage* message)
 514                     {
 515                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 516                             "ProviderMessageHandler::_handleCreateInstanceRequest");
 517                     
 518                         CIMCreateInstanceRequestMessage* request =
 519                             dynamic_cast<CIMCreateInstanceRequestMessage*>(message);
 520                         PEGASUS_ASSERT(request != 0);
 521                     
 522 kumpf          1.3      AutoPtr<CIMCreateInstanceResponseMessage> response(
 523 kumpf          1.1          dynamic_cast<CIMCreateInstanceResponseMessage*>(
 524 kumpf          1.3              request->buildResponse()));
 525                         PEGASUS_ASSERT(response.get() != 0);
 526 kumpf          1.1  
 527                         // create a handler for this request
 528                         CreateInstanceResponseHandler handler(
 529 kumpf          1.3          request, response.get(), _responseChunkCallback);
 530 kumpf          1.1  
 531 kumpf          1.3      // make target object path
 532                         CIMObjectPath objectPath(
 533                             System::getHostName(),
 534                             request->nameSpace,
 535                             request->newInstance.getPath().getClassName(),
 536                             request->newInstance.getPath().getKeyBindings());
 537 kumpf          1.1  
 538 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 539                             "ProviderMessageHandler::_handleCreateInstanceRequest - "
 540                                 "Object path: $0",
 541                             objectPath.toString()));
 542 kumpf          1.1  
 543 kumpf          1.3      OperationContext providerContext(
 544                             _createProviderOperationContext(request->operationContext));
 545 kumpf          1.1  
 546 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 547 kumpf          1.1  
 548 kumpf          1.3      CIMInstanceProvider* provider =
 549                             getProviderInterface<CIMInstanceProvider>(_provider);
 550 kumpf          1.1  
 551 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 552 kumpf          1.1  
 553 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 554                             createInstance,
 555 kumpf          1.1          provider->createInstance(
 556 kumpf          1.3              providerContext,
 557 kumpf          1.1              objectPath,
 558                                 request->newInstance,
 559 kumpf          1.3              handler),
 560 dmitry.mikulin 1.11         handler);
 561 kumpf          1.1  
 562                         PEG_METHOD_EXIT();
 563 kumpf          1.3      return response.release();
 564 kumpf          1.1  }
 565                     
 566                     CIMResponseMessage* ProviderMessageHandler::_handleModifyInstanceRequest(
 567                         CIMRequestMessage* message)
 568                     {
 569                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 570                             "ProviderMessageHandler::_handleModifyInstanceRequest");
 571                     
 572                         CIMModifyInstanceRequestMessage* request =
 573                             dynamic_cast<CIMModifyInstanceRequestMessage*>(message);
 574                         PEGASUS_ASSERT(request != 0);
 575                     
 576 kumpf          1.3      AutoPtr<CIMModifyInstanceResponseMessage> response(
 577 kumpf          1.1          dynamic_cast<CIMModifyInstanceResponseMessage*>(
 578 kumpf          1.3              request->buildResponse()));
 579                         PEGASUS_ASSERT(response.get() != 0);
 580 kumpf          1.1  
 581                         // create a handler for this request
 582                         ModifyInstanceResponseHandler handler(
 583 kumpf          1.3          request, response.get(), _responseChunkCallback);
 584 kumpf          1.1  
 585 kumpf          1.3      // make target object path
 586                         CIMObjectPath objectPath(
 587                             System::getHostName(),
 588                             request->nameSpace,
 589                             request->modifiedInstance.getPath().getClassName(),
 590                             request->modifiedInstance.getPath().getKeyBindings());
 591 kumpf          1.1  
 592 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 593                             "ProviderMessageHandler::_handleModifyInstanceRequest - "
 594                                 "Object path: $0",
 595                             objectPath.toString()));
 596 kumpf          1.1  
 597 kumpf          1.3      OperationContext providerContext(
 598                             _createProviderOperationContext(request->operationContext));
 599 kumpf          1.1  
 600 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 601 kumpf          1.1  
 602 kumpf          1.3      CIMInstanceProvider* provider =
 603                             getProviderInterface<CIMInstanceProvider>(_provider);
 604 kumpf          1.1  
 605 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 606 kumpf          1.1  
 607 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 608                             modifyInstance,
 609 kumpf          1.1          provider->modifyInstance(
 610 kumpf          1.3              providerContext,
 611 kumpf          1.1              objectPath,
 612                                 request->modifiedInstance,
 613                                 request->includeQualifiers,
 614                                 request->propertyList,
 615 kumpf          1.3              handler),
 616 dmitry.mikulin 1.11         handler);
 617 kumpf          1.1  
 618                         PEG_METHOD_EXIT();
 619 kumpf          1.3      return response.release();
 620 kumpf          1.1  }
 621                     
 622                     CIMResponseMessage* ProviderMessageHandler::_handleDeleteInstanceRequest(
 623                         CIMRequestMessage* message)
 624                     {
 625                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 626                             "ProviderMessageHandler::_handleDeleteInstanceRequest");
 627                     
 628                         CIMDeleteInstanceRequestMessage* request =
 629                             dynamic_cast<CIMDeleteInstanceRequestMessage*>(message);
 630                         PEGASUS_ASSERT(request != 0);
 631                     
 632 kumpf          1.3      AutoPtr<CIMDeleteInstanceResponseMessage> response(
 633 kumpf          1.1          dynamic_cast<CIMDeleteInstanceResponseMessage*>(
 634 kumpf          1.3              request->buildResponse()));
 635                         PEGASUS_ASSERT(response.get() != 0);
 636 kumpf          1.1  
 637                         // create a handler for this request
 638                         DeleteInstanceResponseHandler handler(
 639 kumpf          1.3          request, response.get(), _responseChunkCallback);
 640 kumpf          1.1  
 641 kumpf          1.3      // make target object path
 642                         CIMObjectPath objectPath(
 643                             System::getHostName(),
 644                             request->nameSpace,
 645                             request->instanceName.getClassName(),
 646                             request->instanceName.getKeyBindings());
 647 kumpf          1.1  
 648 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 649                             "ProviderMessageHandler::_handleDeleteInstanceRequest - "
 650                                 "Object path: $0",
 651                             objectPath.toString()));
 652 kumpf          1.1  
 653 kumpf          1.3      OperationContext providerContext(
 654                             _createProviderOperationContext(request->operationContext));
 655 kumpf          1.1  
 656 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 657 kumpf          1.1  
 658 kumpf          1.3      CIMInstanceProvider* provider =
 659                             getProviderInterface<CIMInstanceProvider>(_provider);
 660 kumpf          1.1  
 661 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 662 kumpf          1.1  
 663 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 664                             deleteInstance,
 665 kumpf          1.1          provider->deleteInstance(
 666 kumpf          1.3              providerContext,
 667 kumpf          1.1              objectPath,
 668 kumpf          1.3              handler),
 669 dmitry.mikulin 1.11         handler);
 670 kumpf          1.1  
 671                         PEG_METHOD_EXIT();
 672 kumpf          1.3      return response.release();
 673 kumpf          1.1  }
 674                     
 675                     CIMResponseMessage* ProviderMessageHandler::_handleExecQueryRequest(
 676                         CIMRequestMessage* message)
 677                     {
 678                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 679                             "ProviderMessageHandler::_handleExecQueryRequest");
 680                     
 681                         CIMExecQueryRequestMessage* request =
 682                             dynamic_cast<CIMExecQueryRequestMessage*>(message);
 683                         PEGASUS_ASSERT(request != 0);
 684                     
 685 kumpf          1.3      AutoPtr<CIMExecQueryResponseMessage> response(
 686 kumpf          1.1          dynamic_cast<CIMExecQueryResponseMessage*>(
 687 kumpf          1.3              request->buildResponse()));
 688                         PEGASUS_ASSERT(response.get() != 0);
 689 kumpf          1.1  
 690                         // create a handler for this request
 691                         ExecQueryResponseHandler handler(
 692 kumpf          1.3          request, response.get(), _responseChunkCallback);
 693 kumpf          1.1  
 694 kumpf          1.3      // make target object path
 695                         CIMObjectPath objectPath(
 696                             System::getHostName(),
 697                             request->nameSpace,
 698                             request->className);
 699 kumpf          1.1  
 700 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 701                             "ProviderMessageHandler::_handleExecQueryRequest - "
 702                                 "Object path: $0",
 703                             objectPath.toString()));
 704 kumpf          1.1  
 705 kumpf          1.3      QueryExpression qx(request->queryLanguage,request->query);
 706 kumpf          1.1  
 707 kumpf          1.3      OperationContext providerContext(
 708                             _createProviderOperationContext(request->operationContext));
 709 kumpf          1.1  
 710 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 711 kumpf          1.1  
 712 kumpf          1.3      CIMInstanceQueryProvider* provider =
 713                             getProviderInterface<CIMInstanceQueryProvider>(_provider);
 714 kumpf          1.1  
 715 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 716 kumpf          1.1  
 717 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 718                             execQuery,
 719 kumpf          1.1          provider->execQuery(
 720 kumpf          1.3              providerContext,
 721 kumpf          1.1              objectPath,
 722                                 qx,
 723 kumpf          1.3              handler),
 724 dmitry.mikulin 1.11         handler);
 725 kumpf          1.1  
 726                         PEG_METHOD_EXIT();
 727 kumpf          1.3      return response.release();
 728 kumpf          1.1  }
 729                     
 730                     CIMResponseMessage* ProviderMessageHandler::_handleAssociatorsRequest(
 731                         CIMRequestMessage* message)
 732                     {
 733                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 734                             "ProviderMessageHandler::_handleAssociatorsRequest");
 735                     
 736                         CIMAssociatorsRequestMessage* request =
 737                             dynamic_cast<CIMAssociatorsRequestMessage*>(message);
 738                         PEGASUS_ASSERT(request != 0);
 739                     
 740 kumpf          1.3      AutoPtr<CIMAssociatorsResponseMessage> response(
 741 kumpf          1.1          dynamic_cast<CIMAssociatorsResponseMessage*>(
 742 kumpf          1.3              request->buildResponse()));
 743                         PEGASUS_ASSERT(response.get() != 0);
 744 kumpf          1.1  
 745                         // create a handler for this request
 746                         AssociatorsResponseHandler handler(
 747 kumpf          1.3          request, response.get(), _responseChunkCallback);
 748 kumpf          1.1  
 749 kumpf          1.3      // make target object path
 750                         CIMObjectPath objectPath(
 751                             System::getHostName(),
 752                             request->nameSpace,
 753                             request->objectName.getClassName());
 754 kumpf          1.1  
 755 kumpf          1.3      objectPath.setKeyBindings(request->objectName.getKeyBindings());
 756 kumpf          1.1  
 757 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 758                             "ProviderMessageHandler::_handleAssociatorsRequest - "
 759                                 "Object path: $0",
 760                             objectPath.toString()));
 761 kumpf          1.1  
 762 kumpf          1.3      CIMObjectPath assocPath(
 763                             System::getHostName(),
 764                             request->nameSpace,
 765                             request->assocClass.getString());
 766 kumpf          1.1  
 767 kumpf          1.3      OperationContext providerContext(
 768                             _createProviderOperationContext(request->operationContext));
 769 kumpf          1.1  
 770 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 771 kumpf          1.1  
 772 kumpf          1.3      CIMAssociationProvider* provider =
 773                             getProviderInterface<CIMAssociationProvider>(_provider);
 774 kumpf          1.1  
 775 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 776 kumpf          1.1  
 777 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 778                             associators,
 779 kumpf          1.1          provider->associators(
 780 kumpf          1.3              providerContext,
 781 kumpf          1.1              objectPath,
 782                                 request->assocClass,
 783                                 request->resultClass,
 784                                 request->role,
 785                                 request->resultRole,
 786                                 request->includeQualifiers,
 787                                 request->includeClassOrigin,
 788                                 request->propertyList,
 789 kumpf          1.3              handler),
 790 dmitry.mikulin 1.11         handler);
 791 kumpf          1.1  
 792                         PEG_METHOD_EXIT();
 793 kumpf          1.3      return response.release();
 794 kumpf          1.1  }
 795                     
 796                     CIMResponseMessage* ProviderMessageHandler::_handleAssociatorNamesRequest(
 797                         CIMRequestMessage* message)
 798                     {
 799                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 800                             "ProviderMessageHandler::_handleAssociatorNamesRequest");
 801                     
 802                         CIMAssociatorNamesRequestMessage* request =
 803                             dynamic_cast<CIMAssociatorNamesRequestMessage*>(message);
 804                         PEGASUS_ASSERT(request != 0);
 805                     
 806 kumpf          1.3      AutoPtr<CIMAssociatorNamesResponseMessage> response(
 807 kumpf          1.1          dynamic_cast<CIMAssociatorNamesResponseMessage*>(
 808 kumpf          1.3              request->buildResponse()));
 809                         PEGASUS_ASSERT(response.get() != 0);
 810 kumpf          1.1  
 811                         // create a handler for this request
 812                         AssociatorNamesResponseHandler handler(
 813 kumpf          1.3          request, response.get(), _responseChunkCallback);
 814 kumpf          1.1  
 815 kumpf          1.3      // make target object path
 816                         CIMObjectPath objectPath(
 817                             System::getHostName(),
 818                             request->nameSpace,
 819                             request->objectName.getClassName());
 820 kumpf          1.1  
 821 kumpf          1.3      objectPath.setKeyBindings(request->objectName.getKeyBindings());
 822 kumpf          1.1  
 823 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 824                             "ProviderMessageHandler::_handleAssociationNamesRequest - "
 825                                 "Object path: $0",
 826                             objectPath.toString()));
 827 kumpf          1.1  
 828 kumpf          1.3      CIMObjectPath assocPath(
 829                             System::getHostName(),
 830                             request->nameSpace,
 831                             request->assocClass.getString());
 832 kumpf          1.1  
 833 kumpf          1.3      OperationContext providerContext(
 834                             _createProviderOperationContext(request->operationContext));
 835 kumpf          1.1  
 836 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 837 kumpf          1.1  
 838 kumpf          1.3      CIMAssociationProvider* provider =
 839                             getProviderInterface<CIMAssociationProvider>(_provider);
 840 kumpf          1.1  
 841 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 842 kumpf          1.1  
 843 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 844                             associatorNames,
 845 kumpf          1.1          provider->associatorNames(
 846 kumpf          1.3              providerContext,
 847 kumpf          1.1              objectPath,
 848                                 request->assocClass,
 849                                 request->resultClass,
 850                                 request->role,
 851                                 request->resultRole,
 852 kumpf          1.3              handler),
 853 dmitry.mikulin 1.11         handler);
 854 kumpf          1.1  
 855                         PEG_METHOD_EXIT();
 856 kumpf          1.3      return response.release();
 857 kumpf          1.1  }
 858                     
 859                     CIMResponseMessage* ProviderMessageHandler::_handleReferencesRequest(
 860                         CIMRequestMessage* message)
 861                     {
 862                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 863                             "ProviderMessageHandler::_handleReferencesRequest");
 864                     
 865                         CIMReferencesRequestMessage* request =
 866                             dynamic_cast<CIMReferencesRequestMessage*>(message);
 867                         PEGASUS_ASSERT(request != 0);
 868                     
 869 kumpf          1.3      AutoPtr<CIMReferencesResponseMessage> response(
 870 kumpf          1.1          dynamic_cast<CIMReferencesResponseMessage*>(
 871 kumpf          1.3              request->buildResponse()));
 872                         PEGASUS_ASSERT(response.get() != 0);
 873 kumpf          1.1  
 874                         // create a handler for this request
 875                         ReferencesResponseHandler handler(
 876 kumpf          1.3          request, response.get(), _responseChunkCallback);
 877 kumpf          1.1  
 878 kumpf          1.3      // make target object path
 879                         CIMObjectPath objectPath(
 880                             System::getHostName(),
 881                             request->nameSpace,
 882                             request->objectName.getClassName());
 883 kumpf          1.1  
 884 kumpf          1.3      objectPath.setKeyBindings(request->objectName.getKeyBindings());
 885 kumpf          1.1  
 886 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 887                             "ProviderMessageHandler::_handleReferencesRequest - "
 888                                 "Object path: $0",
 889                             objectPath.toString()));
 890 kumpf          1.1  
 891 kumpf          1.3      CIMObjectPath resultPath(
 892                             System::getHostName(),
 893                             request->nameSpace,
 894                             request->resultClass.getString());
 895 kumpf          1.1  
 896 kumpf          1.3      OperationContext providerContext(
 897                             _createProviderOperationContext(request->operationContext));
 898 kumpf          1.1  
 899 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 900 kumpf          1.1  
 901 kumpf          1.3      CIMAssociationProvider* provider =
 902                             getProviderInterface<CIMAssociationProvider>(_provider);
 903 kumpf          1.1  
 904 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 905 kumpf          1.1  
 906 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 907                             references,
 908 kumpf          1.1          provider->references(
 909 kumpf          1.3              providerContext,
 910 kumpf          1.1              objectPath,
 911                                 request->resultClass,
 912                                 request->role,
 913                                 request->includeQualifiers,
 914                                 request->includeClassOrigin,
 915                                 request->propertyList,
 916 kumpf          1.3              handler),
 917 dmitry.mikulin 1.11         handler);
 918 kumpf          1.1  
 919                         PEG_METHOD_EXIT();
 920 kumpf          1.3      return response.release();
 921 kumpf          1.1  }
 922                     
 923                     CIMResponseMessage* ProviderMessageHandler::_handleReferenceNamesRequest(
 924                         CIMRequestMessage* message)
 925                     {
 926                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 927                             "ProviderMessageHandler::_handleReferenceNamesRequest");
 928                     
 929                         CIMReferenceNamesRequestMessage* request =
 930                             dynamic_cast<CIMReferenceNamesRequestMessage*>(message);
 931                         PEGASUS_ASSERT(request != 0);
 932                     
 933 kumpf          1.3      AutoPtr<CIMReferenceNamesResponseMessage> response(
 934 kumpf          1.1          dynamic_cast<CIMReferenceNamesResponseMessage*>(
 935 kumpf          1.3              request->buildResponse()));
 936                         PEGASUS_ASSERT(response.get() != 0);
 937 kumpf          1.1  
 938                         // create a handler for this request
 939                         ReferenceNamesResponseHandler handler(
 940 kumpf          1.3          request, response.get(), _responseChunkCallback);
 941 kumpf          1.1  
 942 kumpf          1.3      // make target object path
 943                         CIMObjectPath objectPath(
 944                             System::getHostName(),
 945                             request->nameSpace,
 946                             request->objectName.getClassName());
 947 kumpf          1.1  
 948 kumpf          1.3      objectPath.setKeyBindings(request->objectName.getKeyBindings());
 949 kumpf          1.1  
 950 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 951                             "ProviderMessageHandler::_handleReferenceNamesRequest - "
 952                                 "Object path: $0",
 953                             objectPath.toString()));
 954 kumpf          1.1  
 955 kumpf          1.3      CIMObjectPath resultPath(
 956                             System::getHostName(),
 957                             request->nameSpace,
 958                             request->resultClass.getString());
 959 kumpf          1.1  
 960 kumpf          1.3      OperationContext providerContext(
 961                             _createProviderOperationContext(request->operationContext));
 962 kumpf          1.1  
 963 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 964 kumpf          1.1  
 965 kumpf          1.3      CIMAssociationProvider* provider =
 966                             getProviderInterface<CIMAssociationProvider>(_provider);
 967 kumpf          1.1  
 968 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
 969 kumpf          1.1  
 970 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
 971                             referenceNames,
 972 kumpf          1.1          provider->referenceNames(
 973 kumpf          1.3              providerContext,
 974 kumpf          1.1              objectPath,
 975                                 request->resultClass,
 976                                 request->role,
 977 kumpf          1.3              handler),
 978 dmitry.mikulin 1.11         handler);
 979 kumpf          1.1  
 980                         PEG_METHOD_EXIT();
 981 kumpf          1.3      return response.release();
 982 kumpf          1.1  }
 983                     
 984                     CIMResponseMessage* ProviderMessageHandler::_handleGetPropertyRequest(
 985                         CIMRequestMessage* message)
 986                     {
 987                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 988                             "ProviderMessageHandler::_handleGetPropertyRequest");
 989                     
 990                         CIMGetPropertyRequestMessage* request =
 991                             dynamic_cast<CIMGetPropertyRequestMessage*>(message);
 992                         PEGASUS_ASSERT(request != 0);
 993                     
 994 kumpf          1.3      AutoPtr<CIMGetPropertyResponseMessage> response(
 995 kumpf          1.1          dynamic_cast<CIMGetPropertyResponseMessage*>(
 996 kumpf          1.3              request->buildResponse()));
 997                         PEGASUS_ASSERT(response.get() != 0);
 998                     
 999                         //
1000                         // Translate the GetProperty request to a GetInstance request message
1001                         //
1002                     
1003                         Array<CIMName> propertyList;
1004                         propertyList.append(request->propertyName);
1005                     
1006                         CIMGetInstanceRequestMessage getInstanceRequest(
1007                             request->messageId,
1008                             request->nameSpace,
1009                             request->instanceName,
1010                             false,  // localOnly
1011                             false,  // includeQualifiers
1012                             false,  // includeClassOrigin
1013                             propertyList,
1014                             request->queueIds);
1015 kumpf          1.1  
1016 kumpf          1.3      getInstanceRequest.operationContext = request->operationContext;
1017                     
1018                         AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
1019                             dynamic_cast<CIMGetInstanceResponseMessage*>(
1020                                 getInstanceRequest.buildResponse()));
1021                         PEGASUS_ASSERT(getInstanceResponse.get() != 0);
1022 kumpf          1.1  
1023 kumpf          1.3      //
1024                         // Process the GetInstance operation
1025                         //
1026 kumpf          1.1  
1027 kumpf          1.3      // create a handler for this request (with chunking disabled)
1028                         GetInstanceResponseHandler handler(
1029                             &getInstanceRequest, getInstanceResponse.get(), 0);
1030 kumpf          1.1  
1031 kumpf          1.3      // make target object path
1032                         CIMObjectPath objectPath(
1033                             System::getHostName(),
1034                             getInstanceRequest.nameSpace,
1035                             getInstanceRequest.instanceName.getClassName(),
1036                             getInstanceRequest.instanceName.getKeyBindings());
1037 kumpf          1.1  
1038 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1039                             "ProviderMessageHandler::_handleGetPropertyRequest - "
1040                                 "Object path: $0, Property: $1",
1041                             objectPath.toString(), request->propertyName.getString()));
1042 kumpf          1.1  
1043 kumpf          1.3      OperationContext providerContext(
1044                             _createProviderOperationContext(getInstanceRequest.operationContext));
1045 kumpf          1.1  
1046 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1047 kumpf          1.1  
1048 kumpf          1.3      CIMInstanceProvider* provider =
1049                             getProviderInterface<CIMInstanceProvider>(_provider);
1050 kumpf          1.1  
1051 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1052 kumpf          1.1  
1053 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1054                             getInstance,
1055 kumpf          1.1          provider->getInstance(
1056 kumpf          1.3              providerContext,
1057 kumpf          1.1              objectPath,
1058 kumpf          1.3              getInstanceRequest.includeQualifiers,
1059                                 getInstanceRequest.includeClassOrigin,
1060                                 getInstanceRequest.propertyList,
1061                                 handler),
1062 dmitry.mikulin 1.11         handler);
1063 kumpf          1.1  
1064 kumpf          1.3      //
1065                         // Copy the GetInstance response into the GetProperty response message
1066                         //
1067                     
1068                         response->cimException = getInstanceResponse->cimException;
1069                     
1070                         if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1071                         {
1072                             CIMInstance instance = getInstanceResponse->cimInstance;
1073 kumpf          1.1  
1074 kumpf          1.3          Uint32 pos = instance.findProperty(request->propertyName);
1075 kumpf          1.1  
1076 kumpf          1.3          if (pos != PEG_NOT_FOUND)
1077                             {
1078                                 response->value = instance.getProperty(pos).getValue();
1079                             }
1080                             else    // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1081                             {
1082                                 response->cimException = PEGASUS_CIM_EXCEPTION(
1083                                     CIM_ERR_NO_SUCH_PROPERTY,
1084                                     request->propertyName.getString());
1085 kumpf          1.1          }
1086 kumpf          1.3      }
1087 kumpf          1.1  
1088 kumpf          1.3      response->operationContext = getInstanceResponse->operationContext;
1089 kumpf          1.1  
1090                         PEG_METHOD_EXIT();
1091 kumpf          1.3      return response.release();
1092 kumpf          1.1  }
1093                     
1094                     CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1095                         CIMRequestMessage* message)
1096                     {
1097                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1098                             "ProviderMessageHandler::_handleSetPropertyRequest");
1099                     
1100                         CIMSetPropertyRequestMessage* request =
1101                             dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1102                         PEGASUS_ASSERT(request != 0);
1103                     
1104 kumpf          1.3      AutoPtr<CIMSetPropertyResponseMessage> response(
1105 kumpf          1.1          dynamic_cast<CIMSetPropertyResponseMessage*>(
1106 kumpf          1.3              request->buildResponse()));
1107                         PEGASUS_ASSERT(response.get() != 0);
1108 kumpf          1.1  
1109 kumpf          1.3      //
1110                         // Translate the SetProperty request to a ModifyInstance request message
1111                         //
1112                     
1113                         // make target object path
1114                         CIMObjectPath objectPath(
1115                             System::getHostName(),
1116                             request->nameSpace,
1117                             request->instanceName.getClassName(),
1118                             request->instanceName.getKeyBindings());
1119                     
1120                         CIMInstance instance(request->instanceName.getClassName());
1121                         instance.addProperty(CIMProperty(
1122                             request->propertyName, request->newValue));
1123                         instance.setPath(objectPath);
1124                     
1125                         Array<CIMName> propertyList;
1126                         propertyList.append(request->propertyName);
1127                     
1128                         CIMModifyInstanceRequestMessage modifyInstanceRequest(
1129                             request->messageId,
1130 kumpf          1.3          request->nameSpace,
1131                             instance,
1132                             false,  // includeQualifiers
1133                             propertyList,
1134                             request->queueIds);
1135 kumpf          1.1  
1136 kumpf          1.3      modifyInstanceRequest.operationContext = request->operationContext;
1137 kumpf          1.1  
1138 kumpf          1.3      AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1139                             dynamic_cast<CIMModifyInstanceResponseMessage*>(
1140                                 modifyInstanceRequest.buildResponse()));
1141                         PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
1142 kumpf          1.1  
1143 kumpf          1.3      //
1144                         // Process the ModifyInstance operation
1145                         //
1146 kumpf          1.1  
1147 kumpf          1.3      // create a handler for this request (with chunking disabled)
1148                         ModifyInstanceResponseHandler handler(
1149                             &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
1150 kumpf          1.1  
1151 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1152                             "ProviderMessageHandler::_handleSetPropertyRequest - "
1153                                 "Object path: $0, Property: $1",
1154                             objectPath.toString(), request->propertyName.getString()));
1155 kumpf          1.1  
1156 kumpf          1.3      OperationContext providerContext(
1157                             _createProviderOperationContext(request->operationContext));
1158 kumpf          1.1  
1159 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1160 kumpf          1.1  
1161 kumpf          1.3      CIMInstanceProvider* provider =
1162                             getProviderInterface<CIMInstanceProvider>(_provider);
1163 kumpf          1.1  
1164 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1165 kumpf          1.1  
1166 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1167                             modifyInstance,
1168 kumpf          1.1          provider->modifyInstance(
1169 kumpf          1.3              providerContext,
1170 kumpf          1.1              objectPath,
1171 kumpf          1.3              modifyInstanceRequest.modifiedInstance,
1172                                 modifyInstanceRequest.includeQualifiers,
1173                                 modifyInstanceRequest.propertyList,
1174                                 handler),
1175 dmitry.mikulin 1.11         handler);
1176 kumpf          1.3  
1177                         //
1178                         // Copy the ModifyInstance response into the GetProperty response message
1179                         //
1180 kumpf          1.1  
1181 kumpf          1.3      response->cimException = modifyInstanceResponse->cimException;
1182                         response->operationContext = modifyInstanceResponse->operationContext;
1183 kumpf          1.1  
1184                         PEG_METHOD_EXIT();
1185 kumpf          1.3      return response.release();
1186 kumpf          1.1  }
1187                     
1188                     CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1189                         CIMRequestMessage* message)
1190                     {
1191                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1192                             "ProviderMessageHandler::_handleInvokeMethodRequest");
1193                     
1194                         CIMInvokeMethodRequestMessage* request =
1195                             dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1196                         PEGASUS_ASSERT(request != 0);
1197                     
1198 kumpf          1.3      AutoPtr<CIMInvokeMethodResponseMessage> response(
1199 kumpf          1.1          dynamic_cast<CIMInvokeMethodResponseMessage*>(
1200 kumpf          1.3              request->buildResponse()));
1201                         PEGASUS_ASSERT(response.get() != 0);
1202 kumpf          1.1  
1203                         // create a handler for this request
1204                         InvokeMethodResponseHandler handler(
1205 kumpf          1.3          request, response.get(), _responseChunkCallback);
1206 kumpf          1.1  
1207 kumpf          1.3      // make target object path
1208                         CIMObjectPath objectPath(
1209                             System::getHostName(),
1210                             request->nameSpace,
1211                             request->instanceName.getClassName(),
1212                             request->instanceName.getKeyBindings());
1213 kumpf          1.1  
1214 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1215                             "ProviderMessageHandler::_handleInvokeMethodRequest - "
1216                                 "Object path: $0, Method: $1",
1217                             objectPath.toString(), request->methodName.getString()));
1218 kumpf          1.1  
1219 kumpf          1.3      OperationContext providerContext(
1220                             _createProviderOperationContext(request->operationContext));
1221 kumpf          1.1  
1222 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1223 kumpf          1.1  
1224 kumpf          1.3      CIMMethodProvider* provider =
1225                             getProviderInterface<CIMMethodProvider>(_provider);
1226 kumpf          1.1  
1227 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1228 kumpf          1.1  
1229 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1230                             invokeMethod,
1231 kumpf          1.1          provider->invokeMethod(
1232 kumpf          1.3              providerContext,
1233 kumpf          1.7              objectPath,
1234 kumpf          1.1              request->methodName,
1235                                 request->inParameters,
1236 kumpf          1.3              handler),
1237 dmitry.mikulin 1.11         handler);
1238 kumpf          1.1  
1239                         PEG_METHOD_EXIT();
1240 kumpf          1.3      return response.release();
1241 kumpf          1.1  }
1242                     
1243                     CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1244                         CIMRequestMessage* message)
1245                     {
1246                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1247                             "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1248                     
1249                         CIMCreateSubscriptionRequestMessage* request =
1250                             dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1251                         PEGASUS_ASSERT(request != 0);
1252                     
1253 kumpf          1.3      AutoPtr<CIMCreateSubscriptionResponseMessage> response(
1254 kumpf          1.1          dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
1255 kumpf          1.3              request->buildResponse()));
1256                         PEGASUS_ASSERT(response.get() != 0);
1257 kumpf          1.1  
1258                         OperationResponseHandler handler(
1259 kumpf          1.3          request, response.get(), _responseChunkCallback);
1260 kumpf          1.1  
1261 kumpf          1.3      String temp;
1262                     
1263                         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1264 kumpf          1.1      {
1265 kumpf          1.3          temp.append(request->classNames[i].getString());
1266 kumpf          1.1  
1267 kumpf          1.3          if (i < (n - 1))
1268 kumpf          1.1          {
1269 kumpf          1.3              temp.append(", ");
1270                             }
1271                         }
1272                     
1273                         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1274                             Logger::TRACE,
1275                             "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1276                                 "Host name: $0  Name space: $1  Class name(s): $2",
1277                             System::getHostName(),
1278                             request->nameSpace.getString(),
1279                             temp));
1280                     
1281                         //
1282                         //  Save the provider instance from the request
1283                         //
1284                         ProviderIdContainer pidc = (ProviderIdContainer)
1285                             request->operationContext.get(ProviderIdContainer::NAME);
1286                         status.setProviderInstance(pidc.getProvider());
1287                     
1288                         // convert arguments
1289 kumpf          1.1  
1290 kumpf          1.3      Array<CIMObjectPath> classNames;
1291 kumpf          1.1  
1292 kumpf          1.3      for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1293                         {
1294                             CIMObjectPath className(
1295 kumpf          1.1              System::getHostName(),
1296 kumpf          1.3              request->nameSpace,
1297                                 request->classNames[i]);
1298 kumpf          1.1  
1299 kumpf          1.3          classNames.append(className);
1300                         }
1301 kumpf          1.1  
1302 kumpf          1.3      OperationContext providerContext(
1303                             _createProviderOperationContext(request->operationContext));
1304                         providerContext.insert(request->operationContext.get(
1305                             SubscriptionInstanceContainer::NAME));
1306                         providerContext.insert(request->operationContext.get(
1307                             SubscriptionFilterConditionContainer::NAME));
1308                         providerContext.insert(request->operationContext.get(
1309                             SubscriptionFilterQueryContainer::NAME));
1310 kumpf          1.1  
1311 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1312 kumpf          1.1  
1313 kumpf          1.3      CIMIndicationProvider* provider =
1314                             getProviderInterface<CIMIndicationProvider>(_provider);
1315 kumpf          1.1  
1316 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1317 kumpf          1.1  
1318 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1319                             createSubscription,
1320 kumpf          1.1          provider->createSubscription(
1321 kumpf          1.3              providerContext,
1322 kumpf          1.1              request->subscriptionInstance.getPath(),
1323                                 classNames,
1324                                 request->propertyList,
1325 kumpf          1.3              request->repeatNotificationPolicy),
1326 dmitry.mikulin 1.11         handler);
1327 kumpf          1.3  
1328                         //
1329                         //  Increment count of current subscriptions for this provider
1330                         //
1331                         if (status.testIfZeroAndIncrementSubscriptions())
1332                         {
1333 marek          1.8          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1334 kumpf          1.3              "First accepted subscription");
1335 kumpf          1.1  
1336                             //
1337 kumpf          1.3          //  If there were no current subscriptions before the increment,
1338                             //  the first subscription has been created
1339                             //  Call the provider's enableIndications method
1340 kumpf          1.1          //
1341 kumpf          1.3          if (_subscriptionInitComplete)
1342 kumpf          1.1          {
1343 kumpf          1.3              _enableIndications();
1344 kumpf          1.1          }
1345                         }
1346                     
1347                         PEG_METHOD_EXIT();
1348 kumpf          1.3      return response.release();
1349 kumpf          1.1  }
1350                     
1351                     CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1352                         CIMRequestMessage* message)
1353                     {
1354                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1355                             "ProviderMessageHandler::_handleModifySubscriptionRequest");
1356                     
1357                         CIMModifySubscriptionRequestMessage* request =
1358                             dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1359                         PEGASUS_ASSERT(request != 0);
1360                     
1361 kumpf          1.3      AutoPtr<CIMModifySubscriptionResponseMessage> response(
1362 kumpf          1.1          dynamic_cast<CIMModifySubscriptionResponseMessage*>(
1363 kumpf          1.3              request->buildResponse()));
1364                         PEGASUS_ASSERT(response.get() != 0);
1365 kumpf          1.1  
1366                         OperationResponseHandler handler(
1367 kumpf          1.3          request, response.get(), _responseChunkCallback);
1368                     
1369                         String temp;
1370 kumpf          1.1  
1371 kumpf          1.3      for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1372 kumpf          1.1      {
1373 kumpf          1.3          temp.append(request->classNames[i].getString());
1374 kumpf          1.1  
1375 kumpf          1.3          if (i < (n - 1))
1376 kumpf          1.1          {
1377 kumpf          1.3              temp.append(", ");
1378                             }
1379                         }
1380 kumpf          1.1  
1381 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1382                             Logger::TRACE,
1383                             "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1384                                 "Host name: $0  Name space: $1  Class name(s): $2",
1385                             System::getHostName(),
1386                             request->nameSpace.getString(),
1387                             temp));
1388                     
1389                         // convert arguments
1390                     
1391                         Array<CIMObjectPath> classNames;
1392 kumpf          1.1  
1393 kumpf          1.3      for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1394                         {
1395                             CIMObjectPath className(
1396 kumpf          1.1              System::getHostName(),
1397 kumpf          1.3              request->nameSpace,
1398                                 request->classNames[i]);
1399 kumpf          1.1  
1400 kumpf          1.3          classNames.append(className);
1401                         }
1402 kumpf          1.1  
1403 kumpf          1.3      OperationContext providerContext(
1404                             _createProviderOperationContext(request->operationContext));
1405                         providerContext.insert(request->operationContext.get(
1406                             SubscriptionInstanceContainer::NAME));
1407                         providerContext.insert(request->operationContext.get(
1408                             SubscriptionFilterConditionContainer::NAME));
1409                         providerContext.insert(request->operationContext.get(
1410                             SubscriptionFilterQueryContainer::NAME));
1411 kumpf          1.1  
1412 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1413 kumpf          1.1  
1414 kumpf          1.3      CIMIndicationProvider* provider =
1415                             getProviderInterface<CIMIndicationProvider>(_provider);
1416 kumpf          1.1  
1417 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1418 kumpf          1.1  
1419 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1420                             modifySubscription,
1421 kumpf          1.1          provider->modifySubscription(
1422 kumpf          1.3              providerContext,
1423 kumpf          1.1              request->subscriptionInstance.getPath(),
1424                                 classNames,
1425                                 request->propertyList,
1426 kumpf          1.3              request->repeatNotificationPolicy),
1427 dmitry.mikulin 1.11         handler);
1428 kumpf          1.1  
1429                         PEG_METHOD_EXIT();
1430 kumpf          1.3      return response.release();
1431 kumpf          1.1  }
1432                     
1433                     CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1434                         CIMRequestMessage* message)
1435                     {
1436                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1437                             "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1438                     
1439                         CIMDeleteSubscriptionRequestMessage* request =
1440                             dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1441                         PEGASUS_ASSERT(request != 0);
1442                     
1443 kumpf          1.3      AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
1444 kumpf          1.1          dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
1445 kumpf          1.3              request->buildResponse()));
1446                         PEGASUS_ASSERT(response.get() != 0);
1447 kumpf          1.1  
1448                         OperationResponseHandler handler(
1449 kumpf          1.3          request, response.get(), _responseChunkCallback);
1450                     
1451                         String temp;
1452 kumpf          1.1  
1453 kumpf          1.3      for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1454 kumpf          1.1      {
1455 kumpf          1.3          temp.append(request->classNames[i].getString());
1456 kumpf          1.1  
1457 kumpf          1.3          if (i < (n - 1))
1458 kumpf          1.1          {
1459 kumpf          1.3              temp.append(", ");
1460 kumpf          1.1          }
1461 kumpf          1.3      }
1462 kumpf          1.1  
1463 kumpf          1.3      PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1464                             Logger::TRACE,
1465                             "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
1466                                 "Host name: $0  Name space: $1  Class name(s): $2",
1467                             System::getHostName(),
1468                             request->nameSpace.getString(),
1469                             temp));
1470 kumpf          1.1  
1471 kumpf          1.3      Array<CIMObjectPath> classNames;
1472 kumpf          1.1  
1473 kumpf          1.3      for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1474                         {
1475                             CIMObjectPath className(
1476                                 System::getHostName(),
1477                                 request->nameSpace,
1478                                 request->classNames[i]);
1479 kumpf          1.1  
1480 kumpf          1.3          classNames.append(className);
1481                         }
1482 kumpf          1.1  
1483 kumpf          1.3      OperationContext providerContext(
1484                             _createProviderOperationContext(request->operationContext));
1485                         providerContext.insert(request->operationContext.get(
1486                             SubscriptionInstanceContainer::NAME));
1487 kumpf          1.1  
1488 r.kieninger    1.12     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1489 kumpf          1.1  
1490 kumpf          1.3      CIMIndicationProvider* provider =
1491                             getProviderInterface<CIMIndicationProvider>(_provider);
1492 kumpf          1.1  
1493 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1494 kumpf          1.1  
1495 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1496                             deleteSubscription,
1497 kumpf          1.1          provider->deleteSubscription(
1498 kumpf          1.3              providerContext,
1499 kumpf          1.1              request->subscriptionInstance.getPath(),
1500 kumpf          1.3              classNames),
1501 dmitry.mikulin 1.11         handler);
1502 kumpf          1.1  
1503 kumpf          1.3      //
1504                         //  Decrement count of current subscriptions for this provider
1505                         //
1506                         if (status.decrementSubscriptionsAndTestIfZero())
1507                         {
1508 kumpf          1.1          //
1509 kumpf          1.3          //  If there are no current subscriptions after the decrement,
1510                             //  the last subscription has been deleted
1511                             //  Call the provider's disableIndications method
1512 kumpf          1.1          //
1513 kumpf          1.3          if (_subscriptionInitComplete)
1514 kumpf          1.1          {
1515 kumpf          1.3              _disableIndications();
1516 kumpf          1.1          }
1517                         }
1518                     
1519                         PEG_METHOD_EXIT();
1520 kumpf          1.3      return response.release();
1521 kumpf          1.1  }
1522                     
1523                     CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1524                         CIMRequestMessage* message)
1525                     {
1526                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1527                             "ProviderMessageHandler::_handleExportIndicationRequest");
1528                     
1529                         CIMExportIndicationRequestMessage* request =
1530                             dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1531                         PEGASUS_ASSERT(request != 0);
1532                     
1533 kumpf          1.3      AutoPtr<CIMExportIndicationResponseMessage> response(
1534 kumpf          1.1          dynamic_cast<CIMExportIndicationResponseMessage*>(
1535 kumpf          1.3              request->buildResponse()));
1536                         PEGASUS_ASSERT(response.get() != 0);
1537 kumpf          1.1  
1538                         OperationResponseHandler handler(
1539 kumpf          1.3          request, response.get(), _responseChunkCallback);
1540 kumpf          1.1  
1541 kumpf          1.3      // NOTE: Accept-Languages do not need to be set in the consume msg.
1542                         OperationContext providerContext;
1543                         providerContext.insert(request->operationContext.get(
1544                             IdentityContainer::NAME));
1545 kumpf          1.1  //L10N_TODO
1546                     // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent.  This
1547                     // does not appear to be hooked up.  When it is added, need to
1548                     // make sure that Content-Language is set in the consume msg.
1549 kumpf          1.3      providerContext.insert(request->operationContext.get(
1550                             ContentLanguageListContainer::NAME));
1551 kumpf          1.1  
1552 kumpf          1.3      AutoPThreadSecurity threadLevelSecurity(providerContext);
1553 kumpf          1.1  
1554 kumpf          1.3      CIMIndicationConsumerProvider* provider =
1555                             getProviderInterface<CIMIndicationConsumerProvider>(_provider);
1556 kumpf          1.1  
1557 kumpf          1.3      StatProviderTimeMeasurement providerTime(response.get());
1558 kumpf          1.1  
1559 dmitry.mikulin 1.11     HANDLE_PROVIDER_CALL(
1560                             consumeIndication,
1561 kumpf          1.1          provider->consumeIndication(
1562 kumpf          1.3              providerContext,
1563 kumpf          1.1              request->destinationPath,
1564 kumpf          1.3              request->indicationInstance),
1565 dmitry.mikulin 1.11         handler);
1566 kumpf          1.1  
1567                         PEG_METHOD_EXIT();
1568 kumpf          1.3      return response.release();
1569 kumpf          1.1  }
1570                     
1571                     void ProviderMessageHandler::_enableIndications()
1572                     {
1573                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1574                             "DefaultProviderManager::_enableIndications");
1575                     
1576                         try
1577                         {
1578                             EnableIndicationsResponseHandler* indicationResponseHandler =
1579                                 new EnableIndicationsResponseHandler(
1580                                     0,    // request
1581                                     0,    // response
1582                                     status.getProviderInstance(),
1583                                     _indicationCallback,
1584                                     _responseChunkCallback);
1585                     
1586 kumpf          1.3          _indicationResponseHandler = indicationResponseHandler;
1587 kumpf          1.1  
1588 kumpf          1.2          status.setIndicationsEnabled(true);
1589 kumpf          1.1  
1590                             CIMIndicationProvider* provider =
1591                                 getProviderInterface<CIMIndicationProvider>(_provider);
1592                     
1593 dmitry.mikulin 1.11         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1594                                 "Calling provider.enableIndications: %s",
1595                                 (const char*)_fullyQualifiedProviderName.getCString()));
1596                     
1597                             try
1598                             {
1599                                 provider->enableIndications(*indicationResponseHandler);
1600                             }
1601                             catch (...)
1602                             {
1603                                 PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL2,
1604                                     "Caught exception from provider %s "
1605                                         "enableIndications() method.",
1606                                     (const char*)_fullyQualifiedProviderName.getCString()));
1607                                 throw;
1608                             }
1609 kumpf          1.3  
1610 dmitry.mikulin 1.11         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1611                                 "Returned from provider.enableIndications: %s",
1612                                 (const char*)_fullyQualifiedProviderName.getCString()));
1613 kumpf          1.1      }
1614                         catch (Exception& e)
1615                         {
1616 kumpf          1.3          PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
1617                                 "Exception: " + e.getMessage());
1618 kumpf          1.1  
1619 kumpf          1.3          Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1620 kumpf          1.1              "ProviderManager.Default.DefaultProviderManager."
1621                                     "ENABLE_INDICATIONS_FAILED",
1622                                 "Failed to enable indications for provider $0: $1.",
1623 dmitry.mikulin 1.11              _fullyQualifiedProviderName, e.getMessage());
1624 kumpf          1.1      }
1625                         catch(...)
1626                         {
1627 marek          1.10         PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
1628 kumpf          1.1              "Unexpected error in _enableIndications");
1629                     
1630 kumpf          1.3          Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1631 kumpf          1.1              "ProviderManager.Default.DefaultProviderManager."
1632                                     "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1633                                 "Failed to enable indications for provider $0.",
1634 dmitry.mikulin 1.11             _fullyQualifiedProviderName);
1635 kumpf          1.1      }
1636                     
1637                         PEG_METHOD_EXIT();
1638                     }
1639                     
1640                     void ProviderMessageHandler::_disableIndications()
1641                     {
1642                         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1643                             "DefaultProviderManager::_disableIndications");
1644                     
1645                         try
1646                         {
1647 kumpf          1.2          if (status.getIndicationsEnabled())
1648 kumpf          1.1          {
1649                                 CIMIndicationProvider* provider =
1650                                     getProviderInterface<CIMIndicationProvider>(_provider);
1651                     
1652 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1653                                     "Calling provider.disableIndications: %s",
1654                                     (const char*)_fullyQualifiedProviderName.getCString()));
1655 kumpf          1.3  
1656 kumpf          1.2              try
1657                                 {
1658                                     provider->disableIndications();
1659                                 }
1660                                 catch (...)
1661                                 {
1662 dmitry.mikulin 1.11                 PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL2,
1663                                         "Caught exception from provider %s "
1664                                             "disableIndications() method.",
1665                                         (const char*)_fullyQualifiedProviderName.getCString()));
1666                                     throw;
1667 kumpf          1.2              }
1668 kumpf          1.1  
1669 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1670                                     "Returned from  provider.disableIndications: %s",
1671                                     (const char*)_fullyQualifiedProviderName.getCString()));
1672                     
1673 kumpf          1.2              status.setIndicationsEnabled(false);
1674 kumpf          1.1  
1675                                 status.resetSubscriptions();
1676                     
1677 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1678                                     "Destroying indication response handler for %s",
1679                                     (const char*)_fullyQualifiedProviderName.getCString()));
1680 kumpf          1.1  
1681                                 delete _indicationResponseHandler;
1682                                 _indicationResponseHandler = 0;
1683                             }
1684                         }
1685                         catch(...)
1686                         {
1687 dmitry.mikulin 1.11         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1688                                 "Error occured disabling indications in provider %s",
1689                                 (const char*)_fullyQualifiedProviderName.getCString()));
1690 kumpf          1.1      }
1691 dmitry.mikulin 1.11     PEG_METHOD_EXIT();
1692 kumpf          1.1  }
1693                     PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2