(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 karl           1.25.4.4             PEGASUS_UNREACHABLE(PEGASUS_ASSERT(0);)
 306 kumpf          1.3                  break;
 307                                 }
 308                             }
 309                             catch (CIMException& e)
 310                             {
 311 thilo.boehm    1.17             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,"CIMException: %s",
 312                                     (const char*)e.getMessage().getCString()));
 313 kumpf          1.3              response = request->buildResponse();
 314                                 response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
 315                                     e.getContentLanguages(), e.getCode(), e.getMessage());
 316                             }
 317                             catch (Exception& e)
 318 kumpf          1.1          {
 319 thilo.boehm    1.17             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,"Exception: %s",
 320                                     (const char*)e.getMessage().getCString()));
 321 kumpf          1.3              response = request->buildResponse();
 322                                 response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
 323                                     e.getContentLanguages(), CIM_ERR_FAILED, e.getMessage());
 324                             }
 325                             catch (...)
 326                             {
 327 marek          1.15             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 328 kumpf          1.3                  "Exception: Unknown");
 329                                 response = request->buildResponse();
 330                                 response->cimException = PEGASUS_CIM_EXCEPTION(
 331                                     CIM_ERR_FAILED, "Unknown error.");
 332 kumpf          1.1          }
 333                         
 334                             PEG_METHOD_EXIT();
 335                         
 336                             return response;
 337                         }
 338                         
 339 kumpf          1.3      OperationContext ProviderMessageHandler::_createProviderOperationContext(
 340                             const OperationContext& context)
 341                         {
 342                             OperationContext providerContext;
 343                         
 344                             providerContext.insert(context.get(IdentityContainer::NAME));
 345                             providerContext.insert(context.get(AcceptLanguageListContainer::NAME));
 346                             providerContext.insert(context.get(ContentLanguageListContainer::NAME));
 347                         
 348 karl           1.25.4.5     if (context.contains(UserRoleContainer::NAME))
 349                             {
 350                                 providerContext.insert(context.get(UserRoleContainer::NAME));
 351                             }
 352                         
 353 kumpf          1.3          return providerContext;
 354                         }
 355                         
 356 kumpf          1.1      CIMResponseMessage* ProviderMessageHandler::_handleGetInstanceRequest(
 357                             CIMRequestMessage* message)
 358                         {
 359                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 360                                 "ProviderMessageHandler::_handleGetInstanceRequest");
 361                         
 362                             CIMGetInstanceRequestMessage* request =
 363                                 dynamic_cast<CIMGetInstanceRequestMessage*>(message);
 364                             PEGASUS_ASSERT(request != 0);
 365                         
 366 kumpf          1.3          AutoPtr<CIMGetInstanceResponseMessage> response(
 367 kumpf          1.1              dynamic_cast<CIMGetInstanceResponseMessage*>(
 368 kumpf          1.3                  request->buildResponse()));
 369                             PEGASUS_ASSERT(response.get() != 0);
 370 kumpf          1.1      
 371                             // create a handler for this request
 372                             GetInstanceResponseHandler handler(
 373 kumpf          1.3              request, response.get(), _responseChunkCallback);
 374 kumpf          1.1      
 375 kumpf          1.3          // make target object path
 376                             CIMObjectPath objectPath(
 377                                 System::getHostName(),
 378                                 request->nameSpace,
 379                                 request->instanceName.getClassName(),
 380                                 request->instanceName.getKeyBindings());
 381 kumpf          1.1      
 382 marek          1.13         PEG_TRACE((
 383                                 TRC_PROVIDERMANAGER,
 384                                 Tracer::LEVEL3,
 385 kumpf          1.3              "ProviderMessageHandler::_handleGetInstanceRequest - "
 386 marek          1.13                 "Object path: %s",
 387                                 (const char*) objectPath.toString().getCString()));
 388 kumpf          1.1      
 389 kumpf          1.3          OperationContext providerContext(
 390                                 _createProviderOperationContext(request->operationContext));
 391 kumpf          1.1      
 392 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 393 kumpf          1.1      
 394 kumpf          1.3          CIMInstanceProvider* provider =
 395                                 getProviderInterface<CIMInstanceProvider>(_provider);
 396 kumpf          1.1      
 397 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 398 kumpf          1.1      
 399 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 400                                 getInstance,
 401 kumpf          1.1              provider->getInstance(
 402 kumpf          1.3                  providerContext,
 403 kumpf          1.1                  objectPath,
 404                                     request->includeQualifiers,
 405                                     request->includeClassOrigin,
 406                                     request->propertyList,
 407 kumpf          1.3                  handler),
 408 dmitry.mikulin 1.11             handler);
 409 kumpf          1.1      
 410                             PEG_METHOD_EXIT();
 411 kumpf          1.3          return response.release();
 412 kumpf          1.1      }
 413                         
 414                         CIMResponseMessage* ProviderMessageHandler::_handleEnumerateInstancesRequest(
 415                             CIMRequestMessage* message)
 416                         {
 417                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 418                                 "ProviderMessageHandler::_handleEnumerateInstanceRequest");
 419                         
 420                             CIMEnumerateInstancesRequestMessage* request =
 421                                 dynamic_cast<CIMEnumerateInstancesRequestMessage*>(message);
 422                             PEGASUS_ASSERT(request != 0);
 423                         
 424 kumpf          1.3          AutoPtr<CIMEnumerateInstancesResponseMessage> response(
 425 kumpf          1.1              dynamic_cast<CIMEnumerateInstancesResponseMessage*>(
 426 kumpf          1.3                  request->buildResponse()));
 427                             PEGASUS_ASSERT(response.get() != 0);
 428 kumpf          1.1      
 429                             // create a handler for this request
 430                             EnumerateInstancesResponseHandler handler(
 431 kumpf          1.3              request, response.get(), _responseChunkCallback);
 432 kumpf          1.1      
 433 kumpf          1.3          // make target object path
 434                             CIMObjectPath objectPath(
 435                                 System::getHostName(),
 436                                 request->nameSpace,
 437                                 request->className);
 438 kumpf          1.1      
 439 marek          1.13         PEG_TRACE((
 440                                 TRC_PROVIDERMANAGER,
 441                                 Tracer::LEVEL3,
 442 kumpf          1.3              "ProviderMessageHandler::_handleEnumerateInstancesRequest - "
 443 marek          1.13                 "Object path: %s",
 444                                 (const char*) objectPath.toString().getCString()));
 445 kumpf          1.1      
 446 kumpf          1.3          OperationContext providerContext(
 447                                 _createProviderOperationContext(request->operationContext));
 448 kumpf          1.1      
 449 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 450 kumpf          1.1      
 451 kumpf          1.3          CIMInstanceProvider* provider =
 452                                 getProviderInterface<CIMInstanceProvider>(_provider);
 453 kumpf          1.1      
 454 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 455 kumpf          1.1      
 456 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 457                                 enumerateInstances,
 458 kumpf          1.1              provider->enumerateInstances(
 459 kumpf          1.3                  providerContext,
 460 kumpf          1.1                  objectPath,
 461                                     request->includeQualifiers,
 462                                     request->includeClassOrigin,
 463                                     request->propertyList,
 464 kumpf          1.3                  handler),
 465 dmitry.mikulin 1.11             handler);
 466 kumpf          1.1      
 467                             PEG_METHOD_EXIT();
 468 kumpf          1.3          return response.release();
 469 kumpf          1.1      }
 470                         
 471 kumpf          1.5      CIMResponseMessage*
 472                             ProviderMessageHandler::_handleEnumerateInstanceNamesRequest(
 473                                 CIMRequestMessage* message)
 474 kumpf          1.1      {
 475                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 476                                 "ProviderMessageHandler::_handleEnumerateInstanceNamesRequest");
 477                         
 478                             CIMEnumerateInstanceNamesRequestMessage* request =
 479                                 dynamic_cast<CIMEnumerateInstanceNamesRequestMessage*>(message);
 480                             PEGASUS_ASSERT(request != 0);
 481                         
 482 kumpf          1.3          AutoPtr<CIMEnumerateInstanceNamesResponseMessage> response(
 483 kumpf          1.1              dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>(
 484 kumpf          1.3                  request->buildResponse()));
 485                             PEGASUS_ASSERT(response.get() != 0);
 486 kumpf          1.1      
 487                             // create a handler for this request
 488                             EnumerateInstanceNamesResponseHandler handler(
 489 kumpf          1.3              request, response.get(), _responseChunkCallback);
 490 kumpf          1.1      
 491 kumpf          1.3          // make target object path
 492                             CIMObjectPath objectPath(
 493                                 System::getHostName(),
 494                                 request->nameSpace,
 495                                 request->className);
 496 kumpf          1.1      
 497 marek          1.13         PEG_TRACE((
 498                                 TRC_PROVIDERMANAGER,
 499                                 Tracer::LEVEL3,
 500 kumpf          1.3              "ProviderMessageHandler::_handleEnumerateInstanceNamesRequest - "
 501 marek          1.13                 "Object path: %s",
 502                                 (const char*) objectPath.toString().getCString()));
 503 kumpf          1.1      
 504 kumpf          1.3          OperationContext providerContext(
 505                                 _createProviderOperationContext(request->operationContext));
 506 kumpf          1.1      
 507 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 508 kumpf          1.1      
 509 kumpf          1.3          CIMInstanceProvider* provider =
 510                                 getProviderInterface<CIMInstanceProvider>(_provider);
 511 kumpf          1.1      
 512 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 513 kumpf          1.1      
 514 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 515                                 enumerateInstanceNames,
 516 kumpf          1.1              provider->enumerateInstanceNames(
 517 kumpf          1.3                  providerContext,
 518 kumpf          1.1                  objectPath,
 519 kumpf          1.3                  handler),
 520 dmitry.mikulin 1.11             handler);
 521 kumpf          1.1      
 522                             PEG_METHOD_EXIT();
 523 kumpf          1.3          return response.release();
 524 kumpf          1.1      }
 525                         
 526                         CIMResponseMessage* ProviderMessageHandler::_handleCreateInstanceRequest(
 527                             CIMRequestMessage* message)
 528                         {
 529                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 530                                 "ProviderMessageHandler::_handleCreateInstanceRequest");
 531                         
 532                             CIMCreateInstanceRequestMessage* request =
 533                                 dynamic_cast<CIMCreateInstanceRequestMessage*>(message);
 534                             PEGASUS_ASSERT(request != 0);
 535                         
 536 kumpf          1.3          AutoPtr<CIMCreateInstanceResponseMessage> response(
 537 kumpf          1.1              dynamic_cast<CIMCreateInstanceResponseMessage*>(
 538 kumpf          1.3                  request->buildResponse()));
 539                             PEGASUS_ASSERT(response.get() != 0);
 540 kumpf          1.1      
 541                             // create a handler for this request
 542                             CreateInstanceResponseHandler handler(
 543 kumpf          1.3              request, response.get(), _responseChunkCallback);
 544 kumpf          1.1      
 545 kumpf          1.3          // make target object path
 546                             CIMObjectPath objectPath(
 547                                 System::getHostName(),
 548                                 request->nameSpace,
 549                                 request->newInstance.getPath().getClassName(),
 550                                 request->newInstance.getPath().getKeyBindings());
 551 kumpf          1.1      
 552 marek          1.13         PEG_TRACE((
 553                                 TRC_PROVIDERMANAGER,
 554                                 Tracer::LEVEL3,
 555 kumpf          1.3              "ProviderMessageHandler::_handleCreateInstanceRequest - "
 556 marek          1.13                 "Object path: %s",
 557                                 (const char*) objectPath.toString().getCString()));
 558 kumpf          1.1      
 559 kumpf          1.3          OperationContext providerContext(
 560                                 _createProviderOperationContext(request->operationContext));
 561 kumpf          1.1      
 562 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 563 kumpf          1.1      
 564 kumpf          1.3          CIMInstanceProvider* provider =
 565                                 getProviderInterface<CIMInstanceProvider>(_provider);
 566 kumpf          1.1      
 567 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 568 kumpf          1.1      
 569 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 570                                 createInstance,
 571 kumpf          1.1              provider->createInstance(
 572 kumpf          1.3                  providerContext,
 573 kumpf          1.1                  objectPath,
 574                                     request->newInstance,
 575 kumpf          1.3                  handler),
 576 dmitry.mikulin 1.11             handler);
 577 kumpf          1.1      
 578                             PEG_METHOD_EXIT();
 579 kumpf          1.3          return response.release();
 580 kumpf          1.1      }
 581                         
 582                         CIMResponseMessage* ProviderMessageHandler::_handleModifyInstanceRequest(
 583                             CIMRequestMessage* message)
 584                         {
 585                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 586                                 "ProviderMessageHandler::_handleModifyInstanceRequest");
 587                         
 588                             CIMModifyInstanceRequestMessage* request =
 589                                 dynamic_cast<CIMModifyInstanceRequestMessage*>(message);
 590                             PEGASUS_ASSERT(request != 0);
 591                         
 592 kumpf          1.3          AutoPtr<CIMModifyInstanceResponseMessage> response(
 593 kumpf          1.1              dynamic_cast<CIMModifyInstanceResponseMessage*>(
 594 kumpf          1.3                  request->buildResponse()));
 595                             PEGASUS_ASSERT(response.get() != 0);
 596 kumpf          1.1      
 597                             // create a handler for this request
 598                             ModifyInstanceResponseHandler handler(
 599 kumpf          1.3              request, response.get(), _responseChunkCallback);
 600 kumpf          1.1      
 601 kumpf          1.3          // make target object path
 602                             CIMObjectPath objectPath(
 603                                 System::getHostName(),
 604                                 request->nameSpace,
 605                                 request->modifiedInstance.getPath().getClassName(),
 606                                 request->modifiedInstance.getPath().getKeyBindings());
 607 kumpf          1.1      
 608 marek          1.13         PEG_TRACE((
 609                                 TRC_PROVIDERMANAGER,
 610                                 Tracer::LEVEL3,
 611 kumpf          1.3              "ProviderMessageHandler::_handleModifyInstanceRequest - "
 612 marek          1.13                 "Object path: %s",
 613                                 (const char*) objectPath.toString().getCString()));
 614 kumpf          1.1      
 615 kumpf          1.3          OperationContext providerContext(
 616                                 _createProviderOperationContext(request->operationContext));
 617 kumpf          1.1      
 618 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 619 kumpf          1.1      
 620 kumpf          1.3          CIMInstanceProvider* provider =
 621                                 getProviderInterface<CIMInstanceProvider>(_provider);
 622 kumpf          1.1      
 623 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 624 kumpf          1.1      
 625 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 626                                 modifyInstance,
 627 kumpf          1.1              provider->modifyInstance(
 628 kumpf          1.3                  providerContext,
 629 kumpf          1.1                  objectPath,
 630                                     request->modifiedInstance,
 631                                     request->includeQualifiers,
 632                                     request->propertyList,
 633 kumpf          1.3                  handler),
 634 dmitry.mikulin 1.11             handler);
 635 kumpf          1.1      
 636                             PEG_METHOD_EXIT();
 637 kumpf          1.3          return response.release();
 638 kumpf          1.1      }
 639                         
 640                         CIMResponseMessage* ProviderMessageHandler::_handleDeleteInstanceRequest(
 641                             CIMRequestMessage* message)
 642                         {
 643                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 644                                 "ProviderMessageHandler::_handleDeleteInstanceRequest");
 645                         
 646                             CIMDeleteInstanceRequestMessage* request =
 647                                 dynamic_cast<CIMDeleteInstanceRequestMessage*>(message);
 648                             PEGASUS_ASSERT(request != 0);
 649                         
 650 kumpf          1.3          AutoPtr<CIMDeleteInstanceResponseMessage> response(
 651 kumpf          1.1              dynamic_cast<CIMDeleteInstanceResponseMessage*>(
 652 kumpf          1.3                  request->buildResponse()));
 653                             PEGASUS_ASSERT(response.get() != 0);
 654 kumpf          1.1      
 655                             // create a handler for this request
 656                             DeleteInstanceResponseHandler handler(
 657 kumpf          1.3              request, response.get(), _responseChunkCallback);
 658 kumpf          1.1      
 659 kumpf          1.3          // make target object path
 660                             CIMObjectPath objectPath(
 661                                 System::getHostName(),
 662                                 request->nameSpace,
 663                                 request->instanceName.getClassName(),
 664                                 request->instanceName.getKeyBindings());
 665 kumpf          1.1      
 666 marek          1.13         PEG_TRACE((
 667                                 TRC_PROVIDERMANAGER,
 668                                 Tracer::LEVEL3,
 669 kumpf          1.3              "ProviderMessageHandler::_handleDeleteInstanceRequest - "
 670 marek          1.13                 "Object path: %s",
 671                                 (const char*) objectPath.toString().getCString()));
 672 kumpf          1.1      
 673 kumpf          1.3          OperationContext providerContext(
 674                                 _createProviderOperationContext(request->operationContext));
 675 kumpf          1.1      
 676 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 677 kumpf          1.1      
 678 kumpf          1.3          CIMInstanceProvider* provider =
 679                                 getProviderInterface<CIMInstanceProvider>(_provider);
 680 kumpf          1.1      
 681 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 682 kumpf          1.1      
 683 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 684                                 deleteInstance,
 685 kumpf          1.1              provider->deleteInstance(
 686 kumpf          1.3                  providerContext,
 687 kumpf          1.1                  objectPath,
 688 kumpf          1.3                  handler),
 689 dmitry.mikulin 1.11             handler);
 690 kumpf          1.1      
 691                             PEG_METHOD_EXIT();
 692 kumpf          1.3          return response.release();
 693 kumpf          1.1      }
 694                         
 695                         CIMResponseMessage* ProviderMessageHandler::_handleExecQueryRequest(
 696                             CIMRequestMessage* message)
 697                         {
 698                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 699                                 "ProviderMessageHandler::_handleExecQueryRequest");
 700                         
 701                             CIMExecQueryRequestMessage* request =
 702                                 dynamic_cast<CIMExecQueryRequestMessage*>(message);
 703                             PEGASUS_ASSERT(request != 0);
 704                         
 705 kumpf          1.3          AutoPtr<CIMExecQueryResponseMessage> response(
 706 kumpf          1.1              dynamic_cast<CIMExecQueryResponseMessage*>(
 707 kumpf          1.3                  request->buildResponse()));
 708                             PEGASUS_ASSERT(response.get() != 0);
 709 kumpf          1.1      
 710                             // create a handler for this request
 711                             ExecQueryResponseHandler handler(
 712 kumpf          1.3              request, response.get(), _responseChunkCallback);
 713 kumpf          1.1      
 714 kumpf          1.3          // make target object path
 715                             CIMObjectPath objectPath(
 716                                 System::getHostName(),
 717                                 request->nameSpace,
 718                                 request->className);
 719 kumpf          1.1      
 720 marek          1.13         PEG_TRACE((
 721                                 TRC_PROVIDERMANAGER,
 722                                 Tracer::LEVEL3,
 723 kumpf          1.3              "ProviderMessageHandler::_handleExecQueryRequest - "
 724 marek          1.13                 "Object path: %s",
 725                                 (const char*) objectPath.toString().getCString()));
 726 kumpf          1.1      
 727 kumpf          1.3          QueryExpression qx(request->queryLanguage,request->query);
 728 kumpf          1.1      
 729 kumpf          1.3          OperationContext providerContext(
 730                                 _createProviderOperationContext(request->operationContext));
 731 kumpf          1.1      
 732 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 733 kumpf          1.1      
 734 kumpf          1.3          CIMInstanceQueryProvider* provider =
 735                                 getProviderInterface<CIMInstanceQueryProvider>(_provider);
 736 kumpf          1.1      
 737 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 738 kumpf          1.1      
 739 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 740                                 execQuery,
 741 kumpf          1.1              provider->execQuery(
 742 kumpf          1.3                  providerContext,
 743 kumpf          1.1                  objectPath,
 744                                     qx,
 745 kumpf          1.3                  handler),
 746 dmitry.mikulin 1.11             handler);
 747 kumpf          1.1      
 748                             PEG_METHOD_EXIT();
 749 kumpf          1.3          return response.release();
 750 kumpf          1.1      }
 751                         
 752                         CIMResponseMessage* ProviderMessageHandler::_handleAssociatorsRequest(
 753                             CIMRequestMessage* message)
 754                         {
 755                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 756                                 "ProviderMessageHandler::_handleAssociatorsRequest");
 757                         
 758                             CIMAssociatorsRequestMessage* request =
 759                                 dynamic_cast<CIMAssociatorsRequestMessage*>(message);
 760                             PEGASUS_ASSERT(request != 0);
 761                         
 762 kumpf          1.3          AutoPtr<CIMAssociatorsResponseMessage> response(
 763 kumpf          1.1              dynamic_cast<CIMAssociatorsResponseMessage*>(
 764 kumpf          1.3                  request->buildResponse()));
 765                             PEGASUS_ASSERT(response.get() != 0);
 766 kumpf          1.1      
 767                             // create a handler for this request
 768                             AssociatorsResponseHandler handler(
 769 kumpf          1.3              request, response.get(), _responseChunkCallback);
 770 kumpf          1.1      
 771 kumpf          1.3          // make target object path
 772                             CIMObjectPath objectPath(
 773                                 System::getHostName(),
 774                                 request->nameSpace,
 775                                 request->objectName.getClassName());
 776 kumpf          1.1      
 777 kumpf          1.3          objectPath.setKeyBindings(request->objectName.getKeyBindings());
 778 kumpf          1.1      
 779 marek          1.13         PEG_TRACE((
 780                                 TRC_PROVIDERMANAGER,
 781                                 Tracer::LEVEL3,
 782 kumpf          1.3              "ProviderMessageHandler::_handleAssociatorsRequest - "
 783 marek          1.13                 "Object path: %s",
 784                                 (const char*) objectPath.toString().getCString()));
 785 kumpf          1.1      
 786 kumpf          1.3          CIMObjectPath assocPath(
 787                                 System::getHostName(),
 788                                 request->nameSpace,
 789                                 request->assocClass.getString());
 790 kumpf          1.1      
 791 kumpf          1.3          OperationContext providerContext(
 792                                 _createProviderOperationContext(request->operationContext));
 793 kumpf          1.1      
 794 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 795 kumpf          1.1      
 796 kumpf          1.3          CIMAssociationProvider* provider =
 797                                 getProviderInterface<CIMAssociationProvider>(_provider);
 798 kumpf          1.1      
 799 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 800 kumpf          1.1      
 801 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 802                                 associators,
 803 kumpf          1.1              provider->associators(
 804 kumpf          1.3                  providerContext,
 805 kumpf          1.1                  objectPath,
 806                                     request->assocClass,
 807                                     request->resultClass,
 808                                     request->role,
 809                                     request->resultRole,
 810                                     request->includeQualifiers,
 811                                     request->includeClassOrigin,
 812                                     request->propertyList,
 813 kumpf          1.3                  handler),
 814 dmitry.mikulin 1.11             handler);
 815 kumpf          1.1      
 816                             PEG_METHOD_EXIT();
 817 kumpf          1.3          return response.release();
 818 kumpf          1.1      }
 819                         
 820                         CIMResponseMessage* ProviderMessageHandler::_handleAssociatorNamesRequest(
 821                             CIMRequestMessage* message)
 822                         {
 823                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 824                                 "ProviderMessageHandler::_handleAssociatorNamesRequest");
 825                         
 826                             CIMAssociatorNamesRequestMessage* request =
 827                                 dynamic_cast<CIMAssociatorNamesRequestMessage*>(message);
 828                             PEGASUS_ASSERT(request != 0);
 829                         
 830 kumpf          1.3          AutoPtr<CIMAssociatorNamesResponseMessage> response(
 831 kumpf          1.1              dynamic_cast<CIMAssociatorNamesResponseMessage*>(
 832 kumpf          1.3                  request->buildResponse()));
 833                             PEGASUS_ASSERT(response.get() != 0);
 834 kumpf          1.1      
 835                             // create a handler for this request
 836                             AssociatorNamesResponseHandler handler(
 837 kumpf          1.3              request, response.get(), _responseChunkCallback);
 838 kumpf          1.1      
 839 kumpf          1.3          // make target object path
 840                             CIMObjectPath objectPath(
 841                                 System::getHostName(),
 842                                 request->nameSpace,
 843                                 request->objectName.getClassName());
 844 kumpf          1.1      
 845 kumpf          1.3          objectPath.setKeyBindings(request->objectName.getKeyBindings());
 846 kumpf          1.1      
 847 marek          1.13         PEG_TRACE((
 848                                 TRC_PROVIDERMANAGER,
 849                                 Tracer::LEVEL3,
 850 kumpf          1.3              "ProviderMessageHandler::_handleAssociationNamesRequest - "
 851 marek          1.13                 "Object path: %s",
 852                                 (const char*) objectPath.toString().getCString()));
 853 kumpf          1.1      
 854 kumpf          1.3          CIMObjectPath assocPath(
 855                                 System::getHostName(),
 856                                 request->nameSpace,
 857                                 request->assocClass.getString());
 858 kumpf          1.1      
 859 kumpf          1.3          OperationContext providerContext(
 860                                 _createProviderOperationContext(request->operationContext));
 861 kumpf          1.1      
 862 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 863 kumpf          1.1      
 864 kumpf          1.3          CIMAssociationProvider* provider =
 865                                 getProviderInterface<CIMAssociationProvider>(_provider);
 866 kumpf          1.1      
 867 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 868 kumpf          1.1      
 869 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 870                                 associatorNames,
 871 kumpf          1.1              provider->associatorNames(
 872 kumpf          1.3                  providerContext,
 873 kumpf          1.1                  objectPath,
 874                                     request->assocClass,
 875                                     request->resultClass,
 876                                     request->role,
 877                                     request->resultRole,
 878 kumpf          1.3                  handler),
 879 dmitry.mikulin 1.11             handler);
 880 kumpf          1.1      
 881                             PEG_METHOD_EXIT();
 882 kumpf          1.3          return response.release();
 883 kumpf          1.1      }
 884                         
 885                         CIMResponseMessage* ProviderMessageHandler::_handleReferencesRequest(
 886                             CIMRequestMessage* message)
 887                         {
 888                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 889                                 "ProviderMessageHandler::_handleReferencesRequest");
 890                         
 891                             CIMReferencesRequestMessage* request =
 892                                 dynamic_cast<CIMReferencesRequestMessage*>(message);
 893                             PEGASUS_ASSERT(request != 0);
 894                         
 895 kumpf          1.3          AutoPtr<CIMReferencesResponseMessage> response(
 896 kumpf          1.1              dynamic_cast<CIMReferencesResponseMessage*>(
 897 kumpf          1.3                  request->buildResponse()));
 898                             PEGASUS_ASSERT(response.get() != 0);
 899 kumpf          1.1      
 900                             // create a handler for this request
 901                             ReferencesResponseHandler handler(
 902 kumpf          1.3              request, response.get(), _responseChunkCallback);
 903 kumpf          1.1      
 904 kumpf          1.3          // make target object path
 905                             CIMObjectPath objectPath(
 906                                 System::getHostName(),
 907                                 request->nameSpace,
 908                                 request->objectName.getClassName());
 909 kumpf          1.1      
 910 kumpf          1.3          objectPath.setKeyBindings(request->objectName.getKeyBindings());
 911 kumpf          1.1      
 912 marek          1.13         PEG_TRACE((
 913                                 TRC_PROVIDERMANAGER,
 914                                 Tracer::LEVEL3,
 915 kumpf          1.3              "ProviderMessageHandler::_handleReferencesRequest - "
 916 marek          1.13                 "Object path: %s",
 917                                 (const char*) objectPath.toString().getCString()));
 918 kumpf          1.1      
 919 kumpf          1.3          CIMObjectPath resultPath(
 920                                 System::getHostName(),
 921                                 request->nameSpace,
 922                                 request->resultClass.getString());
 923 kumpf          1.1      
 924 kumpf          1.3          OperationContext providerContext(
 925                                 _createProviderOperationContext(request->operationContext));
 926 kumpf          1.1      
 927 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 928 kumpf          1.1      
 929 kumpf          1.3          CIMAssociationProvider* provider =
 930                                 getProviderInterface<CIMAssociationProvider>(_provider);
 931 kumpf          1.1      
 932 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
 933 kumpf          1.1      
 934 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
 935                                 references,
 936 kumpf          1.1              provider->references(
 937 kumpf          1.3                  providerContext,
 938 kumpf          1.1                  objectPath,
 939                                     request->resultClass,
 940                                     request->role,
 941                                     request->includeQualifiers,
 942                                     request->includeClassOrigin,
 943                                     request->propertyList,
 944 kumpf          1.3                  handler),
 945 dmitry.mikulin 1.11             handler);
 946 kumpf          1.1      
 947                             PEG_METHOD_EXIT();
 948 kumpf          1.3          return response.release();
 949 kumpf          1.1      }
 950                         
 951                         CIMResponseMessage* ProviderMessageHandler::_handleReferenceNamesRequest(
 952                             CIMRequestMessage* message)
 953                         {
 954                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 955                                 "ProviderMessageHandler::_handleReferenceNamesRequest");
 956                         
 957                             CIMReferenceNamesRequestMessage* request =
 958                                 dynamic_cast<CIMReferenceNamesRequestMessage*>(message);
 959                             PEGASUS_ASSERT(request != 0);
 960                         
 961 kumpf          1.3          AutoPtr<CIMReferenceNamesResponseMessage> response(
 962 kumpf          1.1              dynamic_cast<CIMReferenceNamesResponseMessage*>(
 963 kumpf          1.3                  request->buildResponse()));
 964                             PEGASUS_ASSERT(response.get() != 0);
 965 kumpf          1.1      
 966                             // create a handler for this request
 967                             ReferenceNamesResponseHandler handler(
 968 kumpf          1.3              request, response.get(), _responseChunkCallback);
 969 kumpf          1.1      
 970 kumpf          1.3          // make target object path
 971                             CIMObjectPath objectPath(
 972                                 System::getHostName(),
 973                                 request->nameSpace,
 974                                 request->objectName.getClassName());
 975 kumpf          1.1      
 976 kumpf          1.3          objectPath.setKeyBindings(request->objectName.getKeyBindings());
 977 kumpf          1.1      
 978 marek          1.13         PEG_TRACE((
 979                                 TRC_PROVIDERMANAGER,
 980                                 Tracer::LEVEL3,
 981 kumpf          1.3              "ProviderMessageHandler::_handleReferenceNamesRequest - "
 982 marek          1.13                 "Object path: %s",
 983                                 (const char*) objectPath.toString().getCString()));
 984 kumpf          1.1      
 985 karl           1.25.4.1     // KS_TODO Confirm that the following is cruft and not needed.
 986                         //    CIMObjectPath resultPath(
 987                         //       System::getHostName(),
 988                         //        request->nameSpace,
 989                         //        request->resultClass.getString());
 990 kumpf          1.1      
 991 kumpf          1.3          OperationContext providerContext(
 992                                 _createProviderOperationContext(request->operationContext));
 993 kumpf          1.1      
 994 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 995 kumpf          1.1      
 996 kumpf          1.3          CIMAssociationProvider* provider =
 997                                 getProviderInterface<CIMAssociationProvider>(_provider);
 998 kumpf          1.1      
 999 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1000 kumpf          1.1      
1001 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1002                                 referenceNames,
1003 kumpf          1.1              provider->referenceNames(
1004 kumpf          1.3                  providerContext,
1005 kumpf          1.1                  objectPath,
1006                                     request->resultClass,
1007                                     request->role,
1008 kumpf          1.3                  handler),
1009 dmitry.mikulin 1.11             handler);
1010 kumpf          1.1      
1011                             PEG_METHOD_EXIT();
1012 kumpf          1.3          return response.release();
1013 kumpf          1.1      }
1014                         
1015                         CIMResponseMessage* ProviderMessageHandler::_handleGetPropertyRequest(
1016                             CIMRequestMessage* message)
1017                         {
1018                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1019                                 "ProviderMessageHandler::_handleGetPropertyRequest");
1020                         
1021                             CIMGetPropertyRequestMessage* request =
1022                                 dynamic_cast<CIMGetPropertyRequestMessage*>(message);
1023                             PEGASUS_ASSERT(request != 0);
1024                         
1025 kumpf          1.3          AutoPtr<CIMGetPropertyResponseMessage> response(
1026 kumpf          1.1              dynamic_cast<CIMGetPropertyResponseMessage*>(
1027 kumpf          1.3                  request->buildResponse()));
1028                             PEGASUS_ASSERT(response.get() != 0);
1029                         
1030                             //
1031                             // Translate the GetProperty request to a GetInstance request message
1032                             //
1033                         
1034                             Array<CIMName> propertyList;
1035                             propertyList.append(request->propertyName);
1036                         
1037                             CIMGetInstanceRequestMessage getInstanceRequest(
1038                                 request->messageId,
1039                                 request->nameSpace,
1040                                 request->instanceName,
1041                                 false,  // includeQualifiers
1042                                 false,  // includeClassOrigin
1043                                 propertyList,
1044                                 request->queueIds);
1045 kumpf          1.1      
1046 kumpf          1.3          getInstanceRequest.operationContext = request->operationContext;
1047                         
1048                             AutoPtr<CIMGetInstanceResponseMessage> getInstanceResponse(
1049                                 dynamic_cast<CIMGetInstanceResponseMessage*>(
1050                                     getInstanceRequest.buildResponse()));
1051                             PEGASUS_ASSERT(getInstanceResponse.get() != 0);
1052 kumpf          1.1      
1053 kumpf          1.3          //
1054                             // Process the GetInstance operation
1055                             //
1056 kumpf          1.1      
1057 kumpf          1.3          // create a handler for this request (with chunking disabled)
1058                             GetInstanceResponseHandler handler(
1059                                 &getInstanceRequest, getInstanceResponse.get(), 0);
1060 kumpf          1.1      
1061 kumpf          1.3          // make target object path
1062                             CIMObjectPath objectPath(
1063                                 System::getHostName(),
1064                                 getInstanceRequest.nameSpace,
1065                                 getInstanceRequest.instanceName.getClassName(),
1066                                 getInstanceRequest.instanceName.getKeyBindings());
1067 kumpf          1.1      
1068 marek          1.13         PEG_TRACE((
1069                                 TRC_PROVIDERMANAGER,
1070                                 Tracer::LEVEL3,
1071 kumpf          1.3              "ProviderMessageHandler::_handleGetPropertyRequest - "
1072 marek          1.13                 "Object path: %s, Property: %s",
1073                                 (const char*) objectPath.toString().getCString(),
1074                                 (const char*) request->propertyName.getString().getCString()));
1075 kumpf          1.1      
1076 kumpf          1.3          OperationContext providerContext(
1077                                 _createProviderOperationContext(getInstanceRequest.operationContext));
1078 kumpf          1.1      
1079 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1080 kumpf          1.1      
1081 kumpf          1.3          CIMInstanceProvider* provider =
1082                                 getProviderInterface<CIMInstanceProvider>(_provider);
1083 kumpf          1.1      
1084 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1085 kumpf          1.1      
1086 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1087                                 getInstance,
1088 kumpf          1.1              provider->getInstance(
1089 kumpf          1.3                  providerContext,
1090 kumpf          1.1                  objectPath,
1091 kumpf          1.3                  getInstanceRequest.includeQualifiers,
1092                                     getInstanceRequest.includeClassOrigin,
1093                                     getInstanceRequest.propertyList,
1094                                     handler),
1095 dmitry.mikulin 1.11             handler);
1096 kumpf          1.1      
1097 kumpf          1.3          //
1098                             // Copy the GetInstance response into the GetProperty response message
1099                             //
1100                         
1101                             response->cimException = getInstanceResponse->cimException;
1102                         
1103                             if (response->cimException.getCode() == CIM_ERR_SUCCESS)
1104                             {
1105 r.kieninger    1.24             CIMInstance instance = 
1106 thilo.boehm    1.25                 getInstanceResponse->getResponseData().getInstance();
1107 kumpf          1.1      
1108 kumpf          1.3              Uint32 pos = instance.findProperty(request->propertyName);
1109 kumpf          1.1      
1110 kumpf          1.3              if (pos != PEG_NOT_FOUND)
1111                                 {
1112                                     response->value = instance.getProperty(pos).getValue();
1113                                 }
1114                                 else    // Property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
1115                                 {
1116                                     response->cimException = PEGASUS_CIM_EXCEPTION(
1117                                         CIM_ERR_NO_SUCH_PROPERTY,
1118                                         request->propertyName.getString());
1119 kumpf          1.1              }
1120 kumpf          1.3          }
1121 kumpf          1.1      
1122 kumpf          1.3          response->operationContext = getInstanceResponse->operationContext;
1123 kumpf          1.1      
1124                             PEG_METHOD_EXIT();
1125 kumpf          1.3          return response.release();
1126 kumpf          1.1      }
1127                         
1128                         CIMResponseMessage* ProviderMessageHandler::_handleSetPropertyRequest(
1129                             CIMRequestMessage* message)
1130                         {
1131                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1132                                 "ProviderMessageHandler::_handleSetPropertyRequest");
1133                         
1134                             CIMSetPropertyRequestMessage* request =
1135                                 dynamic_cast<CIMSetPropertyRequestMessage*>(message);
1136                             PEGASUS_ASSERT(request != 0);
1137                         
1138 kumpf          1.3          AutoPtr<CIMSetPropertyResponseMessage> response(
1139 kumpf          1.1              dynamic_cast<CIMSetPropertyResponseMessage*>(
1140 kumpf          1.3                  request->buildResponse()));
1141                             PEGASUS_ASSERT(response.get() != 0);
1142 kumpf          1.1      
1143 kumpf          1.3          //
1144                             // Translate the SetProperty request to a ModifyInstance request message
1145                             //
1146                         
1147                             // make target object path
1148                             CIMObjectPath objectPath(
1149                                 System::getHostName(),
1150                                 request->nameSpace,
1151                                 request->instanceName.getClassName(),
1152                                 request->instanceName.getKeyBindings());
1153                         
1154                             CIMInstance instance(request->instanceName.getClassName());
1155                             instance.addProperty(CIMProperty(
1156                                 request->propertyName, request->newValue));
1157                             instance.setPath(objectPath);
1158                         
1159                             Array<CIMName> propertyList;
1160                             propertyList.append(request->propertyName);
1161                         
1162                             CIMModifyInstanceRequestMessage modifyInstanceRequest(
1163                                 request->messageId,
1164 kumpf          1.3              request->nameSpace,
1165                                 instance,
1166                                 false,  // includeQualifiers
1167                                 propertyList,
1168                                 request->queueIds);
1169 kumpf          1.1      
1170 kumpf          1.3          modifyInstanceRequest.operationContext = request->operationContext;
1171 kumpf          1.1      
1172 kumpf          1.3          AutoPtr<CIMModifyInstanceResponseMessage> modifyInstanceResponse(
1173                                 dynamic_cast<CIMModifyInstanceResponseMessage*>(
1174                                     modifyInstanceRequest.buildResponse()));
1175                             PEGASUS_ASSERT(modifyInstanceResponse.get() != 0);
1176 kumpf          1.1      
1177 kumpf          1.3          //
1178                             // Process the ModifyInstance operation
1179                             //
1180 kumpf          1.1      
1181 kumpf          1.3          // create a handler for this request (with chunking disabled)
1182                             ModifyInstanceResponseHandler handler(
1183                                 &modifyInstanceRequest, modifyInstanceResponse.get(), 0);
1184 kumpf          1.1      
1185 marek          1.13         PEG_TRACE((
1186                                 TRC_PROVIDERMANAGER,
1187                                 Tracer::LEVEL3,
1188 kumpf          1.3              "ProviderMessageHandler::_handleSetPropertyRequest - "
1189 marek          1.13                 "Object path: %s, Property: %s",
1190                                 (const char*) objectPath.toString().getCString(),
1191                                 (const char*) request->propertyName.getString().getCString()));
1192 kumpf          1.1      
1193 kumpf          1.3          OperationContext providerContext(
1194                                 _createProviderOperationContext(request->operationContext));
1195 kumpf          1.1      
1196 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1197 kumpf          1.1      
1198 kumpf          1.3          CIMInstanceProvider* provider =
1199                                 getProviderInterface<CIMInstanceProvider>(_provider);
1200 kumpf          1.1      
1201 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1202 kumpf          1.1      
1203 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1204                                 modifyInstance,
1205 kumpf          1.1              provider->modifyInstance(
1206 kumpf          1.3                  providerContext,
1207 kumpf          1.1                  objectPath,
1208 kumpf          1.3                  modifyInstanceRequest.modifiedInstance,
1209                                     modifyInstanceRequest.includeQualifiers,
1210                                     modifyInstanceRequest.propertyList,
1211                                     handler),
1212 dmitry.mikulin 1.11             handler);
1213 kumpf          1.3      
1214                             //
1215                             // Copy the ModifyInstance response into the GetProperty response message
1216                             //
1217 kumpf          1.1      
1218 kumpf          1.3          response->cimException = modifyInstanceResponse->cimException;
1219                             response->operationContext = modifyInstanceResponse->operationContext;
1220 kumpf          1.1      
1221                             PEG_METHOD_EXIT();
1222 kumpf          1.3          return response.release();
1223 kumpf          1.1      }
1224                         
1225                         CIMResponseMessage* ProviderMessageHandler::_handleInvokeMethodRequest(
1226                             CIMRequestMessage* message)
1227                         {
1228                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1229                                 "ProviderMessageHandler::_handleInvokeMethodRequest");
1230                         
1231                             CIMInvokeMethodRequestMessage* request =
1232                                 dynamic_cast<CIMInvokeMethodRequestMessage*>(message);
1233                             PEGASUS_ASSERT(request != 0);
1234                         
1235 kumpf          1.3          AutoPtr<CIMInvokeMethodResponseMessage> response(
1236 kumpf          1.1              dynamic_cast<CIMInvokeMethodResponseMessage*>(
1237 kumpf          1.3                  request->buildResponse()));
1238                             PEGASUS_ASSERT(response.get() != 0);
1239 kumpf          1.1      
1240                             // create a handler for this request
1241                             InvokeMethodResponseHandler handler(
1242 kumpf          1.3              request, response.get(), _responseChunkCallback);
1243 kumpf          1.1      
1244 kumpf          1.3          // make target object path
1245                             CIMObjectPath objectPath(
1246                                 System::getHostName(),
1247                                 request->nameSpace,
1248                                 request->instanceName.getClassName(),
1249                                 request->instanceName.getKeyBindings());
1250 kumpf          1.1      
1251 marek          1.13         PEG_TRACE((
1252                                 TRC_PROVIDERMANAGER,
1253                                 Tracer::LEVEL3,
1254 kumpf          1.3              "ProviderMessageHandler::_handleInvokeMethodRequest - "
1255 marek          1.13                 "Object path: %s, Method: %s",
1256                                 (const char*) objectPath.toString().getCString(),
1257                                 (const char*) request->methodName.getString().getCString()));
1258 kumpf          1.21     
1259 kumpf          1.3          OperationContext providerContext(
1260                                 _createProviderOperationContext(request->operationContext));
1261 kumpf          1.1      
1262 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1263 kumpf          1.1      
1264 kumpf          1.3          CIMMethodProvider* provider =
1265                                 getProviderInterface<CIMMethodProvider>(_provider);
1266 kumpf          1.1      
1267 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1268 kumpf          1.1      
1269 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1270                                 invokeMethod,
1271 kumpf          1.1              provider->invokeMethod(
1272 kumpf          1.3                  providerContext,
1273 kumpf          1.7                  objectPath,
1274 kumpf          1.1                  request->methodName,
1275                                     request->inParameters,
1276 kumpf          1.3                  handler),
1277 dmitry.mikulin 1.11             handler);
1278 kumpf          1.1      
1279                             PEG_METHOD_EXIT();
1280 kumpf          1.3          return response.release();
1281 kumpf          1.1      }
1282                         
1283                         CIMResponseMessage* ProviderMessageHandler::_handleCreateSubscriptionRequest(
1284                             CIMRequestMessage* message)
1285                         {
1286                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1287                                 "ProviderMessageHandler::_handleCreateSubscriptionRequest");
1288                         
1289                             CIMCreateSubscriptionRequestMessage* request =
1290                                 dynamic_cast<CIMCreateSubscriptionRequestMessage*>(message);
1291                             PEGASUS_ASSERT(request != 0);
1292                         
1293 kumpf          1.3          AutoPtr<CIMCreateSubscriptionResponseMessage> response(
1294 kumpf          1.1              dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
1295 kumpf          1.3                  request->buildResponse()));
1296                             PEGASUS_ASSERT(response.get() != 0);
1297 kumpf          1.1      
1298                             OperationResponseHandler handler(
1299 kumpf          1.3              request, response.get(), _responseChunkCallback);
1300 kumpf          1.1      
1301 kumpf          1.3          String temp;
1302                         
1303                             for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1304 kumpf          1.1          {
1305 kumpf          1.3              temp.append(request->classNames[i].getString());
1306 kumpf          1.1      
1307 kumpf          1.3              if (i < (n - 1))
1308 kumpf          1.1              {
1309 kumpf          1.3                  temp.append(", ");
1310                                 }
1311                             }
1312                         
1313 marek          1.13         PEG_TRACE((
1314                                 TRC_PROVIDERMANAGER,
1315                                 Tracer::LEVEL3,
1316 kumpf          1.3              "ProviderMessageHandler::_handleCreateSubscriptionRequest - "
1317 marek          1.13                 "Host name: %s  Name space: %s  Class name(s): %s",
1318                                 (const char*) System::getHostName().getCString(),
1319                                 (const char*) request->nameSpace.getString().getCString(),
1320                                 (const char*) temp.getCString()));
1321 kumpf          1.3      
1322                             //
1323                             //  Save the provider instance from the request
1324                             //
1325                             ProviderIdContainer pidc = (ProviderIdContainer)
1326                                 request->operationContext.get(ProviderIdContainer::NAME);
1327                             status.setProviderInstance(pidc.getProvider());
1328                         
1329                             // convert arguments
1330 kumpf          1.1      
1331 kumpf          1.3          Array<CIMObjectPath> classNames;
1332 kumpf          1.1      
1333 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1334                             {
1335                                 CIMObjectPath className(
1336 kumpf          1.1                  System::getHostName(),
1337 kumpf          1.3                  request->nameSpace,
1338                                     request->classNames[i]);
1339 kumpf          1.1      
1340 kumpf          1.3              classNames.append(className);
1341                             }
1342 kumpf          1.1      
1343 kumpf          1.3          OperationContext providerContext(
1344                                 _createProviderOperationContext(request->operationContext));
1345                             providerContext.insert(request->operationContext.get(
1346                                 SubscriptionInstanceContainer::NAME));
1347                             providerContext.insert(request->operationContext.get(
1348                                 SubscriptionFilterConditionContainer::NAME));
1349                             providerContext.insert(request->operationContext.get(
1350                                 SubscriptionFilterQueryContainer::NAME));
1351 kumpf          1.1      
1352 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1353 kumpf          1.1      
1354 kumpf          1.3          CIMIndicationProvider* provider =
1355                                 getProviderInterface<CIMIndicationProvider>(_provider);
1356 kumpf          1.1      
1357 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1358 kumpf          1.1      
1359 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1360                                 createSubscription,
1361 kumpf          1.1              provider->createSubscription(
1362 kumpf          1.3                  providerContext,
1363 kumpf          1.1                  request->subscriptionInstance.getPath(),
1364                                     classNames,
1365                                     request->propertyList,
1366 kumpf          1.3                  request->repeatNotificationPolicy),
1367 dmitry.mikulin 1.11             handler);
1368 kumpf          1.3      
1369                             //
1370                             //  Increment count of current subscriptions for this provider
1371                             //
1372                             if (status.testIfZeroAndIncrementSubscriptions())
1373                             {
1374 marek          1.8              PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1375 kumpf          1.3                  "First accepted subscription");
1376 kumpf          1.1      
1377                                 //
1378 kumpf          1.3              //  If there were no current subscriptions before the increment,
1379                                 //  the first subscription has been created
1380                                 //  Call the provider's enableIndications method
1381 kumpf          1.1              //
1382 kumpf          1.3              if (_subscriptionInitComplete)
1383 kumpf          1.1              {
1384 kumpf          1.3                  _enableIndications();
1385 kumpf          1.1              }
1386                             }
1387                         
1388                             PEG_METHOD_EXIT();
1389 kumpf          1.3          return response.release();
1390 kumpf          1.1      }
1391                         
1392                         CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(
1393                             CIMRequestMessage* message)
1394                         {
1395                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1396                                 "ProviderMessageHandler::_handleModifySubscriptionRequest");
1397                         
1398                             CIMModifySubscriptionRequestMessage* request =
1399                                 dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);
1400                             PEGASUS_ASSERT(request != 0);
1401                         
1402 kumpf          1.3          AutoPtr<CIMModifySubscriptionResponseMessage> response(
1403 kumpf          1.1              dynamic_cast<CIMModifySubscriptionResponseMessage*>(
1404 kumpf          1.3                  request->buildResponse()));
1405                             PEGASUS_ASSERT(response.get() != 0);
1406 kumpf          1.1      
1407                             OperationResponseHandler handler(
1408 kumpf          1.3              request, response.get(), _responseChunkCallback);
1409                         
1410                             String temp;
1411 kumpf          1.1      
1412 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1413 kumpf          1.1          {
1414 kumpf          1.3              temp.append(request->classNames[i].getString());
1415 kumpf          1.1      
1416 kumpf          1.3              if (i < (n - 1))
1417 kumpf          1.1              {
1418 kumpf          1.3                  temp.append(", ");
1419                                 }
1420                             }
1421 kumpf          1.1      
1422 marek          1.13         PEG_TRACE((
1423                                 TRC_PROVIDERMANAGER,
1424                                 Tracer::LEVEL3,
1425                                 "ProviderMessageHandler::_handleModifySubscriptionRequest - "
1426                                     "Host name: %s  Name space: %s  Class name(s): %s",
1427                                 (const char*) System::getHostName().getCString(),
1428                                 (const char*) request->nameSpace.getString().getCString(),
1429                                 (const char*) temp.getCString()));
1430 kumpf          1.21     
1431 kumpf          1.3          // convert arguments
1432                         
1433                             Array<CIMObjectPath> classNames;
1434 kumpf          1.1      
1435 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1436                             {
1437                                 CIMObjectPath className(
1438 kumpf          1.1                  System::getHostName(),
1439 kumpf          1.3                  request->nameSpace,
1440                                     request->classNames[i]);
1441 kumpf          1.1      
1442 kumpf          1.3              classNames.append(className);
1443                             }
1444 kumpf          1.1      
1445 kumpf          1.3          OperationContext providerContext(
1446                                 _createProviderOperationContext(request->operationContext));
1447                             providerContext.insert(request->operationContext.get(
1448                                 SubscriptionInstanceContainer::NAME));
1449                             providerContext.insert(request->operationContext.get(
1450                                 SubscriptionFilterConditionContainer::NAME));
1451                             providerContext.insert(request->operationContext.get(
1452                                 SubscriptionFilterQueryContainer::NAME));
1453 kumpf          1.1      
1454 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1455 kumpf          1.1      
1456 kumpf          1.3          CIMIndicationProvider* provider =
1457                                 getProviderInterface<CIMIndicationProvider>(_provider);
1458 kumpf          1.1      
1459 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1460 kumpf          1.1      
1461 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1462                                 modifySubscription,
1463 kumpf          1.1              provider->modifySubscription(
1464 kumpf          1.3                  providerContext,
1465 kumpf          1.1                  request->subscriptionInstance.getPath(),
1466                                     classNames,
1467                                     request->propertyList,
1468 kumpf          1.3                  request->repeatNotificationPolicy),
1469 dmitry.mikulin 1.11             handler);
1470 kumpf          1.1      
1471                             PEG_METHOD_EXIT();
1472 kumpf          1.3          return response.release();
1473 kumpf          1.1      }
1474                         
1475                         CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(
1476                             CIMRequestMessage* message)
1477                         {
1478                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1479                                 "ProviderMessageHandler::_handleDeleteSubscriptionRequest");
1480                         
1481                             CIMDeleteSubscriptionRequestMessage* request =
1482                                 dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);
1483                             PEGASUS_ASSERT(request != 0);
1484                         
1485 kumpf          1.3          AutoPtr<CIMDeleteSubscriptionResponseMessage> response(
1486 kumpf          1.1              dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
1487 kumpf          1.3                  request->buildResponse()));
1488                             PEGASUS_ASSERT(response.get() != 0);
1489 kumpf          1.1      
1490                             OperationResponseHandler handler(
1491 kumpf          1.3              request, response.get(), _responseChunkCallback);
1492                         
1493                             String temp;
1494 kumpf          1.1      
1495 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1496 kumpf          1.1          {
1497 kumpf          1.3              temp.append(request->classNames[i].getString());
1498 kumpf          1.1      
1499 kumpf          1.3              if (i < (n - 1))
1500 kumpf          1.1              {
1501 kumpf          1.3                  temp.append(", ");
1502 kumpf          1.1              }
1503 kumpf          1.3          }
1504 kumpf          1.1      
1505 marek          1.13         PEG_TRACE((
1506                                 TRC_PROVIDERMANAGER,
1507                                 Tracer::LEVEL3,
1508 kumpf          1.3              "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "
1509 marek          1.13                 "Host name: %s  Name space: %s  Class name(s): %s",
1510                                 (const char*) System::getHostName().getCString(),
1511                                 (const char*) request->nameSpace.getString().getCString(),
1512                                 (const char*) temp.getCString()));
1513 kumpf          1.21     
1514 kumpf          1.3          Array<CIMObjectPath> classNames;
1515 kumpf          1.1      
1516 kumpf          1.3          for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1517                             {
1518                                 CIMObjectPath className(
1519                                     System::getHostName(),
1520                                     request->nameSpace,
1521                                     request->classNames[i]);
1522 kumpf          1.1      
1523 kumpf          1.3              classNames.append(className);
1524                             }
1525 kumpf          1.1      
1526 kumpf          1.3          OperationContext providerContext(
1527                                 _createProviderOperationContext(request->operationContext));
1528                             providerContext.insert(request->operationContext.get(
1529                                 SubscriptionInstanceContainer::NAME));
1530 kumpf          1.1      
1531 r.kieninger    1.12         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1532 kumpf          1.1      
1533 kumpf          1.3          CIMIndicationProvider* provider =
1534                                 getProviderInterface<CIMIndicationProvider>(_provider);
1535 kumpf          1.1      
1536 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1537 kumpf          1.1      
1538 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1539                                 deleteSubscription,
1540 kumpf          1.1              provider->deleteSubscription(
1541 kumpf          1.3                  providerContext,
1542 kumpf          1.1                  request->subscriptionInstance.getPath(),
1543 kumpf          1.3                  classNames),
1544 dmitry.mikulin 1.11             handler);
1545 kumpf          1.1      
1546 kumpf          1.3          //
1547                             //  Decrement count of current subscriptions for this provider
1548                             //
1549                             if (status.decrementSubscriptionsAndTestIfZero())
1550                             {
1551 kumpf          1.1              //
1552 kumpf          1.3              //  If there are no current subscriptions after the decrement,
1553                                 //  the last subscription has been deleted
1554                                 //  Call the provider's disableIndications method
1555 kumpf          1.1              //
1556 kumpf          1.3              if (_subscriptionInitComplete)
1557 kumpf          1.1              {
1558 kumpf          1.3                  _disableIndications();
1559 kumpf          1.1              }
1560                             }
1561                         
1562                             PEG_METHOD_EXIT();
1563 kumpf          1.3          return response.release();
1564 kumpf          1.1      }
1565                         
1566                         CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(
1567                             CIMRequestMessage* message)
1568                         {
1569                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1570                                 "ProviderMessageHandler::_handleExportIndicationRequest");
1571                         
1572                             CIMExportIndicationRequestMessage* request =
1573                                 dynamic_cast<CIMExportIndicationRequestMessage*>(message);
1574                             PEGASUS_ASSERT(request != 0);
1575                         
1576 kumpf          1.3          AutoPtr<CIMExportIndicationResponseMessage> response(
1577 kumpf          1.1              dynamic_cast<CIMExportIndicationResponseMessage*>(
1578 kumpf          1.3                  request->buildResponse()));
1579                             PEGASUS_ASSERT(response.get() != 0);
1580 kumpf          1.1      
1581                             OperationResponseHandler handler(
1582 kumpf          1.3              request, response.get(), _responseChunkCallback);
1583 kumpf          1.1      
1584 kumpf          1.3          // NOTE: Accept-Languages do not need to be set in the consume msg.
1585                             OperationContext providerContext;
1586                             providerContext.insert(request->operationContext.get(
1587                                 IdentityContainer::NAME));
1588 kumpf          1.1      //L10N_TODO
1589                         // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent.  This
1590                         // does not appear to be hooked up.  When it is added, need to
1591                         // make sure that Content-Language is set in the consume msg.
1592 kumpf          1.3          providerContext.insert(request->operationContext.get(
1593                                 ContentLanguageListContainer::NAME));
1594 kumpf          1.1      
1595 kumpf          1.3          CIMIndicationConsumerProvider* provider =
1596                                 getProviderInterface<CIMIndicationConsumerProvider>(_provider);
1597 kumpf          1.1      
1598 kumpf          1.3          StatProviderTimeMeasurement providerTime(response.get());
1599 kumpf          1.1      
1600 dmitry.mikulin 1.11         HANDLE_PROVIDER_CALL(
1601                                 consumeIndication,
1602 kumpf          1.1              provider->consumeIndication(
1603 kumpf          1.3                  providerContext,
1604 kumpf          1.1                  request->destinationPath,
1605 kumpf          1.3                  request->indicationInstance),
1606 dmitry.mikulin 1.11             handler);
1607 kumpf          1.1      
1608                             PEG_METHOD_EXIT();
1609 kumpf          1.3          return response.release();
1610 kumpf          1.1      }
1611                         
1612                         void ProviderMessageHandler::_enableIndications()
1613                         {
1614                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1615                                 "DefaultProviderManager::_enableIndications");
1616                         
1617                             try
1618                             {
1619                                 EnableIndicationsResponseHandler* indicationResponseHandler =
1620                                     new EnableIndicationsResponseHandler(
1621                                         0,    // request
1622                                         0,    // response
1623                                         status.getProviderInstance(),
1624                                         _indicationCallback,
1625                                         _responseChunkCallback);
1626                         
1627 kumpf          1.3              _indicationResponseHandler = indicationResponseHandler;
1628 kumpf          1.1      
1629 kumpf          1.2              status.setIndicationsEnabled(true);
1630 kumpf          1.1      
1631                                 CIMIndicationProvider* provider =
1632                                     getProviderInterface<CIMIndicationProvider>(_provider);
1633                         
1634 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1635                                     "Calling provider.enableIndications: %s",
1636                                     (const char*)_fullyQualifiedProviderName.getCString()));
1637                         
1638                                 try
1639                                 {
1640                                     provider->enableIndications(*indicationResponseHandler);
1641                                 }
1642                                 catch (...)
1643                                 {
1644 marek          1.15                 PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL1,
1645 dmitry.mikulin 1.11                     "Caught exception from provider %s "
1646                                             "enableIndications() method.",
1647                                         (const char*)_fullyQualifiedProviderName.getCString()));
1648                                     throw;
1649                                 }
1650 kumpf          1.3      
1651 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1652                                     "Returned from provider.enableIndications: %s",
1653                                     (const char*)_fullyQualifiedProviderName.getCString()));
1654 kumpf          1.1          }
1655                             catch (Exception& e)
1656                             {
1657 kumpf          1.3              Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1658 kumpf          1.16                 MessageLoaderParms(
1659                                         "ProviderManager.Default.DefaultProviderManager."
1660                                             "ENABLE_INDICATIONS_FAILED",
1661                                         "Failed to enable indications for provider $0: $1.",
1662                                          _fullyQualifiedProviderName, e.getMessage()));
1663 kumpf          1.1          }
1664                             catch(...)
1665                             {
1666 kumpf          1.3              Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
1667 kumpf          1.16                 MessageLoaderParms(
1668                                         "ProviderManager.Default.DefaultProviderManager."
1669                                             "ENABLE_INDICATIONS_FAILED_UNKNOWN",
1670                                         "Failed to enable indications for provider $0.",
1671                                         _fullyQualifiedProviderName));
1672 kumpf          1.1          }
1673                         
1674                             PEG_METHOD_EXIT();
1675                         }
1676                         
1677                         void ProviderMessageHandler::_disableIndications()
1678                         {
1679                             PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1680                                 "DefaultProviderManager::_disableIndications");
1681                         
1682                             try
1683                             {
1684 kumpf          1.2              if (status.getIndicationsEnabled())
1685 kumpf          1.1              {
1686                                     CIMIndicationProvider* provider =
1687                                         getProviderInterface<CIMIndicationProvider>(_provider);
1688                         
1689 dmitry.mikulin 1.11                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1690                                         "Calling provider.disableIndications: %s",
1691                                         (const char*)_fullyQualifiedProviderName.getCString()));
1692 kumpf          1.3      
1693 kumpf          1.2                  try
1694                                     {
1695                                         provider->disableIndications();
1696                                     }
1697                                     catch (...)
1698                                     {
1699 marek          1.15                     PEG_TRACE((TRC_DISCARDED_DATA, Tracer::LEVEL1,
1700 dmitry.mikulin 1.11                         "Caught exception from provider %s "
1701                                                 "disableIndications() method.",
1702                                             (const char*)_fullyQualifiedProviderName.getCString()));
1703                                         throw;
1704 kumpf          1.2                  }
1705 kumpf          1.1      
1706 dmitry.mikulin 1.11                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1707                                         "Returned from  provider.disableIndications: %s",
1708                                         (const char*)_fullyQualifiedProviderName.getCString()));
1709                         
1710 kumpf          1.2                  status.setIndicationsEnabled(false);
1711 kumpf          1.1      
1712                                     status.resetSubscriptions();
1713                         
1714 dmitry.mikulin 1.11                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1715                                         "Destroying indication response handler for %s",
1716                                         (const char*)_fullyQualifiedProviderName.getCString()));
1717 kumpf          1.1      
1718                                     delete _indicationResponseHandler;
1719                                     _indicationResponseHandler = 0;
1720                                 }
1721                             }
1722                             catch(...)
1723                             {
1724 dmitry.mikulin 1.11             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1725                                     "Error occured disabling indications in provider %s",
1726                                     (const char*)_fullyQualifiedProviderName.getCString()));
1727 kumpf          1.1          }
1728 dmitry.mikulin 1.11         PEG_METHOD_EXIT();
1729 kumpf          1.1      }
1730                         PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2