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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2