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

   1 kumpf 1.1 //%2006////////////////////////////////////////////////////////////////////////
   2           //
   3           // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4           // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5           // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6           // IBM Corp.; EMC Corporation, The Open Group.
   7           // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8           // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9           // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10           // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11           // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12           // EMC Corporation; Symantec Corporation; The Open Group.
  13           //
  14           // Permission is hereby granted, free of charge, to any person obtaining a copy
  15           // of this software and associated documentation files (the "Software"), to
  16           // deal in the Software without restriction, including without limitation the
  17           // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18           // sell copies of the Software, and to permit persons to whom the Software is
  19           // furnished to do so, subject to the following conditions:
  20           // 
  21           // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22 kumpf 1.1 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23           // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24           // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25           // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26           // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27           // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28           // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29           //
  30           //==============================================================================
  31           //
  32           //%/////////////////////////////////////////////////////////////////////////////
  33           
  34           #include "ProviderMessageHandler.h"
  35           
  36           #include <Pegasus/Common/OperationContextInternal.h>
  37           #include <Pegasus/Common/Tracer.h>
  38           #include <Pegasus/Common/StatisticalData.h>
  39           #include <Pegasus/Common/Logger.h>
  40           #include <Pegasus/Common/MessageLoader.h>
  41           #include <Pegasus/Common/Constants.h>
  42           
  43 kumpf 1.1 #include <Pegasus/Provider/CIMInstanceQueryProvider.h>
  44           #include <Pegasus/Provider/CIMAssociationProvider.h>
  45           #include <Pegasus/Provider/CIMMethodProvider.h>
  46           #include <Pegasus/Provider/CIMIndicationProvider.h>
  47           #include <Pegasus/Provider/CIMIndicationConsumerProvider.h>
  48           
  49           #include <Pegasus/Query/QueryExpression/QueryExpression.h>
  50           #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
  51           
  52           #include <Pegasus/ProviderManager2/SimpleResponseHandler.h>
  53           #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
  54           #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
  55           
  56 kumpf 1.3 #define HANDLE_PROVIDER_EXCEPTION(providerCall, handler)               \
  57               try                                                                \
  58               {                                                                  \
  59                   providerCall;                                                  \
  60               }                                                                  \
  61               catch (CIMException& e)                                            \
  62               {                                                                  \
  63                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          \
  64                       "Provider Exception: " + e.getMessage());                  \
  65 mike  1.4         handler.setCIMException(e);                                    \
  66 kumpf 1.3     }                                                                  \
  67               catch (Exception& e)                                               \
  68               {                                                                  \
  69                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          \
  70                       "Provider Exception: " + e.getMessage());                  \
  71                   handler.setStatus(                                             \
  72                       CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage());  \
  73               }                                                                  \
  74               catch (...)                                                        \
  75               {                                                                  \
  76                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          \
  77                       "Provider Exception: Unknown");                            \
  78                   handler.setStatus(CIM_ERR_FAILED, "Unknown error.");           \
  79               }
  80 kumpf 1.1 
  81           
  82           PEGASUS_NAMESPACE_BEGIN
  83           
  84           template<class T>
  85           inline T* getProviderInterface(CIMProvider* provider)
  86           {
  87 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                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 276                       "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 mike  1.6.2.1 /*
 990               MEB: propagate SessionKey here?
 991               */
 992 kumpf 1.3         getInstanceRequest.operationContext = request->operationContext;
 993               
 994                   AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
 995                       dynamic_cast<CIMGetInstanceResponseMessage*>(
 996                           getInstanceRequest.buildResponse()));
 997                   PEGASUS_ASSERT(getInstanceResponse.get() != 0);
 998 kumpf 1.1     
 999 kumpf 1.3         //
1000                   // Process the GetInstance operation
1001                   //
1002 kumpf 1.1     
1003 kumpf 1.3         // create a handler for this request (with chunking disabled)
1004                   GetInstanceResponseHandler handler(
1005                       &getInstanceRequest, getInstanceResponse.get(), 0);
1006 kumpf 1.1     
1007 kumpf 1.3         // make target object path
1008                   CIMObjectPath objectPath(
1009                       System::getHostName(),
1010                       getInstanceRequest.nameSpace,
1011                       getInstanceRequest.instanceName.getClassName(),
1012                       getInstanceRequest.instanceName.getKeyBindings());
1013 kumpf 1.1     
1014 kumpf 1.3         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1015                       "ProviderMessageHandler::_handleGetPropertyRequest - "
1016                           "Object path: $0, Property: $1",
1017                       objectPath.toString(), request->propertyName.getString()));
1018 kumpf 1.1     
1019 kumpf 1.3         OperationContext providerContext(
1020                       _createProviderOperationContext(getInstanceRequest.operationContext));
1021 kumpf 1.1     
1022 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1023 kumpf 1.1     
1024 kumpf 1.3         CIMInstanceProvider* provider =
1025                       getProviderInterface<CIMInstanceProvider>(_provider);
1026 kumpf 1.1     
1027 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1028                       "Calling provider.getInstance: " + _name);
1029 kumpf 1.1     
1030 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1031 kumpf 1.1     
1032 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1033 kumpf 1.1             provider->getInstance(
1034 kumpf 1.3                 providerContext,
1035 kumpf 1.1                 objectPath,
1036 kumpf 1.3                 getInstanceRequest.includeQualifiers,
1037                           getInstanceRequest.includeClassOrigin,
1038                           getInstanceRequest.propertyList,
1039                           handler),
1040                       handler)
1041 kumpf 1.1     
1042 kumpf 1.3         //
1043                   // Copy the GetInstance response into the GetProperty response message
1044                   //
1045               
1046                   response->cimException = getInstanceResponse->cimException;
1047               
1048                   if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1049                   {
1050                       CIMInstance instance = getInstanceResponse->cimInstance;
1051 kumpf 1.1     
1052 kumpf 1.3             Uint32 pos = instance.findProperty(request->propertyName);
1053 kumpf 1.1     
1054 kumpf 1.3             if (pos != PEG_NOT_FOUND)
1055                       {
1056                           response->value = instance.getProperty(pos).getValue();
1057                       }
1058                       else    // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1059                       {
1060                           response->cimException = PEGASUS_CIM_EXCEPTION(
1061                               CIM_ERR_NO_SUCH_PROPERTY,
1062                               request->propertyName.getString());
1063 kumpf 1.1             }
1064 kumpf 1.3         }
1065 kumpf 1.1     
1066 mike  1.6.2.1 /*
1067               MEB: propagate SessionKey here?
1068               */
1069 kumpf 1.3         response->operationContext = getInstanceResponse->operationContext;
1070 kumpf 1.1     
1071                   PEG_METHOD_EXIT();
1072 kumpf 1.3         return response.release();
1073 kumpf 1.1     }
1074               
1075               CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1076                   CIMRequestMessage* message)
1077               {
1078                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1079                       "ProviderMessageHandler::_handleSetPropertyRequest");
1080               
1081                   CIMSetPropertyRequestMessage* request =
1082                       dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1083                   PEGASUS_ASSERT(request != 0);
1084               
1085 kumpf 1.3         AutoPtr<CIMSetPropertyResponseMessage> response(
1086 kumpf 1.1             dynamic_cast<CIMSetPropertyResponseMessage*>(
1087 kumpf 1.3                 request->buildResponse()));
1088                   PEGASUS_ASSERT(response.get() != 0);
1089 kumpf 1.1     
1090 kumpf 1.3         //
1091                   // Translate the SetProperty request to a ModifyInstance request message
1092                   //
1093               
1094                   // make target object path
1095                   CIMObjectPath objectPath(
1096                       System::getHostName(),
1097                       request->nameSpace,
1098                       request->instanceName.getClassName(),
1099                       request->instanceName.getKeyBindings());
1100               
1101                   CIMInstance instance(request->instanceName.getClassName());
1102                   instance.addProperty(CIMProperty(
1103                       request->propertyName, request->newValue));
1104                   instance.setPath(objectPath);
1105               
1106                   Array<CIMName> propertyList;
1107                   propertyList.append(request->propertyName);
1108               
1109                   CIMModifyInstanceRequestMessage modifyInstanceRequest(
1110                       request->messageId,
1111 kumpf 1.3             request->nameSpace,
1112                       instance,
1113                       false,  // includeQualifiers
1114                       propertyList,
1115                       request->queueIds);
1116 kumpf 1.1     
1117 mike  1.6.2.1 /*
1118               MEB: propagate SessionKey here?
1119               */
1120 kumpf 1.3         modifyInstanceRequest.operationContext = request->operationContext;
1121 kumpf 1.1     
1122 kumpf 1.3         AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1123                       dynamic_cast<CIMModifyInstanceResponseMessage*>(
1124                           modifyInstanceRequest.buildResponse()));
1125                   PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
1126 kumpf 1.1     
1127 kumpf 1.3         //
1128                   // Process the ModifyInstance operation
1129                   //
1130 kumpf 1.1     
1131 kumpf 1.3         // create a handler for this request (with chunking disabled)
1132                   ModifyInstanceResponseHandler handler(
1133                       &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
1134 kumpf 1.1     
1135 kumpf 1.3         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1136                       "ProviderMessageHandler::_handleSetPropertyRequest - "
1137                           "Object path: $0, Property: $1",
1138                       objectPath.toString(), request->propertyName.getString()));
1139 kumpf 1.1     
1140 kumpf 1.3         OperationContext providerContext(
1141                       _createProviderOperationContext(request->operationContext));
1142 kumpf 1.1     
1143 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1144 kumpf 1.1     
1145 kumpf 1.3         CIMInstanceProvider* provider =
1146                       getProviderInterface<CIMInstanceProvider>(_provider);
1147 kumpf 1.1     
1148 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1149                       "Calling provider.modifyInstance: " + _name);
1150 kumpf 1.1     
1151 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1152 kumpf 1.1     
1153 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1154 kumpf 1.1             provider->modifyInstance(
1155 kumpf 1.3                 providerContext,
1156 kumpf 1.1                 objectPath,
1157 kumpf 1.3                 modifyInstanceRequest.modifiedInstance,
1158                           modifyInstanceRequest.includeQualifiers,
1159                           modifyInstanceRequest.propertyList,
1160                           handler),
1161                       handler)
1162               
1163                   //
1164                   // Copy the ModifyInstance response into the GetProperty response message
1165                   //
1166 kumpf 1.1     
1167 kumpf 1.3         response->cimException = modifyInstanceResponse->cimException;
1168 mike  1.6.2.1 /*
1169               MEB: propagate SessionKey here?
1170               */
1171 kumpf 1.3         response->operationContext = modifyInstanceResponse->operationContext;
1172 kumpf 1.1     
1173                   PEG_METHOD_EXIT();
1174 kumpf 1.3         return response.release();
1175 kumpf 1.1     }
1176               
1177               CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1178                   CIMRequestMessage* message)
1179               {
1180                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1181                       "ProviderMessageHandler::_handleInvokeMethodRequest");
1182               
1183                   CIMInvokeMethodRequestMessage* request =
1184                       dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1185                   PEGASUS_ASSERT(request != 0);
1186               
1187 kumpf 1.3         AutoPtr<CIMInvokeMethodResponseMessage> response(
1188 kumpf 1.1             dynamic_cast<CIMInvokeMethodResponseMessage*>(
1189 kumpf 1.3                 request->buildResponse()));
1190                   PEGASUS_ASSERT(response.get() != 0);
1191 kumpf 1.1     
1192                   // create a handler for this request
1193                   InvokeMethodResponseHandler handler(
1194 kumpf 1.3             request, response.get(), _responseChunkCallback);
1195 kumpf 1.1     
1196 kumpf 1.3         // make target object path
1197                   CIMObjectPath objectPath(
1198                       System::getHostName(),
1199                       request->nameSpace,
1200                       request->instanceName.getClassName(),
1201                       request->instanceName.getKeyBindings());
1202 kumpf 1.1     
1203 kumpf 1.3         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1204                       "ProviderMessageHandler::_handleInvokeMethodRequest - "
1205                           "Object path: $0, Method: $1",
1206                       objectPath.toString(), request->methodName.getString()));
1207 kumpf 1.1     
1208 kumpf 1.3         CIMObjectPath instanceReference(request->instanceName);
1209                   instanceReference.setNameSpace(request->nameSpace);
1210 kumpf 1.1     
1211 kumpf 1.3         OperationContext providerContext(
1212                       _createProviderOperationContext(request->operationContext));
1213 kumpf 1.1     
1214 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1215 kumpf 1.1     
1216 kumpf 1.3         CIMMethodProvider* provider =
1217                       getProviderInterface<CIMMethodProvider>(_provider);
1218 kumpf 1.1     
1219 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1220                       "Calling provider.invokeMethod: " + _name);
1221 kumpf 1.1     
1222 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1223 kumpf 1.1     
1224 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1225 kumpf 1.1             provider->invokeMethod(
1226 kumpf 1.3                 providerContext,
1227 kumpf 1.1                 instanceReference,
1228                           request->methodName,
1229                           request->inParameters,
1230 kumpf 1.3                 handler),
1231                       handler)
1232 kumpf 1.1     
1233                   PEG_METHOD_EXIT();
1234 kumpf 1.3         return response.release();
1235 kumpf 1.1     }
1236               
1237               CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1238                   CIMRequestMessage* message)
1239               {
1240                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1241                       "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1242               
1243                   CIMCreateSubscriptionRequestMessage* request =
1244                       dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1245                   PEGASUS_ASSERT(request != 0);
1246               
1247 kumpf 1.3         AutoPtr<CIMCreateSubscriptionResponseMessage> response(
1248 kumpf 1.1             dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
1249 kumpf 1.3                 request->buildResponse()));
1250                   PEGASUS_ASSERT(response.get() != 0);
1251 kumpf 1.1     
1252                   OperationResponseHandler handler(
1253 kumpf 1.3             request, response.get(), _responseChunkCallback);
1254 kumpf 1.1     
1255 kumpf 1.3         String temp;
1256               
1257                   for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1258 kumpf 1.1         {
1259 kumpf 1.3             temp.append(request->classNames[i].getString());
1260 kumpf 1.1     
1261 kumpf 1.3             if (i < (n - 1))
1262 kumpf 1.1             {
1263 kumpf 1.3                 temp.append(", ");
1264                       }
1265                   }
1266               
1267                   PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1268                       Logger::TRACE,
1269                       "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1270                           "Host name: $0  Name space: $1  Class name(s): $2",
1271                       System::getHostName(),
1272                       request->nameSpace.getString(),
1273                       temp));
1274               
1275                   //
1276                   //  Save the provider instance from the request
1277                   //
1278                   ProviderIdContainer pidc = (ProviderIdContainer)
1279                       request->operationContext.get(ProviderIdContainer::NAME);
1280                   status.setProviderInstance(pidc.getProvider());
1281               
1282                   // convert arguments
1283 kumpf 1.1     
1284 kumpf 1.3         Array<CIMObjectPath> classNames;
1285 kumpf 1.1     
1286 kumpf 1.3         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1287                   {
1288                       CIMObjectPath className(
1289 kumpf 1.1                 System::getHostName(),
1290 kumpf 1.3                 request->nameSpace,
1291                           request->classNames[i]);
1292 kumpf 1.1     
1293 kumpf 1.3             classNames.append(className);
1294                   }
1295 kumpf 1.1     
1296 kumpf 1.3         OperationContext providerContext(
1297                       _createProviderOperationContext(request->operationContext));
1298                   providerContext.insert(request->operationContext.get(
1299                       SubscriptionInstanceContainer::NAME));
1300                   providerContext.insert(request->operationContext.get(
1301                       SubscriptionFilterConditionContainer::NAME));
1302                   providerContext.insert(request->operationContext.get(
1303                       SubscriptionFilterQueryContainer::NAME));
1304 kumpf 1.1     
1305 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1306 kumpf 1.1     
1307 kumpf 1.3         CIMIndicationProvider* provider =
1308                       getProviderInterface<CIMIndicationProvider>(_provider);
1309 kumpf 1.1     
1310 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1311                       "Calling provider.createSubscription: " + _name);
1312 kumpf 1.1     
1313 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1314 kumpf 1.1     
1315 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1316 kumpf 1.1             provider->createSubscription(
1317 kumpf 1.3                 providerContext,
1318 kumpf 1.1                 request->subscriptionInstance.getPath(),
1319                           classNames,
1320                           request->propertyList,
1321 kumpf 1.3                 request->repeatNotificationPolicy),
1322                       handler)
1323               
1324                   //
1325                   //  Increment count of current subscriptions for this provider
1326                   //
1327                   if (status.testIfZeroAndIncrementSubscriptions())
1328                   {
1329                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1330                           "First accepted subscription");
1331 kumpf 1.1     
1332                       //
1333 kumpf 1.3             //  If there were no current subscriptions before the increment,
1334                       //  the first subscription has been created
1335                       //  Call the provider's enableIndications method
1336 kumpf 1.1             //
1337 kumpf 1.3             if (_subscriptionInitComplete)
1338 kumpf 1.1             {
1339 kumpf 1.3                 _enableIndications();
1340 kumpf 1.1             }
1341                   }
1342               
1343                   PEG_METHOD_EXIT();
1344 kumpf 1.3         return response.release();
1345 kumpf 1.1     }
1346               
1347               CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1348                   CIMRequestMessage* message)
1349               {
1350                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1351                       "ProviderMessageHandler::_handleModifySubscriptionRequest");
1352               
1353                   CIMModifySubscriptionRequestMessage* request =
1354                       dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1355                   PEGASUS_ASSERT(request != 0);
1356               
1357 kumpf 1.3         AutoPtr<CIMModifySubscriptionResponseMessage> response(
1358 kumpf 1.1             dynamic_cast<CIMModifySubscriptionResponseMessage*>(
1359 kumpf 1.3                 request->buildResponse()));
1360                   PEGASUS_ASSERT(response.get() != 0);
1361 kumpf 1.1     
1362                   OperationResponseHandler handler(
1363 kumpf 1.3             request, response.get(), _responseChunkCallback);
1364               
1365                   String temp;
1366 kumpf 1.1     
1367 kumpf 1.3         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1368 kumpf 1.1         {
1369 kumpf 1.3             temp.append(request->classNames[i].getString());
1370 kumpf 1.1     
1371 kumpf 1.3             if (i < (n - 1))
1372 kumpf 1.1             {
1373 kumpf 1.3                 temp.append(", ");
1374                       }
1375                   }
1376 kumpf 1.1     
1377 kumpf 1.3         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1378                       Logger::TRACE,
1379                       "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1380                           "Host name: $0  Name space: $1  Class name(s): $2",
1381                       System::getHostName(),
1382                       request->nameSpace.getString(),
1383                       temp));
1384               
1385                   // convert arguments
1386               
1387                   Array<CIMObjectPath> classNames;
1388 kumpf 1.1     
1389 kumpf 1.3         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1390                   {
1391                       CIMObjectPath className(
1392 kumpf 1.1                 System::getHostName(),
1393 kumpf 1.3                 request->nameSpace,
1394                           request->classNames[i]);
1395 kumpf 1.1     
1396 kumpf 1.3             classNames.append(className);
1397                   }
1398 kumpf 1.1     
1399 kumpf 1.3         OperationContext providerContext(
1400                       _createProviderOperationContext(request->operationContext));
1401                   providerContext.insert(request->operationContext.get(
1402                       SubscriptionInstanceContainer::NAME));
1403                   providerContext.insert(request->operationContext.get(
1404                       SubscriptionFilterConditionContainer::NAME));
1405                   providerContext.insert(request->operationContext.get(
1406                       SubscriptionFilterQueryContainer::NAME));
1407 kumpf 1.1     
1408 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1409 kumpf 1.1     
1410 kumpf 1.3         CIMIndicationProvider* provider =
1411                       getProviderInterface<CIMIndicationProvider>(_provider);
1412 kumpf 1.1     
1413 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1414                       "Calling provider.modifySubscription: " + _name);
1415 kumpf 1.1     
1416 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1417 kumpf 1.1     
1418 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1419 kumpf 1.1             provider->modifySubscription(
1420 kumpf 1.3                 providerContext,
1421 kumpf 1.1                 request->subscriptionInstance.getPath(),
1422                           classNames,
1423                           request->propertyList,
1424 kumpf 1.3                 request->repeatNotificationPolicy),
1425                       handler)
1426 kumpf 1.1     
1427                   PEG_METHOD_EXIT();
1428 kumpf 1.3         return response.release();
1429 kumpf 1.1     }
1430               
1431               CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1432                   CIMRequestMessage* message)
1433               {
1434                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1435                       "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1436               
1437                   CIMDeleteSubscriptionRequestMessage* request =
1438                       dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1439                   PEGASUS_ASSERT(request != 0);
1440               
1441 kumpf 1.3         AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
1442 kumpf 1.1             dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
1443 kumpf 1.3                 request->buildResponse()));
1444                   PEGASUS_ASSERT(response.get() != 0);
1445 kumpf 1.1     
1446                   OperationResponseHandler handler(
1447 kumpf 1.3             request, response.get(), _responseChunkCallback);
1448               
1449                   String temp;
1450 kumpf 1.1     
1451 kumpf 1.3         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1452 kumpf 1.1         {
1453 kumpf 1.3             temp.append(request->classNames[i].getString());
1454 kumpf 1.1     
1455 kumpf 1.3             if (i < (n - 1))
1456 kumpf 1.1             {
1457 kumpf 1.3                 temp.append(", ");
1458 kumpf 1.1             }
1459 kumpf 1.3         }
1460 kumpf 1.1     
1461 kumpf 1.3         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,
1462                       Logger::TRACE,
1463                       "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
1464                           "Host name: $0  Name space: $1  Class name(s): $2",
1465                       System::getHostName(),
1466                       request->nameSpace.getString(),
1467                       temp));
1468 kumpf 1.1     
1469 kumpf 1.3         Array<CIMObjectPath> classNames;
1470 kumpf 1.1     
1471 kumpf 1.3         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1472                   {
1473                       CIMObjectPath className(
1474                           System::getHostName(),
1475                           request->nameSpace,
1476                           request->classNames[i]);
1477 kumpf 1.1     
1478 kumpf 1.3             classNames.append(className);
1479                   }
1480 kumpf 1.1     
1481 kumpf 1.3         OperationContext providerContext(
1482                       _createProviderOperationContext(request->operationContext));
1483                   providerContext.insert(request->operationContext.get(
1484                       SubscriptionInstanceContainer::NAME));
1485 kumpf 1.1     
1486 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1487 kumpf 1.1     
1488 kumpf 1.3         CIMIndicationProvider* provider =
1489                       getProviderInterface<CIMIndicationProvider>(_provider);
1490 kumpf 1.1     
1491 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1492                       "Calling provider.deleteSubscription: " + _name);
1493 kumpf 1.1     
1494 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1495 kumpf 1.1     
1496 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1497 kumpf 1.1             provider->deleteSubscription(
1498 kumpf 1.3                 providerContext,
1499 kumpf 1.1                 request->subscriptionInstance.getPath(),
1500 kumpf 1.3                 classNames),
1501                       handler)
1502 kumpf 1.1     
1503 kumpf 1.3         //
1504                   //  Decrement count of current subscriptions for this provider
1505                   //
1506                   if (status.decrementSubscriptionsAndTestIfZero())
1507                   {
1508 kumpf 1.1             //
1509 kumpf 1.3             //  If there are no current subscriptions after the decrement,
1510                       //  the last subscription has been deleted
1511                       //  Call the provider's disableIndications method
1512 kumpf 1.1             //
1513 kumpf 1.3             if (_subscriptionInitComplete)
1514 kumpf 1.1             {
1515 kumpf 1.3                 _disableIndications();
1516 kumpf 1.1             }
1517                   }
1518               
1519                   PEG_METHOD_EXIT();
1520 kumpf 1.3         return response.release();
1521 kumpf 1.1     }
1522               
1523               CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1524                   CIMRequestMessage* message)
1525               {
1526                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1527                       "ProviderMessageHandler::_handleExportIndicationRequest");
1528               
1529                   CIMExportIndicationRequestMessage* request =
1530                       dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1531                   PEGASUS_ASSERT(request != 0);
1532               
1533 kumpf 1.3         AutoPtr<CIMExportIndicationResponseMessage> response(
1534 kumpf 1.1             dynamic_cast<CIMExportIndicationResponseMessage*>(
1535 kumpf 1.3                 request->buildResponse()));
1536                   PEGASUS_ASSERT(response.get() != 0);
1537 kumpf 1.1     
1538                   OperationResponseHandler handler(
1539 kumpf 1.3             request, response.get(), _responseChunkCallback);
1540 kumpf 1.1     
1541 kumpf 1.3         // NOTE: Accept-Languages do not need to be set in the consume msg.
1542                   OperationContext providerContext;
1543                   providerContext.insert(request->operationContext.get(
1544                       IdentityContainer::NAME));
1545 kumpf 1.1     //L10N_TODO
1546               // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent.  This
1547               // does not appear to be hooked up.  When it is added, need to
1548               // make sure that Content-Language is set in the consume msg.
1549 kumpf 1.3         providerContext.insert(request->operationContext.get(
1550                       ContentLanguageListContainer::NAME));
1551 kumpf 1.1     
1552 kumpf 1.3         AutoPThreadSecurity threadLevelSecurity(providerContext);
1553 kumpf 1.1     
1554 kumpf 1.3         CIMIndicationConsumerProvider* provider =
1555                       getProviderInterface<CIMIndicationConsumerProvider>(_provider);
1556 kumpf 1.1     
1557 kumpf 1.3         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1558                       "Calling provider.consumeIndication: " + _name);
1559 kumpf 1.1     
1560 kumpf 1.3         StatProviderTimeMeasurement providerTime(response.get());
1561 kumpf 1.1     
1562 kumpf 1.3         HANDLE_PROVIDER_EXCEPTION(
1563 kumpf 1.1             provider->consumeIndication(
1564 kumpf 1.3                 providerContext,
1565 kumpf 1.1                 request->destinationPath,
1566 kumpf 1.3                 request->indicationInstance),
1567                       handler)
1568 kumpf 1.1     
1569                   PEG_METHOD_EXIT();
1570 kumpf 1.3         return response.release();
1571 kumpf 1.1     }
1572               
1573               void ProviderMessageHandler::_enableIndications()
1574               {
1575                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1576                       "DefaultProviderManager::_enableIndications");
1577               
1578                   try
1579                   {
1580                       EnableIndicationsResponseHandler* indicationResponseHandler =
1581                           new EnableIndicationsResponseHandler(
1582                               0,    // request
1583                               0,    // response
1584                               status.getProviderInstance(),
1585                               _indicationCallback,
1586                               _responseChunkCallback);
1587               
1588 kumpf 1.3             _indicationResponseHandler = indicationResponseHandler;
1589 kumpf 1.1     
1590 kumpf 1.2             status.setIndicationsEnabled(true);
1591 kumpf 1.1     
1592                       CIMIndicationProvider* provider =
1593                           getProviderInterface<CIMIndicationProvider>(_provider);
1594               
1595 kumpf 1.3             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1596                           "Calling provider.enableIndications: " + _name);
1597               
1598 kumpf 1.1             provider->enableIndications(*indicationResponseHandler);
1599                   }
1600                   catch (Exception& e)
1601                   {
1602 kumpf 1.3             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
1603                           "Exception: " + e.getMessage());
1604 kumpf 1.1     
1605 kumpf 1.3             Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1606 kumpf 1.1                 "ProviderManager.Default.DefaultProviderManager."
1607                               "ENABLE_INDICATIONS_FAILED",
1608                           "Failed to enable indications for provider $0: $1.",
1609                           _name, e.getMessage());
1610                   }
1611                   catch(...)
1612                   {
1613 kumpf 1.3             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
1614 kumpf 1.1                 "Unexpected error in _enableIndications");
1615               
1616 kumpf 1.3             Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1617 kumpf 1.1                 "ProviderManager.Default.DefaultProviderManager."
1618                               "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1619                           "Failed to enable indications for provider $0.",
1620                           _name);
1621                   }
1622               
1623                   PEG_METHOD_EXIT();
1624               }
1625               
1626               void ProviderMessageHandler::_disableIndications()
1627               {
1628                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1629                       "DefaultProviderManager::_disableIndications");
1630               
1631                   try
1632                   {
1633 kumpf 1.2             if (status.getIndicationsEnabled())
1634 kumpf 1.1             {
1635                           CIMIndicationProvider* provider =
1636                               getProviderInterface<CIMIndicationProvider>(_provider);
1637               
1638 kumpf 1.3                 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1639                               "Calling provider.disableIndications: " + _name);
1640               
1641 kumpf 1.2                 try
1642                           {
1643                               provider->disableIndications();
1644                           }
1645                           catch (...)
1646                           {
1647                               PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
1648                                   "Caught exception from provider " + _name +
1649 kumpf 1.3                             " disableIndications() method.");
1650 kumpf 1.2                 }
1651 kumpf 1.1     
1652 kumpf 1.2                 status.setIndicationsEnabled(false);
1653 kumpf 1.1     
1654                           status.resetSubscriptions();
1655               
1656                           PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1657                               "Destroying indication response handler for " + _name);
1658               
1659                           delete _indicationResponseHandler;
1660                           _indicationResponseHandler = 0;
1661                       }
1662                   }
1663                   catch(...)
1664                   {
1665                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1666                           "Error occured disabling indications in provider " + _name);
1667                   }
1668               }
1669               
1670               PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2