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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2