(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                                 PEGASUS_ASSERT(0);
 306                                 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 karl           1.25.4.1     // KS_TODO Confirm that the following is cruft and not needed.
 981                         //    CIMObjectPath resultPath(
 982                         //       System::getHostName(),
 983                         //        request->nameSpace,
 984                         //        request->resultClass.getString());
 985 kumpf          1.1      
 986 kumpf          1.3          OperationContext providerContext(
 987                                 _createProviderOperationContext(request->operationContext));
 988 kumpf          1.1      
 989 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 990 kumpf          1.1      
 991 kumpf          1.3          CIMAssociationProvider* provider =
 992                                 getProviderInterface<CIMAssociationProvider>(_provider);
 993 kumpf          1.1      
 994 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 995 kumpf          1.1      
 996 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 997                                 referenceNames,
 998 kumpf          1.1              provider->referenceNames(
 999 kumpf          1.3                  providerContext,
1000 kumpf          1.1                  objectPath,
1001                                     request->resultClass,
1002                                     request->role,
1003 kumpf          1.3                  handler),
1004 dmitry.mikulin 1.11             handler);
1005 kumpf          1.1      
1006                             PEG_METHOD_EXIT();
1007 kumpf          1.3          return response.release();
1008 kumpf          1.1      }
1009                         
1010                         CIMResponseMessage* ProviderMessageHandler::_handleGetPropertyRequest(
1011                             CIMRequestMessage* message)
1012                         {
1013                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1014                                 "ProviderMessageHandler::_handleGetPropertyRequest");
1015                         
1016                             CIMGetPropertyRequestMessage* request =
1017                                 dynamic_cast<CIMGetPropertyRequestMessage*>(message);
1018                             PEGASUS_ASSERT(request != 0);
1019                         
1020 kumpf          1.3          AutoPtr<CIMGetPropertyResponseMessage> response(
1021 kumpf          1.1              dynamic_cast<CIMGetPropertyResponseMessage*>(
1022 kumpf          1.3                  request->buildResponse()));
1023                             PEGASUS_ASSERT(response.get() != 0);
1024                         
1025                             //
1026                             // Translate the GetProperty request to a GetInstance request message
1027                             //
1028                         
1029                             Array<CIMName> propertyList;
1030                             propertyList.append(request->propertyName);
1031                         
1032                             CIMGetInstanceRequestMessage getInstanceRequest(
1033                                 request->messageId,
1034                                 request->nameSpace,
1035                                 request->instanceName,
1036                                 false,  // includeQualifiers
1037                                 false,  // includeClassOrigin
1038                                 propertyList,
1039                                 request->queueIds);
1040 kumpf          1.1      
1041 kumpf          1.3          getInstanceRequest.operationContext = request->operationContext;
1042                         
1043                             AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
1044                                 dynamic_cast<CIMGetInstanceResponseMessage*>(
1045                                     getInstanceRequest.buildResponse()));
1046                             PEGASUS_ASSERT(getInstanceResponse.get() != 0);
1047 kumpf          1.1      
1048 kumpf          1.3          //
1049                             // Process the GetInstance operation
1050                             //
1051 kumpf          1.1      
1052 kumpf          1.3          // create a handler for this request (with chunking disabled)
1053                             GetInstanceResponseHandler handler(
1054                                 &getInstanceRequest, getInstanceResponse.get(), 0);
1055 kumpf          1.1      
1056 kumpf          1.3          // make target object path
1057                             CIMObjectPath objectPath(
1058                                 System::getHostName(),
1059                                 getInstanceRequest.nameSpace,
1060                                 getInstanceRequest.instanceName.getClassName(),
1061                                 getInstanceRequest.instanceName.getKeyBindings());
1062 kumpf          1.1      
1063 marek          1.13         PEG_TRACE((
1064                                 TRC_PROVIDERMANAGER,
1065                                 Tracer::LEVEL3,
1066 kumpf          1.3              "ProviderMessageHandler::_handleGetPropertyRequest - "
1067 marek          1.13                 "Object path: %s, Property: %s",
1068                                 (const char*) objectPath.toString().getCString(),
1069                                 (const char*) request->propertyName.getString().getCString()));
1070 kumpf          1.1      
1071 kumpf          1.3          OperationContext providerContext(
1072                                 _createProviderOperationContext(getInstanceRequest.operationContext));
1073 kumpf          1.1      
1074 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1075 kumpf          1.1      
1076 kumpf          1.3          CIMInstanceProvider* provider =
1077                                 getProviderInterface<CIMInstanceProvider>(_provider);
1078 kumpf          1.1      
1079 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1080 kumpf          1.1      
1081 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1082                                 getInstance,
1083 kumpf          1.1              provider->getInstance(
1084 kumpf          1.3                  providerContext,
1085 kumpf          1.1                  objectPath,
1086 kumpf          1.3                  getInstanceRequest.includeQualifiers,
1087                                     getInstanceRequest.includeClassOrigin,
1088                                     getInstanceRequest.propertyList,
1089                                     handler),
1090 dmitry.mikulin 1.11             handler);
1091 kumpf          1.1      
1092 kumpf          1.3          //
1093                             // Copy the GetInstance response into the GetProperty response message
1094                             //
1095                         
1096                             response->cimException = getInstanceResponse->cimException;
1097                         
1098                             if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1099                             {
1100 r.kieninger    1.24             CIMInstance instance = 
1101 thilo.boehm    1.25                 getInstanceResponse->getResponseData().getInstance();
1102 kumpf          1.1      
1103 kumpf          1.3              Uint32 pos = instance.findProperty(request->propertyName);
1104 kumpf          1.1      
1105 kumpf          1.3              if (pos != PEG_NOT_FOUND)
1106                                 {
1107                                     response->value = instance.getProperty(pos).getValue();
1108                                 }
1109                                 else    // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1110                                 {
1111                                     response->cimException = PEGASUS_CIM_EXCEPTION(
1112                                         CIM_ERR_NO_SUCH_PROPERTY,
1113                                         request->propertyName.getString());
1114 kumpf          1.1              }
1115 kumpf          1.3          }
1116 kumpf          1.1      
1117 kumpf          1.3          response->operationContext = getInstanceResponse->operationContext;
1118 kumpf          1.1      
1119                             PEG_METHOD_EXIT();
1120 kumpf          1.3          return response.release();
1121 kumpf          1.1      }
1122                         
1123                         CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1124                             CIMRequestMessage* message)
1125                         {
1126                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1127                                 "ProviderMessageHandler::_handleSetPropertyRequest");
1128                         
1129                             CIMSetPropertyRequestMessage* request =
1130                                 dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1131                             PEGASUS_ASSERT(request != 0);
1132                         
1133 kumpf          1.3          AutoPtr<CIMSetPropertyResponseMessage> response(
1134 kumpf          1.1              dynamic_cast<CIMSetPropertyResponseMessage*>(
1135 kumpf          1.3                  request->buildResponse()));
1136                             PEGASUS_ASSERT(response.get() != 0);
1137 kumpf          1.1      
1138 kumpf          1.3          //
1139                             // Translate the SetProperty request to a ModifyInstance request message
1140                             //
1141                         
1142                             // make target object path
1143                             CIMObjectPath objectPath(
1144                                 System::getHostName(),
1145                                 request->nameSpace,
1146                                 request->instanceName.getClassName(),
1147                                 request->instanceName.getKeyBindings());
1148                         
1149                             CIMInstance instance(request->instanceName.getClassName());
1150                             instance.addProperty(CIMProperty(
1151                                 request->propertyName, request->newValue));
1152                             instance.setPath(objectPath);
1153                         
1154                             Array<CIMName> propertyList;
1155                             propertyList.append(request->propertyName);
1156                         
1157                             CIMModifyInstanceRequestMessage modifyInstanceRequest(
1158                                 request->messageId,
1159 kumpf          1.3              request->nameSpace,
1160                                 instance,
1161                                 false,  // includeQualifiers
1162                                 propertyList,
1163                                 request->queueIds);
1164 kumpf          1.1      
1165 kumpf          1.3          modifyInstanceRequest.operationContext = request->operationContext;
1166 kumpf          1.1      
1167 kumpf          1.3          AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1168                                 dynamic_cast<CIMModifyInstanceResponseMessage*>(
1169                                     modifyInstanceRequest.buildResponse()));
1170                             PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
1171 kumpf          1.1      
1172 kumpf          1.3          //
1173                             // Process the ModifyInstance operation
1174                             //
1175 kumpf          1.1      
1176 kumpf          1.3          // create a handler for this request (with chunking disabled)
1177                             ModifyInstanceResponseHandler handler(
1178                                 &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
1179 kumpf          1.1      
1180 marek          1.13         PEG_TRACE((
1181                                 TRC_PROVIDERMANAGER,
1182                                 Tracer::LEVEL3,
1183 kumpf          1.3              "ProviderMessageHandler::_handleSetPropertyRequest - "
1184 marek          1.13                 "Object path: %s, Property: %s",
1185                                 (const char*) objectPath.toString().getCString(),
1186                                 (const char*) request->propertyName.getString().getCString()));
1187 kumpf          1.1      
1188 kumpf          1.3          OperationContext providerContext(
1189                                 _createProviderOperationContext(request->operationContext));
1190 kumpf          1.1      
1191 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1192 kumpf          1.1      
1193 kumpf          1.3          CIMInstanceProvider* provider =
1194                                 getProviderInterface<CIMInstanceProvider>(_provider);
1195 kumpf          1.1      
1196 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1197 kumpf          1.1      
1198 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1199                                 modifyInstance,
1200 kumpf          1.1              provider->modifyInstance(
1201 kumpf          1.3                  providerContext,
1202 kumpf          1.1                  objectPath,
1203 kumpf          1.3                  modifyInstanceRequest.modifiedInstance,
1204                                     modifyInstanceRequest.includeQualifiers,
1205                                     modifyInstanceRequest.propertyList,
1206                                     handler),
1207 dmitry.mikulin 1.11             handler);
1208 kumpf          1.3      
1209                             //
1210                             // Copy the ModifyInstance response into the GetProperty response message
1211                             //
1212 kumpf          1.1      
1213 kumpf          1.3          response->cimException = modifyInstanceResponse->cimException;
1214                             response->operationContext = modifyInstanceResponse->operationContext;
1215 kumpf          1.1      
1216                             PEG_METHOD_EXIT();
1217 kumpf          1.3          return response.release();
1218 kumpf          1.1      }
1219                         
1220                         CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1221                             CIMRequestMessage* message)
1222                         {
1223                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1224                                 "ProviderMessageHandler::_handleInvokeMethodRequest");
1225                         
1226                             CIMInvokeMethodRequestMessage* request =
1227                                 dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1228                             PEGASUS_ASSERT(request != 0);
1229                         
1230 kumpf          1.3          AutoPtr<CIMInvokeMethodResponseMessage> response(
1231 kumpf          1.1              dynamic_cast<CIMInvokeMethodResponseMessage*>(
1232 kumpf          1.3                  request->buildResponse()));
1233                             PEGASUS_ASSERT(response.get() != 0);
1234 kumpf          1.1      
1235                             // create a handler for this request
1236                             InvokeMethodResponseHandler handler(
1237 kumpf          1.3              request, response.get(), _responseChunkCallback);
1238 kumpf          1.1      
1239 kumpf          1.3          // make target object path
1240                             CIMObjectPath objectPath(
1241                                 System::getHostName(),
1242                                 request->nameSpace,
1243                                 request->instanceName.getClassName(),
1244                                 request->instanceName.getKeyBindings());
1245 kumpf          1.1      
1246 marek          1.13         PEG_TRACE((
1247                                 TRC_PROVIDERMANAGER,
1248                                 Tracer::LEVEL3,
1249 kumpf          1.3              "ProviderMessageHandler::_handleInvokeMethodRequest - "
1250 marek          1.13                 "Object path: %s, Method: %s",
1251                                 (const char*) objectPath.toString().getCString(),
1252                                 (const char*) request->methodName.getString().getCString()));
1253 kumpf          1.21     
1254 kumpf          1.3          OperationContext providerContext(
1255                                 _createProviderOperationContext(request->operationContext));
1256 kumpf          1.1      
1257 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1258 kumpf          1.1      
1259 kumpf          1.3          CIMMethodProvider* provider =
1260                                 getProviderInterface<CIMMethodProvider>(_provider);
1261 kumpf          1.1      
1262 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1263 kumpf          1.1      
1264 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1265                                 invokeMethod,
1266 kumpf          1.1              provider->invokeMethod(
1267 kumpf          1.3                  providerContext,
1268 kumpf          1.7                  objectPath,
1269 kumpf          1.1                  request->methodName,
1270                                     request->inParameters,
1271 kumpf          1.3                  handler),
1272 dmitry.mikulin 1.11             handler);
1273 kumpf          1.1      
1274                             PEG_METHOD_EXIT();
1275 kumpf          1.3          return response.release();
1276 kumpf          1.1      }
1277                         
1278                         CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1279                             CIMRequestMessage* message)
1280                         {
1281                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1282                                 "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1283                         
1284                             CIMCreateSubscriptionRequestMessage* request =
1285                                 dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1286                             PEGASUS_ASSERT(request != 0);
1287                         
1288 kumpf          1.3          AutoPtr<CIMCreateSubscriptionResponseMessage> response(
1289 kumpf          1.1              dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
1290 kumpf          1.3                  request->buildResponse()));
1291                             PEGASUS_ASSERT(response.get() != 0);
1292 kumpf          1.1      
1293                             OperationResponseHandler handler(
1294 kumpf          1.3              request, response.get(), _responseChunkCallback);
1295 kumpf          1.1      
1296 kumpf          1.3          String temp;
1297                         
1298                             for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1299 kumpf          1.1          {
1300 kumpf          1.3              temp.append(request->classNames[i].getString());
1301 kumpf          1.1      
1302 kumpf          1.3              if (i < (n - 1))
1303 kumpf          1.1              {
1304 kumpf          1.3                  temp.append(", ");
1305                                 }
1306                             }
1307                         
1308 marek          1.13         PEG_TRACE((
1309                                 TRC_PROVIDERMANAGER,
1310                                 Tracer::LEVEL3,
1311 kumpf          1.3              "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1312 marek          1.13                 "Host name: %s  Name space: %s  Class name(s): %s",
1313                                 (const char*) System::getHostName().getCString(),
1314                                 (const char*) request->nameSpace.getString().getCString(),
1315                                 (const char*) temp.getCString()));
1316 kumpf          1.3      
1317                             //
1318                             //  Save the provider instance from the request
1319                             //
1320                             ProviderIdContainer pidc = (ProviderIdContainer)
1321                                 request->operationContext.get(ProviderIdContainer::NAME);
1322                             status.setProviderInstance(pidc.getProvider());
1323                         
1324                             // convert arguments
1325 kumpf          1.1      
1326 kumpf          1.3          Array<CIMObjectPath> classNames;
1327 kumpf          1.1      
1328 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1329                             {
1330                                 CIMObjectPath className(
1331 kumpf          1.1                  System::getHostName(),
1332 kumpf          1.3                  request->nameSpace,
1333                                     request->classNames[i]);
1334 kumpf          1.1      
1335 kumpf          1.3              classNames.append(className);
1336                             }
1337 kumpf          1.1      
1338 kumpf          1.3          OperationContext providerContext(
1339                                 _createProviderOperationContext(request->operationContext));
1340                             providerContext.insert(request->operationContext.get(
1341                                 SubscriptionInstanceContainer::NAME));
1342                             providerContext.insert(request->operationContext.get(
1343                                 SubscriptionFilterConditionContainer::NAME));
1344                             providerContext.insert(request->operationContext.get(
1345                                 SubscriptionFilterQueryContainer::NAME));
1346 kumpf          1.1      
1347 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1348 kumpf          1.1      
1349 kumpf          1.3          CIMIndicationProvider* provider =
1350                                 getProviderInterface<CIMIndicationProvider>(_provider);
1351 kumpf          1.1      
1352 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1353 kumpf          1.1      
1354 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1355                                 createSubscription,
1356 kumpf          1.1              provider->createSubscription(
1357 kumpf          1.3                  providerContext,
1358 kumpf          1.1                  request->subscriptionInstance.getPath(),
1359                                     classNames,
1360                                     request->propertyList,
1361 kumpf          1.3                  request->repeatNotificationPolicy),
1362 dmitry.mikulin 1.11             handler);
1363 kumpf          1.3      
1364                             //
1365                             //  Increment count of current subscriptions for this provider
1366                             //
1367                             if (status.testIfZeroAndIncrementSubscriptions())
1368                             {
1369 marek          1.8              PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1370 kumpf          1.3                  "First accepted subscription");
1371 kumpf          1.1      
1372                                 //
1373 kumpf          1.3              //  If there were no current subscriptions before the increment,
1374                                 //  the first subscription has been created
1375                                 //  Call the provider's enableIndications method
1376 kumpf          1.1              //
1377 kumpf          1.3              if (_subscriptionInitComplete)
1378 kumpf          1.1              {
1379 kumpf          1.3                  _enableIndications();
1380 kumpf          1.1              }
1381                             }
1382                         
1383                             PEG_METHOD_EXIT();
1384 kumpf          1.3          return response.release();
1385 kumpf          1.1      }
1386                         
1387                         CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1388                             CIMRequestMessage* message)
1389                         {
1390                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1391                                 "ProviderMessageHandler::_handleModifySubscriptionRequest");
1392                         
1393                             CIMModifySubscriptionRequestMessage* request =
1394                                 dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1395                             PEGASUS_ASSERT(request != 0);
1396                         
1397 kumpf          1.3          AutoPtr<CIMModifySubscriptionResponseMessage> response(
1398 kumpf          1.1              dynamic_cast<CIMModifySubscriptionResponseMessage*>(
1399 kumpf          1.3                  request->buildResponse()));
1400                             PEGASUS_ASSERT(response.get() != 0);
1401 kumpf          1.1      
1402                             OperationResponseHandler handler(
1403 kumpf          1.3              request, response.get(), _responseChunkCallback);
1404                         
1405                             String temp;
1406 kumpf          1.1      
1407 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1408 kumpf          1.1          {
1409 kumpf          1.3              temp.append(request->classNames[i].getString());
1410 kumpf          1.1      
1411 kumpf          1.3              if (i < (n - 1))
1412 kumpf          1.1              {
1413 kumpf          1.3                  temp.append(", ");
1414                                 }
1415                             }
1416 kumpf          1.1      
1417 marek          1.13         PEG_TRACE((
1418                                 TRC_PROVIDERMANAGER,
1419                                 Tracer::LEVEL3,
1420                                 "ProviderMessageHandler::_handleModifySubscriptionRequest - "
1421                                     "Host name: %s  Name space: %s  Class name(s): %s",
1422                                 (const char*) System::getHostName().getCString(),
1423                                 (const char*) request->nameSpace.getString().getCString(),
1424                                 (const char*) temp.getCString()));
1425 kumpf          1.21     
1426 kumpf          1.3          // convert arguments
1427                         
1428                             Array<CIMObjectPath> classNames;
1429 kumpf          1.1      
1430 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1431                             {
1432                                 CIMObjectPath className(
1433 kumpf          1.1                  System::getHostName(),
1434 kumpf          1.3                  request->nameSpace,
1435                                     request->classNames[i]);
1436 kumpf          1.1      
1437 kumpf          1.3              classNames.append(className);
1438                             }
1439 kumpf          1.1      
1440 kumpf          1.3          OperationContext providerContext(
1441                                 _createProviderOperationContext(request->operationContext));
1442                             providerContext.insert(request->operationContext.get(
1443                                 SubscriptionInstanceContainer::NAME));
1444                             providerContext.insert(request->operationContext.get(
1445                                 SubscriptionFilterConditionContainer::NAME));
1446                             providerContext.insert(request->operationContext.get(
1447                                 SubscriptionFilterQueryContainer::NAME));
1448 kumpf          1.1      
1449 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1450 kumpf          1.1      
1451 kumpf          1.3          CIMIndicationProvider* provider =
1452                                 getProviderInterface<CIMIndicationProvider>(_provider);
1453 kumpf          1.1      
1454 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1455 kumpf          1.1      
1456 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1457                                 modifySubscription,
1458 kumpf          1.1              provider->modifySubscription(
1459 kumpf          1.3                  providerContext,
1460 kumpf          1.1                  request->subscriptionInstance.getPath(),
1461                                     classNames,
1462                                     request->propertyList,
1463 kumpf          1.3                  request->repeatNotificationPolicy),
1464 dmitry.mikulin 1.11             handler);
1465 kumpf          1.1      
1466                             PEG_METHOD_EXIT();
1467 kumpf          1.3          return response.release();
1468 kumpf          1.1      }
1469                         
1470                         CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1471                             CIMRequestMessage* message)
1472                         {
1473                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1474                                 "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1475                         
1476                             CIMDeleteSubscriptionRequestMessage* request =
1477                                 dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1478                             PEGASUS_ASSERT(request != 0);
1479                         
1480 kumpf          1.3          AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
1481 kumpf          1.1              dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
1482 kumpf          1.3                  request->buildResponse()));
1483                             PEGASUS_ASSERT(response.get() != 0);
1484 kumpf          1.1      
1485                             OperationResponseHandler handler(
1486 kumpf          1.3              request, response.get(), _responseChunkCallback);
1487                         
1488                             String temp;
1489 kumpf          1.1      
1490 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1491 kumpf          1.1          {
1492 kumpf          1.3              temp.append(request->classNames[i].getString());
1493 kumpf          1.1      
1494 kumpf          1.3              if (i < (n - 1))
1495 kumpf          1.1              {
1496 kumpf          1.3                  temp.append(", ");
1497 kumpf          1.1              }
1498 kumpf          1.3          }
1499 kumpf          1.1      
1500 marek          1.13         PEG_TRACE((
1501                                 TRC_PROVIDERMANAGER,
1502                                 Tracer::LEVEL3,
1503 kumpf          1.3              "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
1504 marek          1.13                 "Host name: %s  Name space: %s  Class name(s): %s",
1505                                 (const char*) System::getHostName().getCString(),
1506                                 (const char*) request->nameSpace.getString().getCString(),
1507                                 (const char*) temp.getCString()));
1508 kumpf          1.21     
1509 kumpf          1.3          Array<CIMObjectPath> classNames;
1510 kumpf          1.1      
1511 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1512                             {
1513                                 CIMObjectPath className(
1514                                     System::getHostName(),
1515                                     request->nameSpace,
1516                                     request->classNames[i]);
1517 kumpf          1.1      
1518 kumpf          1.3              classNames.append(className);
1519                             }
1520 kumpf          1.1      
1521 kumpf          1.3          OperationContext providerContext(
1522                                 _createProviderOperationContext(request->operationContext));
1523                             providerContext.insert(request->operationContext.get(
1524                                 SubscriptionInstanceContainer::NAME));
1525 kumpf          1.1      
1526 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1527 kumpf          1.1      
1528 kumpf          1.3          CIMIndicationProvider* provider =
1529                                 getProviderInterface<CIMIndicationProvider>(_provider);
1530 kumpf          1.1      
1531 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1532 kumpf          1.1      
1533 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1534                                 deleteSubscription,
1535 kumpf          1.1              provider->deleteSubscription(
1536 kumpf          1.3                  providerContext,
1537 kumpf          1.1                  request->subscriptionInstance.getPath(),
1538 kumpf          1.3                  classNames),
1539 dmitry.mikulin 1.11             handler);
1540 kumpf          1.1      
1541 kumpf          1.3          //
1542                             //  Decrement count of current subscriptions for this provider
1543                             //
1544                             if (status.decrementSubscriptionsAndTestIfZero())
1545                             {
1546 kumpf          1.1              //
1547 kumpf          1.3              //  If there are no current subscriptions after the decrement,
1548                                 //  the last subscription has been deleted
1549                                 //  Call the provider's disableIndications method
1550 kumpf          1.1              //
1551 kumpf          1.3              if (_subscriptionInitComplete)
1552 kumpf          1.1              {
1553 kumpf          1.3                  _disableIndications();
1554 kumpf          1.1              }
1555                             }
1556                         
1557                             PEG_METHOD_EXIT();
1558 kumpf          1.3          return response.release();
1559 kumpf          1.1      }
1560                         
1561                         CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1562                             CIMRequestMessage* message)
1563                         {
1564                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1565                                 "ProviderMessageHandler::_handleExportIndicationRequest");
1566                         
1567                             CIMExportIndicationRequestMessage* request =
1568                                 dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1569                             PEGASUS_ASSERT(request != 0);
1570                         
1571 kumpf          1.3          AutoPtr<CIMExportIndicationResponseMessage> response(
1572 kumpf          1.1              dynamic_cast<CIMExportIndicationResponseMessage*>(
1573 kumpf          1.3                  request->buildResponse()));
1574                             PEGASUS_ASSERT(response.get() != 0);
1575 kumpf          1.1      
1576                             OperationResponseHandler handler(
1577 kumpf          1.3              request, response.get(), _responseChunkCallback);
1578 kumpf          1.1      
1579 kumpf          1.3          // NOTE: Accept-Languages do not need to be set in the consume msg.
1580                             OperationContext providerContext;
1581                             providerContext.insert(request->operationContext.get(
1582                                 IdentityContainer::NAME));
1583 kumpf          1.1      //L10N_TODO
1584                         // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent.  This
1585                         // does not appear to be hooked up.  When it is added, need to
1586                         // make sure that Content-Language is set in the consume msg.
1587 kumpf          1.3          providerContext.insert(request->operationContext.get(
1588                                 ContentLanguageListContainer::NAME));
1589 kumpf          1.1      
1590 kumpf          1.3          CIMIndicationConsumerProvider* provider =
1591                                 getProviderInterface<CIMIndicationConsumerProvider>(_provider);
1592 kumpf          1.1      
1593 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1594 kumpf          1.1      
1595 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1596                                 consumeIndication,
1597 kumpf          1.1              provider->consumeIndication(
1598 kumpf          1.3                  providerContext,
1599 kumpf          1.1                  request->destinationPath,
1600 kumpf          1.3                  request->indicationInstance),
1601 dmitry.mikulin 1.11             handler);
1602 kumpf          1.1      
1603                             PEG_METHOD_EXIT();
1604 kumpf          1.3          return response.release();
1605 kumpf          1.1      }
1606                         
1607                         void ProviderMessageHandler::_enableIndications()
1608                         {
1609                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1610                                 "DefaultProviderManager::_enableIndications");
1611                         
1612                             try
1613                             {
1614                                 EnableIndicationsResponseHandler* indicationResponseHandler =
1615                                     new EnableIndicationsResponseHandler(
1616                                         0,    // request
1617                                         0,    // response
1618                                         status.getProviderInstance(),
1619                                         _indicationCallback,
1620                                         _responseChunkCallback);
1621                         
1622 kumpf          1.3              _indicationResponseHandler = indicationResponseHandler;
1623 kumpf          1.1      
1624 kumpf          1.2              status.setIndicationsEnabled(true);
1625 kumpf          1.1      
1626                                 CIMIndicationProvider* provider =
1627                                     getProviderInterface<CIMIndicationProvider>(_provider);
1628                         
1629 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1630                                     "Calling provider.enableIndications: %s",
1631                                     (const char*)_fullyQualifiedProviderName.getCString()));
1632                         
1633                                 try
1634                                 {
1635                                     provider->enableIndications(*indicationResponseHandler);
1636                                 }
1637                                 catch (...)
1638                                 {
1639 marek          1.15                 PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL1,
1640 dmitry.mikulin 1.11                     "Caught exception from provider %s "
1641                                             "enableIndications() method.",
1642                                         (const char*)_fullyQualifiedProviderName.getCString()));
1643                                     throw;
1644                                 }
1645 kumpf          1.3      
1646 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1647                                     "Returned from provider.enableIndications: %s",
1648                                     (const char*)_fullyQualifiedProviderName.getCString()));
1649 kumpf          1.1          }
1650                             catch (Exception& e)
1651                             {
1652 kumpf          1.3              Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1653 kumpf          1.16                 MessageLoaderParms(
1654                                         "ProviderManager.Default.DefaultProviderManager."
1655                                             "ENABLE_INDICATIONS_FAILED",
1656                                         "Failed to enable indications for provider $0: $1.",
1657                                          _fullyQualifiedProviderName, e.getMessage()));
1658 kumpf          1.1          }
1659                             catch(...)
1660                             {
1661 kumpf          1.3              Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1662 kumpf          1.16                 MessageLoaderParms(
1663                                         "ProviderManager.Default.DefaultProviderManager."
1664                                             "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1665                                         "Failed to enable indications for provider $0.",
1666                                         _fullyQualifiedProviderName));
1667 kumpf          1.1          }
1668                         
1669                             PEG_METHOD_EXIT();
1670                         }
1671                         
1672                         void ProviderMessageHandler::_disableIndications()
1673                         {
1674                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1675                                 "DefaultProviderManager::_disableIndications");
1676                         
1677                             try
1678                             {
1679 kumpf          1.2              if (status.getIndicationsEnabled())
1680 kumpf          1.1              {
1681                                     CIMIndicationProvider* provider =
1682                                         getProviderInterface<CIMIndicationProvider>(_provider);
1683                         
1684 dmitry.mikulin 1.11                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1685                                         "Calling provider.disableIndications: %s",
1686                                         (const char*)_fullyQualifiedProviderName.getCString()));
1687 kumpf          1.3      
1688 kumpf          1.2                  try
1689                                     {
1690                                         provider->disableIndications();
1691                                     }
1692                                     catch (...)
1693                                     {
1694 marek          1.15                     PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL1,
1695 dmitry.mikulin 1.11                         "Caught exception from provider %s "
1696                                                 "disableIndications() method.",
1697                                             (const char*)_fullyQualifiedProviderName.getCString()));
1698                                         throw;
1699 kumpf          1.2                  }
1700 kumpf          1.1      
1701 dmitry.mikulin 1.11                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1702                                         "Returned from  provider.disableIndications: %s",
1703                                         (const char*)_fullyQualifiedProviderName.getCString()));
1704                         
1705 kumpf          1.2                  status.setIndicationsEnabled(false);
1706 kumpf          1.1      
1707                                     status.resetSubscriptions();
1708                         
1709 dmitry.mikulin 1.11                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1710                                         "Destroying indication response handler for %s",
1711                                         (const char*)_fullyQualifiedProviderName.getCString()));
1712 kumpf          1.1      
1713                                     delete _indicationResponseHandler;
1714                                     _indicationResponseHandler = 0;
1715                                 }
1716                             }
1717                             catch(...)
1718                             {
1719 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1720                                     "Error occured disabling indications in provider %s",
1721                                     (const char*)_fullyQualifiedProviderName.getCString()));
1722 kumpf          1.1          }
1723 dmitry.mikulin 1.11         PEG_METHOD_EXIT();
1724 kumpf          1.1      }
1725                         PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2