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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2