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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2