(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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
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 r.kieninger 1.6.4.3     AutoPThreadSecurity threadLevelSecurity(request->operationContext);
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