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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2