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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2