(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.6.4.2         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.6.4.2         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.6.4.1             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.6.4.2         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