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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2