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

   1 karl  1.59 //%2006////////////////////////////////////////////////////////////////////////
   2 chip  1.1  //
   3 karl  1.43 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6 karl  1.7  // IBM Corp.; EMC Corporation, The Open Group.
   7 karl  1.43 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9 karl  1.47 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11 karl  1.59 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12            // EMC Corporation; Symantec Corporation; The Open Group.
  13 chip  1.1  //
  14            // Permission is hereby granted, free of charge, to any person obtaining a copy
  15            // of this software and associated documentation files (the "Software"), to
  16            // deal in the Software without restriction, including without limitation the
  17            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18            // sell copies of the Software, and to permit persons to whom the Software is
  19            // furnished to do so, subject to the following conditions:
  20 karl  1.43 // 
  21 chip  1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29            //
  30            //==============================================================================
  31            //
  32            //%/////////////////////////////////////////////////////////////////////////////
  33            
  34            #include "DefaultProviderManager.h"
  35            
  36            #include <Pegasus/Common/CIMMessage.h>
  37            #include <Pegasus/Common/OperationContext.h>
  38            #include <Pegasus/Common/Tracer.h>
  39            #include <Pegasus/Common/StatisticalData.h>
  40            #include <Pegasus/Common/Logger.h>
  41            #include <Pegasus/Common/MessageLoader.h> //l10n
  42 kumpf 1.38 #include <Pegasus/Common/Constants.h>
  43 chip  1.1  
  44 chuck 1.44 #include <Pegasus/Query/QueryExpression/QueryExpression.h>
  45 schuur 1.12 #include <Pegasus/ProviderManager2/QueryExpressionFactory.h>
  46             
  47 kumpf  1.70 #include <Pegasus/ProviderManager2/Default/ProviderFacade.h>
  48 schuur 1.21 #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
  49 kumpf  1.67 #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
  50 chip   1.1  
  51 a.dunfey 1.58 #define HandleCatch(handler)                                                   \
  52               catch(CIMException & e)                                                        \
  53               {                                                                              \
  54                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                      \
  55                                    "Exception: " + e.getMessage());                          \
  56                   handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage());   \
  57               }                                                                              \
  58                   catch(Exception & e)                                                       \
  59               {                                                                              \
  60                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                      \
  61                                    "Exception: " + e.getMessage());                          \
  62                   handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage());\
  63               }                                                                              \
  64                   catch(...)                                                                 \
  65               {                                                                              \
  66                   PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                      \
  67                                    "Exception: Unknown");                                    \
  68                   handler.setStatus(CIM_ERR_FAILED, "Unknown error.");                       \
  69 kumpf    1.66 }
  70 a.dunfey 1.58 
  71               
  72 chip     1.1  PEGASUS_NAMESPACE_BEGIN
  73               
  74               // auto variable to protect provider during operations
  75               class pm_service_op_lock
  76               {
  77               public:
  78 kumpf    1.70     pm_service_op_lock(ProviderStatus *providerStatus)
  79                   : _providerStatus(providerStatus)
  80 chip     1.1      {
  81 kumpf    1.70         _providerStatus->protect();
  82 chip     1.1      }
  83               
  84 kumpf    1.70     ~pm_service_op_lock()
  85 chip     1.1      {
  86 kumpf    1.70         _providerStatus->unprotect();
  87 chip     1.1      }
  88               
  89 kumpf    1.70 private:
  90                   pm_service_op_lock();
  91                   pm_service_op_lock(const pm_service_op_lock&);
  92                   pm_service_op_lock& operator=(const pm_service_op_lock&);
  93               
  94                   ProviderStatus* _providerStatus;
  95 chip     1.1  };
  96               
  97               //
  98 kumpf    1.31 // Default Provider Manager
  99               //
 100 chip     1.1  DefaultProviderManager::DefaultProviderManager(void)
 101               {
 102 carolann.graves 1.49     _subscriptionInitComplete = false;
 103 chip            1.1  }
 104                      
 105                      DefaultProviderManager::~DefaultProviderManager(void)
 106                      {
 107                      }
 108                      
 109 dj.gorey        1.25 Message * DefaultProviderManager::processMessage(Message * request)
 110 chip            1.1  {
 111                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 112                              "DefaultProviderManager::processMessage()");
 113                      
 114                          Message * response = 0;
 115                      
 116                          // pass the request message to a handler method based on message type
 117                          switch(request->getType())
 118                          {
 119                          case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 120 dj.gorey        1.25         response = handleGetInstanceRequest(request);
 121 chip            1.1  
 122                              break;
 123                          case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 124 dj.gorey        1.25         response = handleEnumerateInstancesRequest(request);
 125 chip            1.1  
 126                              break;
 127                          case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 128 dj.gorey        1.25         response = handleEnumerateInstanceNamesRequest(request);
 129 chip            1.1  
 130                              break;
 131                          case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 132 dj.gorey        1.25         response = handleCreateInstanceRequest(request);
 133 chip            1.1  
 134                              break;
 135                          case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 136 dj.gorey        1.25         response = handleModifyInstanceRequest(request);
 137 chip            1.1  
 138                              break;
 139                          case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 140 dj.gorey        1.25         response = handleDeleteInstanceRequest(request);
 141 chip            1.1  
 142                              break;
 143                          case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 144 dj.gorey        1.25         response = handleExecQueryRequest(request);
 145 chip            1.1  
 146                              break;
 147                          case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 148 dj.gorey        1.25         response = handleAssociatorsRequest(request);
 149 chip            1.1  
 150                              break;
 151                          case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 152 dj.gorey        1.25         response = handleAssociatorNamesRequest(request);
 153 chip            1.1  
 154                              break;
 155                          case CIM_REFERENCES_REQUEST_MESSAGE:
 156 dj.gorey        1.25         response = handleReferencesRequest(request);
 157 chip            1.1  
 158                              break;
 159                          case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 160 dj.gorey        1.25         response = handleReferenceNamesRequest(request);
 161 chip            1.1  
 162                              break;
 163                          case CIM_GET_PROPERTY_REQUEST_MESSAGE:
 164 dj.gorey        1.25         response = handleGetPropertyRequest(request);
 165 chip            1.1  
 166                              break;
 167                          case CIM_SET_PROPERTY_REQUEST_MESSAGE:
 168 dj.gorey        1.25         response = handleSetPropertyRequest(request);
 169 chip            1.1  
 170                              break;
 171                          case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 172 dj.gorey        1.25         response = handleInvokeMethodRequest(request);
 173 chip            1.1  
 174                              break;
 175                          case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 176 dj.gorey        1.25         response = handleCreateSubscriptionRequest(request);
 177 chip            1.1  
 178                              break;
 179                          case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 180 dj.gorey        1.25         response = handleModifySubscriptionRequest(request);
 181 chip            1.1  
 182                              break;
 183                          case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 184 dj.gorey        1.25         response = handleDeleteSubscriptionRequest(request);
 185 chip            1.1  
 186                              break;
 187 schuur          1.14     case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 188 dj.gorey        1.25         response = handleExportIndicationRequest(request);
 189 schuur          1.14         break;
 190                      
 191 chip            1.1      case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 192 dj.gorey        1.25         response = handleDisableModuleRequest(request);
 193 chip            1.1  
 194                              break;
 195                          case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 196 dj.gorey        1.25         response = handleEnableModuleRequest(request);
 197 chip            1.1  
 198                              break;
 199                          case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 200 dj.gorey        1.25         response = handleStopAllProvidersRequest(request);
 201 chip            1.1  
 202                              break;
 203 kumpf           1.30     case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
 204                      	response = handleInitializeProviderRequest(request);
 205                      
 206                      	break;
 207 carolann.graves 1.49     case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
 208                      	response = handleSubscriptionInitCompleteRequest (request);
 209                      
 210                      	break;
 211 chip            1.1      default:
 212 kumpf           1.69         PEGASUS_ASSERT(0);
 213 chip            1.1  
 214                              break;
 215                          }
 216                      
 217                          PEG_METHOD_EXIT();
 218                      
 219                          return(response);
 220                      }
 221                      
 222 kumpf           1.30 Message * DefaultProviderManager::handleInitializeProviderRequest(
 223                          const Message * message)
 224                      {
 225                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, 
 226                      	"DefaultProviderManager::handleInitializeProviderRequest");
 227                      
 228                          CIMInitializeProviderRequestMessage * request =
 229                              dynamic_cast<CIMInitializeProviderRequestMessage *>
 230                      	    (const_cast<Message *>(message));
 231                      
 232                          PEGASUS_ASSERT(request != 0);
 233                      
 234 kumpf           1.54     CIMInitializeProviderResponseMessage* response =
 235                              dynamic_cast<CIMInitializeProviderResponseMessage*>(
 236                                  request->buildResponse());
 237                          PEGASUS_ASSERT(response != 0);
 238 kumpf           1.30 
 239 kumpf           1.62     OperationResponseHandler handler(
 240                              request, response, _responseChunkCallback);
 241 kumpf           1.30 
 242                          try
 243                          {
 244                              // resolve provider name
 245                      	ProviderName name = _resolveProviderName(
 246                      	    request->operationContext.get(ProviderIdContainer::NAME));
 247                      
 248 marek           1.64         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 249 kumpf           1.30         // get cached or load new provider module
 250 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 251                                  name.getPhysicalName(), name.getLogicalName());
 252 marek           1.64 
 253 kumpf           1.30     }
 254                          catch(CIMException & e)
 255                          {
 256                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,
 257                                  "CIMException: " + e.getMessage());
 258                      
 259                              handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage());
 260                          }
 261                          catch(Exception & e)
 262                          {
 263                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,
 264                                  "Exception: " + e.getMessage());
 265                      
 266                              handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage());
 267                          }
 268                          catch(...)
 269                          {
 270                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,
 271                                  "Exception: Unknown");
 272                      
 273                              handler.setStatus(CIM_ERR_FAILED, "Unknown error.");
 274 kumpf           1.30     }
 275                      
 276                          PEG_METHOD_EXIT();
 277                      
 278                          return(response);
 279                      }
 280                      
 281 dj.gorey        1.25 Message * DefaultProviderManager::handleGetInstanceRequest(const Message * message)
 282 chip            1.1  {
 283                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleGetInstanceRequest");
 284                      
 285                          CIMGetInstanceRequestMessage * request =
 286                              dynamic_cast<CIMGetInstanceRequestMessage *>(const_cast<Message *>(message));
 287                      
 288                          PEGASUS_ASSERT(request != 0);
 289                      
 290 kumpf           1.54     CIMGetInstanceResponseMessage* response =
 291                              dynamic_cast<CIMGetInstanceResponseMessage*>(
 292                                  request->buildResponse());
 293 chip            1.1      PEGASUS_ASSERT(response != 0);
 294                      
 295                          // create a handler for this request
 296 kumpf           1.62     GetInstanceResponseHandler handler(
 297                              request, response, _responseChunkCallback);
 298 chip            1.1  
 299                          try
 300                          {
 301                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 302                                  "DefaultProviderManager::handleGetInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 303                                  System::getHostName(),
 304                                  request->nameSpace.getString(),
 305                                  request->instanceName.getClassName().getString());
 306                      
 307                              // make target object path
 308                              CIMObjectPath objectPath(
 309                                  System::getHostName(),
 310                                  request->nameSpace,
 311                                  request->instanceName.getClassName(),
 312                                  request->instanceName.getKeyBindings());
 313                      
 314 chip            1.5          // resolve provider name
 315 kumpf           1.28         ProviderName name = _resolveProviderName(
 316                                  request->operationContext.get(ProviderIdContainer::NAME));
 317 chip            1.1  
 318                              // get cached or load new provider module
 319 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 320                                  name.getPhysicalName(), name.getLogicalName());
 321 chip            1.1  
 322                              // convert arguments
 323                              OperationContext context;
 324                      
 325 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 326                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 327                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 328 chip            1.1  
 329                              CIMPropertyList propertyList(request->propertyList);
 330                      
 331                              // forward request
 332                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 333                                  "Calling provider.getInstance: " +
 334                                  ph.GetProvider().getName());
 335                      
 336 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 337                      
 338 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 339 chip            1.1  
 340 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 341 chip            1.1  
 342                              ph.GetProvider().getInstance(
 343                                  context,
 344                                  objectPath,
 345                                  request->includeQualifiers,
 346                                  request->includeClassOrigin,
 347                                  propertyList,
 348                                  handler);
 349 marek           1.64 
 350 chip            1.1      }
 351 a.dunfey        1.58     HandleCatch(handler);
 352 chip            1.1  
 353                          PEG_METHOD_EXIT();
 354                          return(response);
 355                      }
 356                      
 357 dj.gorey        1.25 Message * DefaultProviderManager::handleEnumerateInstancesRequest(const Message * message)
 358 chip            1.1  {
 359                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnumerateInstanceRequest");
 360                      
 361                          CIMEnumerateInstancesRequestMessage * request =
 362                              dynamic_cast<CIMEnumerateInstancesRequestMessage *>(const_cast<Message *>(message));
 363                      
 364                          PEGASUS_ASSERT(request != 0);
 365                      
 366 kumpf           1.54     CIMEnumerateInstancesResponseMessage* response =
 367                              dynamic_cast<CIMEnumerateInstancesResponseMessage*>(
 368                                  request->buildResponse());
 369 chip            1.1      PEGASUS_ASSERT(response != 0);
 370                      
 371                          // create a handler for this request
 372 kumpf           1.62     EnumerateInstancesResponseHandler handler(
 373                              request, response, _responseChunkCallback);
 374 chip            1.1  
 375                          try
 376                          {
 377 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 378                      	    Logger::TRACE, 
 379                      	    "DefaultProviderManager::handleEnumerateInstancesRequest - "
 380                      	    "Host name: $0  Name space: $1  Class name: $2",
 381 chip            1.1              System::getHostName(),
 382                                  request->nameSpace.getString(),
 383 mike            1.56             request->className.getString()));
 384 chip            1.1  
 385                              // make target object path
 386                              CIMObjectPath objectPath(
 387                                  System::getHostName(),
 388                                  request->nameSpace,
 389                                  request->className);
 390                      
 391 chip            1.5          // resolve provider name
 392 kumpf           1.28         ProviderName name = _resolveProviderName(
 393                                  request->operationContext.get(ProviderIdContainer::NAME));
 394 chip            1.1  
 395                              // get cached or load new provider module
 396 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 397                                  name.getPhysicalName(), name.getLogicalName());
 398 chip            1.1  
 399                              // convert arguments
 400                              OperationContext context;
 401                      
 402 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 403                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 404                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 405 chip            1.1  
 406                              CIMPropertyList propertyList(request->propertyList);
 407                      
 408                              // forward request
 409                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 410                                  "Calling provider.enumerateInstances: " +
 411                                  ph.GetProvider().getName());
 412                      
 413 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 414                      
 415 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 416 chip            1.1  
 417 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 418 chip            1.1  
 419                              ph.GetProvider().enumerateInstances(
 420                                  context,
 421                                  objectPath,
 422                                  request->includeQualifiers,
 423                                  request->includeClassOrigin,
 424                                  propertyList,
 425                                  handler);
 426 marek           1.64 
 427 chip            1.1      }
 428 a.dunfey        1.58     HandleCatch(handler);
 429 chip            1.1  
 430                          PEG_METHOD_EXIT();
 431                      
 432                          return(response);
 433                      }
 434                      
 435 dj.gorey        1.25 Message * DefaultProviderManager::handleEnumerateInstanceNamesRequest(const Message * message)
 436 chip            1.1  {
 437                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnumerateInstanceNamesRequest");
 438                      
 439                          CIMEnumerateInstanceNamesRequestMessage * request =
 440                              dynamic_cast<CIMEnumerateInstanceNamesRequestMessage *>(const_cast<Message *>(message));
 441                      
 442                          PEGASUS_ASSERT(request != 0);
 443                      
 444 kumpf           1.54     CIMEnumerateInstanceNamesResponseMessage* response =
 445                              dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>(
 446                                  request->buildResponse());
 447 chip            1.1      PEGASUS_ASSERT(response != 0);
 448                      
 449                          // create a handler for this request
 450 kumpf           1.62     EnumerateInstanceNamesResponseHandler handler(
 451                              request, response, _responseChunkCallback);
 452 chip            1.1  
 453                          // process the request
 454                          try
 455                          {
 456 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 457                      	    Logger::TRACE,
 458                                  "DefaultProviderManager::handleEnumerateInstanceNamesRequest - "
 459                      	    "Host name: $0  Name space: $1  Class name: $2",
 460 chip            1.1              System::getHostName(),
 461                                  request->nameSpace.getString(),
 462 mike            1.56             request->className.getString()));
 463 chip            1.1  
 464                              // make target object path
 465                              CIMObjectPath objectPath(
 466                                  System::getHostName(),
 467                                  request->nameSpace,
 468                                  request->className);
 469                      
 470 chip            1.5          // resolve provider name
 471 kumpf           1.28         ProviderName name = _resolveProviderName(
 472                                  request->operationContext.get(ProviderIdContainer::NAME));
 473 chip            1.1  
 474                              // get cached or load new provider module
 475 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 476                                  name.getPhysicalName(), name.getLogicalName());
 477 chip            1.1  
 478                              // convert arguments
 479                              OperationContext context;
 480                      
 481 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 482                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 483                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 484                      
 485 chip            1.1          // forward request
 486                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 487                                  "Calling provider.enumerateInstanceNames: " +
 488                                  ph.GetProvider().getName());
 489                      
 490 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 491                      
 492 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 493 chip            1.1  
 494 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 495 chip            1.1  
 496                              ph.GetProvider().enumerateInstanceNames(
 497                                  context,
 498                                  objectPath,
 499                                  handler);
 500 marek           1.64 
 501 chip            1.1      }
 502 a.dunfey        1.58     HandleCatch(handler);
 503 chip            1.1  
 504                          PEG_METHOD_EXIT();
 505                      
 506                          return(response);
 507                      }
 508                      
 509 dj.gorey        1.25 Message * DefaultProviderManager::handleCreateInstanceRequest(const Message * message)
 510 chip            1.1  {
 511                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateInstanceRequest");
 512                      
 513                          CIMCreateInstanceRequestMessage * request =
 514                              dynamic_cast<CIMCreateInstanceRequestMessage *>(const_cast<Message *>(message));
 515                      
 516                          PEGASUS_ASSERT(request != 0);
 517                      
 518                          // create response message
 519 kumpf           1.54     CIMCreateInstanceResponseMessage* response =
 520                              dynamic_cast<CIMCreateInstanceResponseMessage*>(
 521                                  request->buildResponse());
 522 chip            1.1      PEGASUS_ASSERT(response != 0);
 523                      
 524                          // create a handler for this request
 525 kumpf           1.62     CreateInstanceResponseHandler handler(
 526                              request, response, _responseChunkCallback);
 527 chip            1.1  
 528                          try
 529                          {
 530 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 531                      	    Logger::TRACE,
 532                                  "DefaultProviderManager::handleCreateInstanceRequest - "
 533                      	    "Host name: $0  Name space: $1  Class name: $2",
 534 chip            1.1              System::getHostName(),
 535                                  request->nameSpace.getString(),
 536 mike            1.56             request->newInstance.getPath().getClassName().getString()));
 537 chip            1.1  
 538                              // make target object path
 539                              CIMObjectPath objectPath(
 540                                  System::getHostName(),
 541                                  request->nameSpace,
 542                                  request->newInstance.getPath().getClassName(),
 543                                  request->newInstance.getPath().getKeyBindings());
 544                      
 545 chip            1.5          // resolve provider name
 546 kumpf           1.28         ProviderName name = _resolveProviderName(
 547                                  request->operationContext.get(ProviderIdContainer::NAME));
 548 chip            1.1  
 549                              // get cached or load new provider module
 550 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 551                                  name.getPhysicalName(), name.getLogicalName());
 552 chip            1.1  
 553                              // convert arguments
 554                              OperationContext context;
 555                      
 556 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 557                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 558                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 559 chip            1.1  
 560                              // forward request
 561                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 562                                  "Calling provider.createInstance: " +
 563                                  ph.GetProvider().getName());
 564                      
 565 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 566                      
 567 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 568 chip            1.1  
 569 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 570 chip            1.1  
 571                              ph.GetProvider().createInstance(
 572                                  context,
 573                                  objectPath,
 574                                  request->newInstance,
 575                                  handler);
 576 marek           1.64 
 577 chip            1.1      }
 578 a.dunfey        1.58     HandleCatch(handler);
 579 chip            1.1  
 580                          PEG_METHOD_EXIT();
 581                      
 582                          return(response);
 583                      }
 584                      
 585 dj.gorey        1.25 Message * DefaultProviderManager::handleModifyInstanceRequest(const Message * message)
 586 chip            1.1  {
 587                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleModifyInstanceRequest");
 588                      
 589                          CIMModifyInstanceRequestMessage * request =
 590                              dynamic_cast<CIMModifyInstanceRequestMessage *>(const_cast<Message *>(message));
 591                      
 592                          PEGASUS_ASSERT(request != 0);
 593                      
 594                          // create response message
 595 kumpf           1.54     CIMModifyInstanceResponseMessage* response =
 596                              dynamic_cast<CIMModifyInstanceResponseMessage*>(
 597                                  request->buildResponse());
 598 chip            1.1      PEGASUS_ASSERT(response != 0);
 599                      
 600                          // create a handler for this request
 601 kumpf           1.62     ModifyInstanceResponseHandler handler(
 602                              request, response, _responseChunkCallback);
 603 chip            1.1  
 604                          try
 605                          {
 606 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 607                      	    Logger::TRACE,
 608                                  "DefaultProviderManager::handleModifyInstanceRequest - "
 609                      	    "Host name: $0  Name space: $1  Class name: $2",
 610 chip            1.1              System::getHostName(),
 611                                  request->nameSpace.getString(),
 612 mike            1.56             request->modifiedInstance.getPath().getClassName().getString()));
 613 chip            1.1  
 614                              // make target object path
 615                              CIMObjectPath objectPath(
 616                                  System::getHostName(),
 617                                  request->nameSpace,
 618                                  request->modifiedInstance.getPath ().getClassName(),
 619                                  request->modifiedInstance.getPath ().getKeyBindings());
 620                      
 621 chip            1.5          // resolve provider name
 622 kumpf           1.28         ProviderName name = _resolveProviderName(
 623                                  request->operationContext.get(ProviderIdContainer::NAME));
 624 chip            1.1  
 625                              // get cached or load new provider module
 626 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 627                                  name.getPhysicalName(), name.getLogicalName());
 628 chip            1.1  
 629                              // convert arguments
 630                              OperationContext context;
 631                      
 632 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 633                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 634                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 635 chip            1.1  
 636                              CIMPropertyList propertyList(request->propertyList);
 637                      
 638                              // forward request
 639                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 640                                  "Calling provider.modifyInstance: " +
 641                                  ph.GetProvider().getName());
 642                      
 643 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 644                      
 645 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 646 chip            1.1  
 647 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 648 chip            1.1  
 649                              ph.GetProvider().modifyInstance(
 650                                  context,
 651                                  objectPath,
 652                                  request->modifiedInstance,
 653                                  request->includeQualifiers,
 654                                  propertyList,
 655                                  handler);
 656 marek           1.64 
 657 chip            1.1      }
 658 a.dunfey        1.58     HandleCatch(handler);
 659 chip            1.1  
 660                          PEG_METHOD_EXIT();
 661                      
 662                          return(response);
 663                      }
 664                      
 665 dj.gorey        1.25 Message * DefaultProviderManager::handleDeleteInstanceRequest(const Message * message)
 666 chip            1.1  {
 667                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDeleteInstanceRequest");
 668                      
 669                          CIMDeleteInstanceRequestMessage * request =
 670                              dynamic_cast<CIMDeleteInstanceRequestMessage *>(const_cast<Message *>(message));
 671                      
 672                          PEGASUS_ASSERT(request != 0);
 673                      
 674                          // create response message
 675 kumpf           1.54     CIMDeleteInstanceResponseMessage* response =
 676                              dynamic_cast<CIMDeleteInstanceResponseMessage*>(
 677                                  request->buildResponse());
 678 chip            1.1      PEGASUS_ASSERT(response != 0);
 679                      
 680                          // create a handler for this request
 681 kumpf           1.62     DeleteInstanceResponseHandler handler(
 682                              request, response, _responseChunkCallback);
 683 chip            1.1  
 684                          try
 685                          {
 686 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 687                      	    Logger::TRACE,
 688                                  "DefaultProviderManager::handleDeleteInstanceRequest - "
 689                      	    "Host name: $0  Name space: $1  Class name: $2",
 690 chip            1.1              System::getHostName(),
 691                                  request->nameSpace.getString(),
 692 mike            1.56             request->instanceName.getClassName().getString()));
 693 chip            1.1  
 694                              // make target object path
 695                              CIMObjectPath objectPath(
 696                                  System::getHostName(),
 697                                  request->nameSpace,
 698                                  request->instanceName.getClassName(),
 699                                  request->instanceName.getKeyBindings());
 700                      
 701 chip            1.5          // resolve provider name
 702 kumpf           1.28         ProviderName name = _resolveProviderName(
 703                                  request->operationContext.get(ProviderIdContainer::NAME));
 704 chip            1.1  
 705                              // get cached or load new provider module
 706 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 707                                  name.getPhysicalName(), name.getLogicalName());
 708 chip            1.1  
 709                              // convert arguments
 710                              OperationContext context;
 711                      
 712 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 713                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 714                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 715 chip            1.1  
 716                              // forward request
 717                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 718                                  "Calling provider.deleteInstance: " +
 719                                  ph.GetProvider().getName());
 720                      
 721 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 722                      
 723 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 724 chip            1.1  
 725 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 726 chip            1.1  
 727                              ph.GetProvider().deleteInstance(
 728                                  context,
 729                                  objectPath,
 730                                  handler);
 731 marek           1.64 
 732 chip            1.1      }
 733 a.dunfey        1.58     HandleCatch(handler);
 734 chip            1.1  
 735                          PEG_METHOD_EXIT();
 736                      
 737                          return(response);
 738                      }
 739                      
 740 dj.gorey        1.25 Message * DefaultProviderManager::handleExecQueryRequest(const Message * message)
 741 chip            1.1  {
 742 schuur          1.12     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleExecQueryRequest");
 743 chip            1.1  
 744                          CIMExecQueryRequestMessage * request =
 745                              dynamic_cast<CIMExecQueryRequestMessage *>(const_cast<Message *>(message));
 746                      
 747                          PEGASUS_ASSERT(request != 0);
 748                      
 749 kumpf           1.54     CIMExecQueryResponseMessage* response =
 750                              dynamic_cast<CIMExecQueryResponseMessage*>(
 751                                  request->buildResponse());
 752 chip            1.1      PEGASUS_ASSERT(response != 0);
 753                      
 754 schuur          1.12     // create a handler for this request
 755 kumpf           1.62     ExecQueryResponseHandler handler(
 756                              request, response, _responseChunkCallback);
 757 schuur          1.12 
 758                          try
 759                          {
 760 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 761                      	    Logger::TRACE,
 762                                  "DefaultProviderManager::handleExecQueryRequest - "
 763                      	    "Host name: $0  Name space: $1  Class name: $2",
 764 schuur          1.12             System::getHostName(),
 765                                  request->nameSpace.getString(),
 766 mike            1.56             request->className.getString()));
 767 schuur          1.12 
 768                              // make target object path
 769                              CIMObjectPath objectPath(
 770                                  System::getHostName(),
 771                                  request->nameSpace,
 772                                  request->className);
 773                      
 774                              // resolve provider name
 775 kumpf           1.28         ProviderName name = _resolveProviderName(
 776                                  request->operationContext.get(ProviderIdContainer::NAME));
 777 schuur          1.12 
 778                              // get cached or load new provider module
 779 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 780                                  name.getPhysicalName(), name.getLogicalName());
 781 schuur          1.12 
 782                              // convert arguments
 783                              OperationContext context;
 784                      
 785 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 786                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 787                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 788 schuur          1.12 
 789 chuck           1.44         QueryExpression qx(request->queryLanguage,request->query);
 790 schuur          1.12 
 791                              // forward request
 792                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 793                                  "Calling provider.executeQueryRequest: " +
 794                                  ph.GetProvider().getName());
 795                      
 796 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 797                      
 798 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 799 schuur          1.12 
 800 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 801 schuur          1.12 
 802                              ph.GetProvider().execQuery(
 803                                  context,
 804                                  objectPath,
 805                                  qx,
 806                                  handler);
 807 marek           1.64 
 808 schuur          1.12     }
 809 a.dunfey        1.58     HandleCatch(handler);
 810 chip            1.1  
 811                          PEG_METHOD_EXIT();
 812                      
 813                          return(response);
 814                      }
 815                      
 816 dj.gorey        1.25 Message * DefaultProviderManager::handleAssociatorsRequest(const Message * message)
 817 chip            1.1  {
 818                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleAssociatorsRequest");
 819                      
 820                          CIMAssociatorsRequestMessage * request =
 821                              dynamic_cast<CIMAssociatorsRequestMessage *>(const_cast<Message *>(message));
 822                      
 823                          PEGASUS_ASSERT(request != 0);
 824                      
 825 kumpf           1.54     CIMAssociatorsResponseMessage* response =
 826                              dynamic_cast<CIMAssociatorsResponseMessage*>(
 827                                  request->buildResponse());
 828 chip            1.1      PEGASUS_ASSERT(response != 0);
 829                      
 830                          // create a handler for this request
 831 kumpf           1.62     AssociatorsResponseHandler handler(
 832                              request, response, _responseChunkCallback);
 833 chip            1.1  
 834                          // process the request
 835                          try
 836                          {
 837 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 838                      	    Logger::TRACE,
 839                                  "DefaultProviderManager::handleAssociatorsRequest - "
 840                      	    "Host name: $0  Name space: $1  Class name: $2",
 841 chip            1.1              System::getHostName(),
 842                                  request->nameSpace.getString(),
 843 mike            1.56             request->objectName.getClassName().getString()));
 844 chip            1.1  
 845                              // make target object path
 846                              CIMObjectPath objectPath(
 847                                  System::getHostName(),
 848                                  request->nameSpace,
 849                                  request->objectName.getClassName());
 850                      
 851                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
 852                      
 853 schuur          1.19         CIMObjectPath assocPath(
 854                                  System::getHostName(),
 855                                  request->nameSpace,
 856                                  request->assocClass.getString());
 857                      
 858 chip            1.5          // resolve provider name
 859 kumpf           1.28         ProviderName name = _resolveProviderName(
 860                                  request->operationContext.get(ProviderIdContainer::NAME));
 861 chip            1.2  
 862                              // get cached or load new provider module
 863 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 864                                  name.getPhysicalName(), name.getLogicalName());
 865 chip            1.2  
 866                              // convert arguments
 867                              OperationContext context;
 868                      
 869 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 870                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 871                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 872                      
 873 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 874                      
 875 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 876                      
 877 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 878 chip            1.1  
 879 chip            1.2          ph.GetProvider().associators(
 880                                  context,
 881                                  objectPath,
 882                                  request->assocClass,
 883                                  request->resultClass,
 884                                  request->role,
 885                                  request->resultRole,
 886                                  request->includeQualifiers,
 887                                  request->includeClassOrigin,
 888 a.dunfey        1.39             request->propertyList,
 889 chip            1.2              handler);
 890 marek           1.64 
 891 chip            1.1      }
 892 a.dunfey        1.58     HandleCatch(handler);
 893 chip            1.1  
 894                          PEG_METHOD_EXIT();
 895                      
 896                          return(response);
 897                      }
 898                      
 899 dj.gorey        1.25 Message * DefaultProviderManager::handleAssociatorNamesRequest(const Message * message)
 900 chip            1.1  {
 901                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleAssociatorNamesRequest");
 902                      
 903                          CIMAssociatorNamesRequestMessage * request =
 904                              dynamic_cast<CIMAssociatorNamesRequestMessage *>(const_cast<Message *>(message));
 905                      
 906                          PEGASUS_ASSERT(request != 0);
 907                      
 908 kumpf           1.54     CIMAssociatorNamesResponseMessage* response =
 909                              dynamic_cast<CIMAssociatorNamesResponseMessage*>(
 910                                  request->buildResponse());
 911 chip            1.1      PEGASUS_ASSERT(response != 0);
 912                      
 913                          // create a handler for this request
 914 kumpf           1.62     AssociatorNamesResponseHandler handler(
 915                              request, response, _responseChunkCallback);
 916 chip            1.1  
 917                          // process the request
 918                          try
 919                          {
 920 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
 921                      	    Logger::TRACE,
 922                                  "DefaultProviderManager::handleAssociationNamesRequest - "
 923                      	    "Host name: $0  Name space: $1  Class name: $2",
 924 chip            1.1              System::getHostName(),
 925                                  request->nameSpace.getString(),
 926 mike            1.56             request->objectName.getClassName().getString()));
 927 chip            1.1  
 928                              // make target object path
 929                              CIMObjectPath objectPath(
 930                                  System::getHostName(),
 931                                  request->nameSpace,
 932                                  request->objectName.getClassName());
 933                      
 934                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
 935                      
 936 schuur          1.19         CIMObjectPath assocPath(
 937                                  System::getHostName(),
 938                                  request->nameSpace,
 939                                  request->assocClass.getString());
 940                      
 941 chip            1.5          // resolve provider name
 942 kumpf           1.28         ProviderName name = _resolveProviderName(
 943                                  request->operationContext.get(ProviderIdContainer::NAME));
 944 chip            1.2  
 945                              // get cached or load new provider module
 946 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
 947                                  name.getPhysicalName(), name.getLogicalName());
 948 chip            1.2  
 949                              // convert arguments
 950                              OperationContext context;
 951 chip            1.1  
 952 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
 953                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 954                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 955 chip            1.1  
 956 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
 957                      
 958 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
 959                      
 960 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
 961 chip            1.1  
 962 chip            1.2          ph.GetProvider().associatorNames(
 963                                  context,
 964                                  objectPath,
 965                                  request->assocClass,
 966                                  request->resultClass,
 967                                  request->role,
 968                                  request->resultRole,
 969                                  handler);
 970 marek           1.64 
 971 chip            1.1      }
 972 a.dunfey        1.58     HandleCatch(handler);
 973 chip            1.1  
 974                          PEG_METHOD_EXIT();
 975                      
 976                          return(response);
 977                      }
 978                      
 979 dj.gorey        1.25 Message * DefaultProviderManager::handleReferencesRequest(const Message * message)
 980 chip            1.1  {
 981                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleReferencesRequest");
 982                      
 983                          CIMReferencesRequestMessage * request =
 984                              dynamic_cast<CIMReferencesRequestMessage *>(const_cast<Message *>(message));
 985                      
 986                          PEGASUS_ASSERT(request != 0);
 987                      
 988 kumpf           1.54     CIMReferencesResponseMessage* response =
 989                              dynamic_cast<CIMReferencesResponseMessage*>(
 990                                  request->buildResponse());
 991 chip            1.1      PEGASUS_ASSERT(response != 0);
 992                      
 993                          // create a handler for this request
 994 kumpf           1.62     ReferencesResponseHandler handler(
 995                              request, response, _responseChunkCallback);
 996 chip            1.1  
 997                          // process the request
 998                          try
 999                          {
1000 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1001                      	    Logger::TRACE,
1002                                  "DefaultProviderManager::handleReferencesRequest - "
1003                      	    "Host name: $0  Name space: $1  Class name: $2",
1004 chip            1.1              System::getHostName(),
1005                                  request->nameSpace.getString(),
1006 mike            1.56             request->objectName.getClassName().getString()));
1007 chip            1.1  
1008                              // make target object path
1009                              CIMObjectPath objectPath(
1010                                  System::getHostName(),
1011                                  request->nameSpace,
1012                                  request->objectName.getClassName());
1013                      
1014                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1015                      
1016 schuur          1.19         CIMObjectPath resultPath(
1017                                  System::getHostName(),
1018                                  request->nameSpace,
1019                                  request->resultClass.getString());
1020                      
1021 chip            1.5          // resolve provider name
1022 kumpf           1.28         ProviderName name = _resolveProviderName(
1023                                  request->operationContext.get(ProviderIdContainer::NAME));
1024 chip            1.2  
1025                              // get cached or load new provider module
1026 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1027                                  name.getPhysicalName(), name.getLogicalName());
1028 chip            1.2  
1029                              // convert arguments
1030                              OperationContext context;
1031                      
1032 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1033                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1034                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1035 chip            1.2  
1036                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1037                                  "Calling provider.references: " +
1038                                  ph.GetProvider().getName());
1039 chip            1.1  
1040 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1041                      
1042 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
1043                      
1044 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1045 chip            1.1  
1046 chip            1.2          ph.GetProvider().references(
1047                                  context,
1048                                  objectPath,
1049                                  request->resultClass,
1050                                  request->role,
1051                                  request->includeQualifiers,
1052                                  request->includeClassOrigin,
1053 a.dunfey        1.42             request->propertyList,
1054 chip            1.2              handler);
1055 marek           1.64 
1056 chip            1.1      }
1057 a.dunfey        1.58     HandleCatch(handler);
1058 chip            1.1  
1059                          PEG_METHOD_EXIT();
1060                      
1061                          return(response);
1062                      }
1063                      
1064 dj.gorey        1.25 Message * DefaultProviderManager::handleReferenceNamesRequest(const Message * message)
1065 chip            1.1  {
1066                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleReferenceNamesRequest");
1067                      
1068                          CIMReferenceNamesRequestMessage * request =
1069                              dynamic_cast<CIMReferenceNamesRequestMessage *>(const_cast<Message *>(message));
1070                      
1071                          PEGASUS_ASSERT(request != 0);
1072                      
1073 kumpf           1.54     CIMReferenceNamesResponseMessage* response =
1074                              dynamic_cast<CIMReferenceNamesResponseMessage*>(
1075                                  request->buildResponse());
1076                          PEGASUS_ASSERT(response != 0);
1077 chip            1.1  
1078                          // create a handler for this request
1079 kumpf           1.62     ReferenceNamesResponseHandler handler(
1080                              request, response, _responseChunkCallback);
1081 chip            1.1  
1082                          // process the request
1083                          try
1084                          {
1085 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1086                      	    Logger::TRACE,
1087                                  "DefaultProviderManager::handleReferenceNamesRequest - "
1088                      	    "Host name: $0  Name space: $1  Class name: $2",
1089 chip            1.1              System::getHostName(),
1090                                  request->nameSpace.getString(),
1091 mike            1.56             request->objectName.getClassName().getString()));
1092 chip            1.1  
1093                              // make target object path
1094                              CIMObjectPath objectPath(
1095                                  System::getHostName(),
1096                                  request->nameSpace,
1097                                  request->objectName.getClassName());
1098                      
1099                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1100                      
1101 schuur          1.19         CIMObjectPath resultPath(
1102                                  System::getHostName(),
1103                                  request->nameSpace,
1104                                  request->resultClass.getString());
1105                      
1106 chip            1.5          // resolve provider name
1107 kumpf           1.28         ProviderName name = _resolveProviderName(
1108                                  request->operationContext.get(ProviderIdContainer::NAME));
1109 chip            1.1  
1110 chip            1.2          // get cached or load new provider module
1111 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1112                                  name.getPhysicalName(), name.getLogicalName());
1113 chip            1.1  
1114 chip            1.2          // convert arguments
1115                              OperationContext context;
1116 chip            1.1  
1117 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1118                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1119                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1120 chip            1.1  
1121 chip            1.2          PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1122                                  "Calling provider.referenceNames: " +
1123                                  ph.GetProvider().getName());
1124 chip            1.1  
1125 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1126                      
1127 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
1128                      
1129 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1130 chip            1.1  
1131 chip            1.2          ph.GetProvider().referenceNames(
1132                                  context,
1133                                  objectPath,
1134                                  request->resultClass,
1135                                  request->role,
1136                                  handler);
1137 marek           1.64 
1138 chip            1.1      }
1139 a.dunfey        1.58     HandleCatch(handler);
1140 chip            1.1  
1141                          PEG_METHOD_EXIT();
1142                      
1143                          return(response);
1144                      }
1145                      
1146 dj.gorey        1.25 Message * DefaultProviderManager::handleGetPropertyRequest(const Message * message)
1147 chip            1.1  {
1148                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleGetPropertyRequest");
1149                      
1150                          CIMGetPropertyRequestMessage * request =
1151                              dynamic_cast<CIMGetPropertyRequestMessage *>(const_cast<Message *>(message));
1152                      
1153                          PEGASUS_ASSERT(request != 0);
1154                      
1155                          // create response message
1156 kumpf           1.54     CIMGetPropertyResponseMessage* response =
1157                              dynamic_cast<CIMGetPropertyResponseMessage*>(
1158                                  request->buildResponse());
1159 chip            1.1      PEGASUS_ASSERT(response != 0);
1160                      
1161 kumpf           1.62     GetPropertyResponseHandler handler(
1162                              request, response, _responseChunkCallback);
1163 chip            1.1  
1164                          try
1165                          {
1166 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1167                      	    Logger::TRACE,
1168                                  "DefaultProviderManager::handleGetPropertyRequest - "
1169                      	    "Host name: $0  Name space: $1  Class name: $2",
1170 chip            1.1              System::getHostName(),
1171                                  request->nameSpace.getString(),
1172 mike            1.56             request->instanceName.getClassName().getString()));
1173 chip            1.1  
1174                              // make target object path
1175                              CIMObjectPath objectPath(
1176                                  System::getHostName(),
1177                                  request->nameSpace,
1178                                  request->instanceName.getClassName(),
1179                                  request->instanceName.getKeyBindings());
1180                      
1181 chip            1.5          // resolve provider name
1182 kumpf           1.28         ProviderName name = _resolveProviderName(
1183                                  request->operationContext.get(ProviderIdContainer::NAME));
1184 chip            1.1  
1185                              // get cached or load new provider module
1186 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1187                                  name.getPhysicalName(), name.getLogicalName());
1188 chip            1.1  
1189                              // convert arguments
1190                              OperationContext context;
1191                      
1192 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1193                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1194                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1195 chip            1.1  
1196                              CIMName propertyName = request->propertyName;
1197                      
1198                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1199                                  "Calling provider.getProperty: " +
1200                                  ph.GetProvider().getName());
1201                      
1202 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1203                      
1204 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
1205                      
1206 chip            1.1          // forward request
1207 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1208 chip            1.1  
1209                              ph.GetProvider().getProperty(
1210                                  context,
1211                                  objectPath,
1212                                  propertyName,
1213                                  handler);
1214 marek           1.64 
1215 chip            1.1      }
1216 a.dunfey        1.58     HandleCatch(handler);
1217 chip            1.1  
1218                          PEG_METHOD_EXIT();
1219                      
1220                          return(response);
1221                      }
1222                      
1223 dj.gorey        1.25 Message * DefaultProviderManager::handleSetPropertyRequest(const Message * message)
1224 chip            1.1  {
1225                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleSetPropertyRequest");
1226                      
1227                          CIMSetPropertyRequestMessage * request =
1228                              dynamic_cast<CIMSetPropertyRequestMessage *>(const_cast<Message *>(message));
1229                      
1230                          PEGASUS_ASSERT(request != 0);
1231                      
1232                          // create response message
1233 kumpf           1.54     CIMSetPropertyResponseMessage* response = 
1234                              dynamic_cast<CIMSetPropertyResponseMessage*>(
1235                                  request->buildResponse());
1236 chip            1.1      PEGASUS_ASSERT(response != 0);
1237                      
1238 kumpf           1.62     SetPropertyResponseHandler handler(
1239                              request, response, _responseChunkCallback);
1240 chip            1.1  
1241                          try
1242                          {
1243 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1244                      	    Logger::TRACE,
1245                                  "DefaultProviderManager::handleSetPropertyRequest - "
1246                      	    "Host name: $0  Name space: $1  Class name: $2",
1247 chip            1.1              System::getHostName(),
1248                                  request->nameSpace.getString(),
1249 mike            1.56             request->instanceName.getClassName().getString()));
1250 chip            1.1  
1251                              // make target object path
1252                              CIMObjectPath objectPath(
1253                                  System::getHostName(),
1254                                  request->nameSpace,
1255                                  request->instanceName.getClassName(),
1256                                  request->instanceName.getKeyBindings());
1257                      
1258 chip            1.5          // resolve provider name
1259 kumpf           1.28         ProviderName name = _resolveProviderName(
1260                                  request->operationContext.get(ProviderIdContainer::NAME));
1261 chip            1.1  
1262                              // get cached or load new provider module
1263 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1264                                  name.getPhysicalName(), name.getLogicalName());
1265 chip            1.1  
1266                              // convert arguments
1267                              OperationContext context;
1268                      
1269 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1270                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1271                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1272 chip            1.1  
1273                              CIMName propertyName = request->propertyName;
1274                              CIMValue propertyValue = request->newValue;
1275                      
1276                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1277                                  "Calling provider.setProperty: " +
1278                                  ph.GetProvider().getName());
1279                      
1280 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1281                      
1282 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
1283                      
1284 chip            1.1          // forward request
1285 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1286 chip            1.1  
1287                              ph.GetProvider().setProperty(
1288                                  context,
1289                                  objectPath,
1290                                  propertyName,
1291                                  propertyValue,
1292                                  handler);
1293 marek           1.64 
1294 chip            1.1      }
1295 a.dunfey        1.58     HandleCatch(handler);
1296 chip            1.1  
1297                          PEG_METHOD_EXIT();
1298                      
1299                          return(response);
1300                      }
1301                      
1302 dj.gorey        1.25 Message * DefaultProviderManager::handleInvokeMethodRequest(const Message * message)
1303 chip            1.1  {
1304                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleInvokeMethodRequest");
1305                      
1306                          CIMInvokeMethodRequestMessage * request =
1307                              dynamic_cast<CIMInvokeMethodRequestMessage *>(const_cast<Message *>(message));
1308                      
1309                          PEGASUS_ASSERT(request != 0);
1310                      
1311                          // create response message
1312 kumpf           1.54     CIMInvokeMethodResponseMessage* response =
1313                              dynamic_cast<CIMInvokeMethodResponseMessage*>(
1314                                  request->buildResponse());
1315 chip            1.1      PEGASUS_ASSERT(response != 0);
1316                      
1317                          // create a handler for this request
1318 kumpf           1.62     InvokeMethodResponseHandler handler(
1319                              request, response, _responseChunkCallback);
1320 chip            1.1  
1321                          try
1322                          {
1323 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1324                      	    Logger::TRACE,
1325                                  "DefaultProviderManager::handleInvokeMethodRequest - "
1326                      	    "Host name: $0  Name space: $1  Class name: $2",
1327 chip            1.1              System::getHostName(),
1328                                  request->nameSpace.getString(),
1329 mike            1.56             request->instanceName.getClassName().getString()));
1330 chip            1.1  
1331                              // make target object path
1332                              CIMObjectPath objectPath(
1333                                  System::getHostName(),
1334                                  request->nameSpace,
1335                                  request->instanceName.getClassName(),
1336                                  request->instanceName.getKeyBindings());
1337                      
1338 chip            1.5          // resolve provider name
1339 kumpf           1.28         ProviderName name = _resolveProviderName(
1340                                  request->operationContext.get(ProviderIdContainer::NAME));
1341 chip            1.1  
1342                              // get cached or load new provider module
1343 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1344                                  name.getPhysicalName(), name.getLogicalName());
1345 chip            1.1  
1346                              // convert arguments
1347                              OperationContext context;
1348                      
1349 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1350                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1351                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));  
1352 chip            1.1  
1353                              CIMObjectPath instanceReference(request->instanceName);
1354                      
1355                              // ATTN: propagate namespace
1356                              instanceReference.setNameSpace(request->nameSpace);
1357                      
1358                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1359                                  "Calling provider.invokeMethod: " +
1360                                  ph.GetProvider().getName());
1361                      
1362 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1363                      
1364 kumpf           1.66         StatProviderTimeMeasurement providerTime(response);
1365                      
1366 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1367 chip            1.1  
1368                              ph.GetProvider().invokeMethod(
1369                                  context,
1370                                  instanceReference,
1371                                  request->methodName,
1372                                  request->inParameters,
1373                                  handler);
1374 marek           1.64 
1375 chip            1.1      }
1376 a.dunfey        1.58     HandleCatch(handler);
1377 chip            1.1  
1378                          PEG_METHOD_EXIT();
1379                      
1380                          return(response);
1381                      }
1382                      
1383 dj.gorey        1.25 Message * DefaultProviderManager::handleCreateSubscriptionRequest(const Message * message)
1384 chip            1.1  {
1385                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateSubscriptionRequest");
1386                      
1387                          CIMCreateSubscriptionRequestMessage * request =
1388                              dynamic_cast<CIMCreateSubscriptionRequestMessage *>(const_cast<Message *>(message));
1389                      
1390                          PEGASUS_ASSERT(request != 0);
1391                      
1392 kumpf           1.54     CIMCreateSubscriptionResponseMessage* response =
1393                              dynamic_cast<CIMCreateSubscriptionResponseMessage*>(
1394                                  request->buildResponse());
1395 chip            1.1      PEGASUS_ASSERT(response != 0);
1396                      
1397 kumpf           1.62     OperationResponseHandler handler(
1398                              request, response, _responseChunkCallback);
1399 chip            1.1  
1400                          try
1401                          {
1402 chip            1.2          String temp;
1403                      
1404                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1405                              {
1406                                  temp.append(request->classNames[i].getString());
1407                      
1408 kumpf           1.69             if (i < (n - 1))
1409 chip            1.2              {
1410                                      temp.append(", ");
1411                                  }
1412                              }
1413                      
1414 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1415                      	    Logger::TRACE,
1416                                  "DefaultProviderManager::handleCreateSubscriptionRequest - "
1417                      	    "Host name: $0  Name space: $1  Class name(s): $2",
1418 chip            1.2              System::getHostName(),
1419                                  request->nameSpace.getString(),
1420 mike            1.56             temp));
1421 chip            1.2  
1422 se.gupta        1.33 		CIMInstance req_provider, req_providerModule;
1423 se.gupta        1.34 		ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1424                      		req_provider = pidc.getProvider();
1425                      		req_providerModule = pidc.getModule();
1426 schuur          1.18 
1427 se.gupta        1.33         String physicalName=_resolvePhysicalName( req_providerModule.getProperty(
1428                                                                        req_providerModule.findProperty("Location")).getValue().toString());
1429                      
1430                              ProviderName name(req_provider.getProperty(req_provider.findProperty("Name")).getValue ().toString (),
1431                                                        physicalName,
1432                                                        req_providerModule.getProperty(req_providerModule.findProperty
1433                                                        ("InterfaceType")).getValue().toString(),
1434                                                         0);
1435 kumpf           1.50 
1436                              // get cached or load new provider module
1437                              OpProviderHolder ph = providerManager.getProvider(
1438                                  name.getPhysicalName(), name.getLogicalName());
1439 dj.gorey        1.25 
1440 carolann.graves 1.49         //
1441                              //  Save the provider instance from the request
1442                              //
1443 kumpf           1.70         ph.GetProvider().status.setProviderInstance(req_provider);
1444 carolann.graves 1.49 
1445 chip            1.1          // convert arguments
1446                              OperationContext context;
1447                      
1448 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1449                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1450                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1451                      	    context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
1452                      	    context.insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME));
1453 humberto        1.45 		 context.insert(request->operationContext.get(SubscriptionFilterQueryContainer::NAME));
1454 chip            1.1  
1455                              CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1456                      
1457                              Array<CIMObjectPath> classNames;
1458                      
1459                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1460                              {
1461                                  CIMObjectPath className(
1462                                      System::getHostName(),
1463                                      request->nameSpace,
1464                                      request->classNames[i]);
1465                      
1466                                  classNames.append(className);
1467                              }
1468                      
1469                              CIMPropertyList propertyList = request->propertyList;
1470                      
1471                              Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
1472                      
1473                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1474                                  "Calling provider.createSubscription: " +
1475 chip            1.1              ph.GetProvider().getName());
1476                      
1477 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1478                      
1479 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1480 chip            1.1  
1481                              ph.GetProvider().createSubscription(
1482                                  context,
1483                                  subscriptionName,
1484                                  classNames,
1485                                  propertyList,
1486                                  repeatNotificationPolicy);
1487 carolann.graves 1.49 
1488                              //
1489                              //  Increment count of current subscriptions for this provider
1490                              //
1491 kumpf           1.70         if (ph.GetProvider().status.testIfZeroAndIncrementSubscriptions())
1492 carolann.graves 1.49         {
1493                                  //
1494                                  //  If there were no current subscriptions before the increment, 
1495                                  //  the first subscription has been created
1496                                  //  Call the provider's enableIndications method
1497                                  //
1498                                  if (_subscriptionInitComplete)
1499                                  {
1500                                      _callEnableIndications (req_provider, 
1501                                          _indicationCallback, ph);
1502                                  }
1503                              }
1504 chip            1.1      }
1505                          catch(CIMException & e)
1506                          {
1507                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1508                                  "Exception: " + e.getMessage());
1509 chip            1.2  
1510 chip            1.1          handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1511                          }
1512                          catch(Exception & e)
1513                          {
1514                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1515                                  "Exception: " + e.getMessage());
1516 chip            1.2  
1517 chip            1.1          handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1518                          }
1519                          catch(...)
1520                          {
1521                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1522                                  "Exception: Unknown");
1523 chip            1.2  
1524 chip            1.1          handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1525                          }
1526                      
1527                          PEG_METHOD_EXIT();
1528                      
1529                          return(response);
1530                      }
1531                      
1532 dj.gorey        1.25 Message * DefaultProviderManager::handleModifySubscriptionRequest( const Message * message)
1533 chip            1.1  {
1534                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleModifySubscriptionRequest");
1535                      
1536                          CIMModifySubscriptionRequestMessage * request =
1537                              dynamic_cast<CIMModifySubscriptionRequestMessage *>(const_cast<Message *>(message));
1538                      
1539                          PEGASUS_ASSERT(request != 0);
1540                      
1541 kumpf           1.54     CIMModifySubscriptionResponseMessage* response =
1542                              dynamic_cast<CIMModifySubscriptionResponseMessage*>(
1543                                  request->buildResponse());
1544 chip            1.1      PEGASUS_ASSERT(response != 0);
1545                      
1546 kumpf           1.62     OperationResponseHandler handler(
1547                              request, response, _responseChunkCallback);
1548 chip            1.1  
1549                          try
1550                          {
1551 chip            1.2          String temp;
1552                      
1553                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1554                              {
1555                                  temp.append(request->classNames[i].getString());
1556                      
1557 kumpf           1.69             if (i < (n - 1))
1558 chip            1.2              {
1559                                      temp.append(", ");
1560                                  }
1561                              }
1562                      
1563 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1564                      	    Logger::TRACE,
1565                                  "DefaultProviderManager::handleCreateSubscriptionRequest - "
1566                      	    "Host name: $0  Name space: $1  Class name(s): $2",
1567 chip            1.2              System::getHostName(),
1568                                  request->nameSpace.getString(),
1569 mike            1.56             temp));
1570 se.gupta        1.33 			
1571 se.gupta        1.34 		CIMInstance req_provider, req_providerModule;
1572                      		ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1573                      		req_provider = pidc.getProvider();
1574                      		req_providerModule = pidc.getModule();
1575                      
1576                              String physicalName=_resolvePhysicalName( req_providerModule.getProperty(
1577 se.gupta        1.33                                                   req_providerModule.findProperty("Location")).getValue().toString());
1578                      
1579 se.gupta        1.34         ProviderName name(req_provider.getProperty(req_provider.findProperty("Name")).getValue ().toString (),
1580 se.gupta        1.33                                   physicalName,
1581                                                        req_providerModule.getProperty(req_providerModule.findProperty
1582                                                        ("InterfaceType")).getValue().toString(),
1583                                                         0);
1584 chip            1.1  
1585                              // get cached or load new provider module
1586 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1587                                  name.getPhysicalName(), name.getLogicalName());
1588 dj.gorey        1.25 
1589 chip            1.1          // convert arguments
1590                              OperationContext context;
1591 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1592                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1593                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1594                      	    context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
1595                      	    context.insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME));
1596 humberto        1.45 		 context.insert(request->operationContext.get(SubscriptionFilterQueryContainer::NAME));
1597 chip            1.1  
1598                              CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1599                      
1600                              Array<CIMObjectPath> classNames;
1601                      
1602                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1603                              {
1604                                  CIMObjectPath className(
1605                                      System::getHostName(),
1606                                      request->nameSpace,
1607                                      request->classNames[i]);
1608                      
1609                                  classNames.append(className);
1610                              }
1611                      
1612                              CIMPropertyList propertyList = request->propertyList;
1613                      
1614                              Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
1615                      
1616                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1617                                  "Calling provider.modifySubscription: " +
1618 chip            1.1              ph.GetProvider().getName());
1619                      
1620 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1621                      
1622 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1623 chip            1.1  
1624                              ph.GetProvider().modifySubscription(
1625                                  context,
1626                                  subscriptionName,
1627                                  classNames,
1628                                  propertyList,
1629                                  repeatNotificationPolicy);
1630 marek           1.64 
1631 chip            1.1      }
1632                          catch(CIMException & e)
1633                          {
1634                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1635                                  "Exception: " + e.getMessage());
1636 chip            1.2  
1637 chip            1.1          handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1638                          }
1639                          catch(Exception & e)
1640                          {
1641                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1642                                  "Exception: " + e.getMessage());
1643 chip            1.2  
1644 chip            1.1          handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1645                          }
1646                          catch(...)
1647                          {
1648                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1649                                  "Exception: Unknown");
1650 chip            1.2  
1651 chip            1.1          handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1652                          }
1653                      
1654                          PEG_METHOD_EXIT();
1655                      
1656                          return(response);
1657                      }
1658                      
1659 dj.gorey        1.25 Message * DefaultProviderManager::handleDeleteSubscriptionRequest(const Message * message)
1660 chip            1.1  {
1661                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDeleteSubscriptionRequest");
1662                      
1663                          CIMDeleteSubscriptionRequestMessage * request =
1664                              dynamic_cast<CIMDeleteSubscriptionRequestMessage *>(const_cast<Message *>(message));
1665                      
1666                          PEGASUS_ASSERT(request != 0);
1667                      
1668 kumpf           1.54     CIMDeleteSubscriptionResponseMessage* response =
1669                              dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(
1670                                  request->buildResponse());
1671 chip            1.1      PEGASUS_ASSERT(response != 0);
1672                      
1673 kumpf           1.62     OperationResponseHandler handler(
1674                              request, response, _responseChunkCallback);
1675 chip            1.1  
1676                          try
1677                          {
1678 chip            1.2          String temp;
1679                      
1680                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1681                              {
1682                                  temp.append(request->classNames[i].getString());
1683                      
1684 kumpf           1.69             if (i < (n - 1))
1685 chip            1.2              {
1686                                      temp.append(", ");
1687                                  }
1688                              }
1689                      
1690 mike            1.56         PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 
1691                      	    Logger::TRACE,
1692                                  "DefaultProviderManager::handleDeleteSubscriptionRequest - "
1693                      	    "Host name: $0  Name space: $1  Class name(s): $2",
1694 chip            1.2              System::getHostName(),
1695                                  request->nameSpace.getString(),
1696 mike            1.56             temp));
1697 chip            1.2  
1698 se.gupta        1.34 		CIMInstance req_provider, req_providerModule;
1699                      		ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1700                      
1701                      		req_provider = pidc.getProvider();
1702                      		req_providerModule = pidc.getModule();
1703 se.gupta        1.33         
1704                                    String physicalName=_resolvePhysicalName( req_providerModule.getProperty(
1705                                                                        req_providerModule.findProperty("Location")).getValue().toString());
1706                      
1707                                    ProviderName name(req_provider.getProperty(req_provider.findProperty("Name")).getValue ().toString (),
1708                                                        physicalName,
1709                                                        req_providerModule.getProperty(req_providerModule.findProperty
1710                                                        ("InterfaceType")).getValue().toString(),
1711                                                         0);
1712 chip            1.1  
1713                              // get cached or load new provider module
1714 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1715                                  name.getPhysicalName(), name.getLogicalName());
1716 dj.gorey        1.25 
1717 chip            1.1          // convert arguments
1718                              OperationContext context;
1719                      
1720 se.gupta        1.34 		context.insert(request->operationContext.get(IdentityContainer::NAME));
1721                      		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1722                      	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1723                      	    context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
1724                      
1725 chip            1.1          CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1726                      
1727                              Array<CIMObjectPath> classNames;
1728                      
1729                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++)
1730                              {
1731                                  CIMObjectPath className(
1732                                      System::getHostName(),
1733                                      request->nameSpace,
1734                                      request->classNames[i]);
1735                      
1736                                  classNames.append(className);
1737                              }
1738                      
1739                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1740                                  "Calling provider.deleteSubscription: " +
1741                                  ph.GetProvider().getName());
1742                      
1743 marek           1.64         AutoPThreadSecurity threadLevelSecurity(context);
1744                      
1745 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
1746 chip            1.1  
1747                              ph.GetProvider().deleteSubscription(
1748                                  context,
1749                                  subscriptionName,
1750                                  classNames);
1751 carolann.graves 1.49 
1752                              //
1753                              //  Decrement count of current subscriptions for this provider
1754                              //
1755 kumpf           1.70         if (ph.GetProvider().status.decrementSubscriptionsAndTestIfZero())
1756 carolann.graves 1.49         {
1757                                  //
1758                                  //  If there are no current subscriptions after the decrement, 
1759                                  //  the last subscription has been deleted
1760                                  //  Call the provider's disableIndications method
1761                                  //
1762                                  if (_subscriptionInitComplete)
1763                                  {
1764                                      PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1765                                          "Calling provider.disableIndications: " +
1766                                          ph.GetProvider ().getName ());
1767                      
1768                                      ph.GetProvider ().disableIndications ();
1769                      
1770 kumpf           1.70                 ph.GetProvider().status.unprotect();
1771 carolann.graves 1.49 
1772                                      //
1773                                      //
1774                                      //
1775                                      PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1776                                          "Removing and Destroying indication handler for " +
1777                                          ph.GetProvider ().getName ());
1778                      
1779                                      delete _removeEntry (_generateKey (ph.GetProvider ()));
1780                                  }
1781                              }
1782 chip            1.1      }
1783                          catch(CIMException & e)
1784                          {
1785                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1786                                  "Exception: " + e.getMessage());
1787 chip            1.2  
1788 chip            1.1          handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n
1789                          }
1790                          catch(Exception & e)
1791                          {
1792                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1793                                  "Exception: " + e.getMessage());
1794 chip            1.2  
1795 chip            1.1          handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n
1796                          }
1797                          catch(...)
1798                          {
1799                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1800                                  "Exception: Unknown");
1801 chip            1.2  
1802 chip            1.1          handler.setStatus(CIM_ERR_FAILED, "Unknown Error");
1803                          }
1804                      
1805                          PEG_METHOD_EXIT();
1806                      
1807                          return(response);
1808                      }
1809                      
1810 dj.gorey        1.25 Message *DefaultProviderManager::handleExportIndicationRequest(const Message *message)
1811 schuur          1.14 {
1812 kumpf           1.69     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1813                              "DefaultProviderManager::handleExportIndicationRequest");
1814 schuur          1.14 
1815                          CIMExportIndicationRequestMessage * request =
1816                              dynamic_cast<CIMExportIndicationRequestMessage *>(const_cast<Message *>(message));
1817                      
1818                          PEGASUS_ASSERT(request != 0);
1819                      
1820 kumpf           1.54     CIMExportIndicationResponseMessage* response =
1821                              dynamic_cast<CIMExportIndicationResponseMessage*>(
1822                                  request->buildResponse());
1823 schuur          1.14     PEGASUS_ASSERT(response != 0);
1824                      
1825 kumpf           1.62     OperationResponseHandler handler(
1826                              request, response, _responseChunkCallback);
1827 schuur          1.14 
1828                          try
1829                          {
1830 kumpf           1.28         // resolve provider name
1831                              ProviderName name = _resolveProviderName(
1832                                  request->operationContext.get(ProviderIdContainer::NAME));
1833 schuur          1.14 
1834 kumpf           1.28         // get cached or load new provider module
1835 kumpf           1.50         OpProviderHolder ph = providerManager.getProvider(
1836                                  name.getPhysicalName(), name.getLogicalName());
1837 schuur          1.14 
1838                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1839 dj.gorey        1.25                        "Calling provider.: " +
1840                                             ph.GetProvider().getName());
1841 schuur          1.14 
1842                              OperationContext context;
1843                      
1844 denise.eckstein 1.55         context.insert(request->operationContext.get(IdentityContainer::NAME));
1845                      
1846 schuur          1.14 //L10N_TODO
1847                      //l10n
1848                      // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent.  This
1849                      // does not appear to be hooked-up.  When it is added, need to
1850                      // make sure that Content-Language is set in the consume msg.
1851                      // NOTE: A-L is not needed to be set in the consume msg.
1852                            // add the langs to the context
1853 se.gupta        1.33 
1854 se.gupta        1.34       context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1855 schuur          1.14 
1856                            CIMInstance indication_copy = request->indicationInstance;
1857 kumpf           1.66 
1858                            StatProviderTimeMeasurement providerTime(response);
1859                      
1860 kumpf           1.70       pm_service_op_lock op_lock(&ph.GetProvider().status);
1861 schuur          1.14 
1862                            ph.GetProvider().consumeIndication(context,
1863 dj.gorey        1.25                                 request->destinationPath,
1864                                                      indication_copy);
1865 schuur          1.14     }
1866 a.dunfey        1.58     HandleCatch(handler);
1867 schuur          1.14 
1868                          PEG_METHOD_EXIT();
1869                      
1870                          return(response);
1871                      }
1872                      
1873                      
1874                      
1875                      
1876 chip            1.1  //
1877                      // This function disables a provider module if disableProviderOnly is not true,
1878                      // otherwise, disables a provider. Disable provider module means that
1879                      // block all the providers which contain in the module and unload the
1880                      // providers.
1881                      // Disable provider means unload the provider and the provider is not blocked.
1882                      //
1883                      // ATTN-YZ-P2-20030519: Provider needs to be blocked when disable a provider.
1884                      //
1885 dj.gorey        1.25 Message * DefaultProviderManager::handleDisableModuleRequest(const Message * message)
1886 chip            1.1  {
1887                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDisableModuleRequest");
1888 schuur          1.19 
1889 chip            1.1      CIMDisableModuleRequestMessage * request =
1890                              dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
1891                      
1892                          PEGASUS_ASSERT(request != 0);
1893 dj.gorey        1.25 
1894 schuur          1.18     Array<Uint16> operationalStatus;
1895                          CIMException cimException;
1896 chip            1.1  
1897 schuur          1.18     try
1898 chip            1.1      {
1899 schuur          1.18         // get provider module name
1900                              String moduleName;
1901                              CIMInstance mInstance = request->providerModule;
1902                              Uint32 pos = mInstance.findProperty(CIMName ("Name"));
1903 kumpf           1.28         PEGASUS_ASSERT(pos != PEG_NOT_FOUND);
1904                              mInstance.getProperty(pos).getValue().get(moduleName);
1905 chip            1.1  
1906 schuur          1.18         Boolean disableProviderOnly = request->disableProviderOnly;
1907                      
1908 chip            1.1          //
1909 kumpf           1.28         // Unload providers
1910 chip            1.1          //
1911 schuur          1.18         Array<CIMInstance> _pInstances = request->providers;
1912                              Array<Boolean> _indicationProviders = request->indicationProviders;
1913 dj.gorey        1.25 
1914 schuur          1.18         String physicalName=_resolvePhysicalName(
1915                                 mInstance.getProperty(
1916                                    mInstance.findProperty("Location")).getValue().toString());
1917 dj.gorey        1.25 
1918 schuur          1.18         for(Uint32 i = 0, n = _pInstances.size(); i < n; i++)
1919 chip            1.1          {
1920 schuur          1.18             String pName(_pInstances[i].getProperty(
1921                                     _pInstances[i].findProperty("Name")).getValue().toString());
1922 chip            1.1  
1923 kumpf           1.51             Sint16 ret_value = providerManager.disableProvider(pName);
1924 chip            1.1  
1925 schuur          1.18             if (ret_value == 0)
1926                                  {
1927 schuur          1.23                 // disable failed since there are pending requests,
1928 kumpf           1.28                 // stop trying to disable other providers in this module.
1929 kumpf           1.38                 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
1930 kumpf           1.28                 break;
1931 dj.gorey        1.25             }
1932 kumpf           1.28             else if (ret_value == 1)  // Success
1933 dj.gorey        1.25             {
1934 schuur          1.18                 if (_indicationProviders[i])
1935 dj.gorey        1.25                 {
1936 carolann.graves 1.49                     //
1937                                          //  Reset the indication provider's count of current 
1938                                          //  subscriptions since it has been disabled
1939                                          //
1940                                          if (physicalName.size () > 0)
1941                                          {
1942 kumpf           1.50                         OpProviderHolder ph = providerManager.getProvider(
1943                                                  physicalName, pName);
1944 carolann.graves 1.49 
1945 kumpf           1.70                         ph.GetProvider().status.resetSubscriptions();
1946 carolann.graves 1.49                     }
1947                      
1948                                          //
1949                                          //  If it is an indication provider
1950                                          //  remove the entry from the table since the
1951                                          //  provider has been disabled
1952                                          //
1953 kumpf           1.27                     delete _removeEntry(_generateKey(pName,physicalName));
1954 dj.gorey        1.25                 }
1955                                  }
1956 schuur          1.18             else
1957                                  {
1958 dj.gorey        1.25                 // disable failed for other reason, throw exception
1959 schuur          1.18                 throw PEGASUS_CIM_EXCEPTION_L(
1960                                          CIM_ERR_FAILED,
1961                                          MessageLoaderParms(
1962                                              "ProviderManager.ProviderManagerService."
1963                                                  "DISABLE_PROVIDER_FAILED",
1964                                              "Failed to disable the provider."));
1965                                  }
1966                              }
1967                          }
1968                          catch(CIMException & e)
1969                          {
1970 dj.gorey        1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1971 schuur          1.18                          "Exception: " + e.getMessage());
1972                              cimException = e;
1973                          }
1974                          catch(Exception & e)
1975                          {
1976 dj.gorey        1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1977 schuur          1.18                          "Exception: " + e.getMessage());
1978                              cimException = CIMException(CIM_ERR_FAILED, e.getMessage());
1979                          }
1980                          catch(...)
1981                          {
1982 dj.gorey        1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1983 schuur          1.18                          "Exception: Unknown");
1984                              //l10n
1985                              //response->cimException = CIMException(CIM_ERR_FAILED, "Unknown Error");
1986                              cimException = PEGASUS_CIM_EXCEPTION_L(
1987                                  CIM_ERR_FAILED,
1988                                  MessageLoaderParms(
1989                                      "ProviderManager.ProviderManagerService.UNKNOWN_ERROR",
1990                                      "Unknown Error"));
1991 chip            1.1      }
1992                      
1993 kumpf           1.28     if (cimException.getCode() == CIM_ERR_SUCCESS)
1994                          {
1995                              // Status is set to OK if a provider was busy
1996                              if (operationalStatus.size() == 0)
1997                              {
1998 kumpf           1.38             operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
1999 kumpf           1.28         }
2000                          }
2001                          else
2002                          {
2003                              // If exception occurs, module is not stopped
2004 kumpf           1.38         operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
2005 kumpf           1.28     }
2006                      
2007 kumpf           1.54     CIMDisableModuleResponseMessage* response =
2008                              dynamic_cast<CIMDisableModuleResponseMessage*>(
2009                                  request->buildResponse());
2010                          PEGASUS_ASSERT(response != 0);
2011 chip            1.1  
2012 kumpf           1.54     response->operationalStatus = operationalStatus;
2013 chip            1.1  
2014                          PEG_METHOD_EXIT();
2015                      
2016                          return(response);
2017                      }
2018                      
2019 dj.gorey        1.25 Message * DefaultProviderManager::handleEnableModuleRequest(const Message * message)
2020 chip            1.1  {
2021                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleEnableModuleRequest");
2022                      
2023                          CIMEnableModuleRequestMessage * request =
2024                              dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
2025                      
2026                          PEGASUS_ASSERT(request != 0);
2027                      
2028                          Array<Uint16> operationalStatus;
2029 kumpf           1.38     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
2030 chip            1.1  
2031 kumpf           1.54     CIMEnableModuleResponseMessage* response =
2032                              dynamic_cast<CIMEnableModuleResponseMessage*>(
2033                                  request->buildResponse());
2034                          PEGASUS_ASSERT(response != 0);
2035 chip            1.1  
2036 kumpf           1.54     response->operationalStatus = operationalStatus;
2037 chip            1.1  
2038                          PEG_METHOD_EXIT();
2039                          return(response);
2040                      }
2041                      
2042 dj.gorey        1.25 Message * DefaultProviderManager::handleStopAllProvidersRequest(const Message * message)
2043 chip            1.1  {
2044                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleStopAllProvidersRequest");
2045                      
2046                          CIMStopAllProvidersRequestMessage * request =
2047                              dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
2048                      
2049                          PEGASUS_ASSERT(request != 0);
2050                      
2051 kumpf           1.54     CIMStopAllProvidersResponseMessage* response =
2052                              dynamic_cast<CIMStopAllProvidersResponseMessage*>(
2053                                  request->buildResponse());
2054 chip            1.1      PEGASUS_ASSERT(response != 0);
2055                      
2056                          // tell the provider manager to shutdown all the providers
2057 schuur          1.10     providerManager.shutdownAllProviders();
2058 kumpf           1.57 
2059                          try
2060                          {
2061                              // Delete the response handlers that were not explicitly disabled.
2062                              AutoMutex lock(_responseTableMutex);
2063                      
2064                              for (IndicationResponseTable::Iterator i = _responseTable.start();
2065                                   i != 0; i++)  
2066                              {  
2067                                  EnableIndicationsResponseHandler *handler = i.value();  
2068                                  delete handler;  
2069                              }  
2070                      
2071                              _responseTable.clear();
2072                          }
2073                          catch (...) { } 
2074 chip            1.1  
2075                          PEG_METHOD_EXIT();
2076                      
2077                          return(response);
2078                      }
2079                      
2080 carolann.graves 1.49 Message * 
2081                      DefaultProviderManager::handleSubscriptionInitCompleteRequest
2082                          (const Message * message)
2083                      {
2084                          PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, 
2085                           "DefaultProviderManager::handleSubscriptionInitCompleteRequest");
2086                      
2087                          CIMSubscriptionInitCompleteRequestMessage * request =
2088                              dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
2089                                  (const_cast <Message *> (message));
2090                      
2091                          PEGASUS_ASSERT (request != 0);
2092                      
2093                          CIMSubscriptionInitCompleteResponseMessage * response = 
2094                              dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *> 
2095                                  (request->buildResponse ());
2096                      
2097                          PEGASUS_ASSERT (response != 0);
2098                      
2099                          //
2100                          //  Set indicator
2101 carolann.graves 1.49     //
2102                          _subscriptionInitComplete = true;
2103                      
2104                          //
2105                          //  For each provider that has at least one subscription, call 
2106                          //  provider's enableIndications method
2107                          //
2108 kumpf           1.70     Array <ProviderFacade*> enableProviders;
2109 carolann.graves 1.49     enableProviders = providerManager.getIndicationProvidersToEnable ();
2110                      
2111                          Uint32 numProviders = enableProviders.size ();
2112                          for (Uint32 i = 0; i < numProviders; i++)
2113                          {
2114                              try
2115                              {
2116                                  CIMInstance provider;
2117 kumpf           1.70             provider = enableProviders[i]->status.getProviderInstance();
2118 carolann.graves 1.49 
2119                                  //
2120                                  //  Get cached or load new provider module
2121                                  //
2122 kumpf           1.50             OpProviderHolder ph = providerManager.getProvider(
2123 kumpf           1.70                 enableProviders[i]->status.getModule()->getFileName(),
2124 kumpf           1.50                 enableProviders[i]->getName());
2125 carolann.graves 1.49 
2126                                  _callEnableIndications (provider, _indicationCallback, ph);
2127                              }
2128                              catch (CIMException & e)
2129                              {
2130                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2131                                      "CIMException: " + e.getMessage ());
2132                              }
2133                              catch (Exception & e)
2134                              {
2135                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2136                                      "Exception: " + e.getMessage ());
2137                              }
2138                              catch(...)
2139                              {
2140                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2141                                      "Unknown error in handleSubscriptionInitCompleteRequest");
2142                              }
2143                          }
2144                      
2145                          PEG_METHOD_EXIT ();
2146 carolann.graves 1.49     return (response);
2147                      }
2148                      
2149 kumpf           1.70 void DefaultProviderManager::_insertEntry(
2150                          const ProviderFacade& provider,
2151 kumpf           1.57     EnableIndicationsResponseHandler* handler)
2152 chip            1.1  {
2153 carolann.graves 1.41     PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
2154 chip            1.1          "DefaultProviderManager::_insertEntry");
2155                      
2156 kumpf           1.57     String tableKey = _generateKey(provider);
2157 chip            1.1  
2158 kumpf           1.57     AutoMutex lock(_responseTableMutex);
2159                          _responseTable.insert(tableKey, handler);
2160 chip            1.1  
2161                          PEG_METHOD_EXIT();
2162                      }
2163                      
2164                      EnableIndicationsResponseHandler * DefaultProviderManager::_removeEntry(
2165                          const String & key)
2166                      {
2167 carolann.graves 1.41     PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
2168 chip            1.1          "DefaultProviderManager::_removeEntry");
2169                          EnableIndicationsResponseHandler *ret = 0;
2170                      
2171 kumpf           1.57     AutoMutex lock(_responseTableMutex);
2172 chip            1.1      _responseTable.lookup(key, ret);
2173 kumpf           1.57     _responseTable.remove(key);
2174 chip            1.1  
2175                          PEG_METHOD_EXIT();
2176                      
2177                          return(ret);
2178                      }
2179                      
2180                      String DefaultProviderManager::_generateKey (
2181 kumpf           1.70     const ProviderFacade & provider)
2182 chip            1.1  {
2183                          String tableKey;
2184                      
2185 carolann.graves 1.41     PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
2186 chip            1.1          "DefaultProviderManager::_generateKey");
2187                      
2188                          //
2189                          //  Append provider key values to key
2190                          //
2191                          String providerName = provider.getName();
2192 kumpf           1.70     String providerFileName = provider.status.getModule()->getFileName();
2193 chip            1.1      tableKey.append (providerName);
2194                          tableKey.append (providerFileName);
2195                      
2196                          PEG_METHOD_EXIT();
2197                      
2198                          return(tableKey);
2199 schuur          1.18 }
2200                      
2201                      String DefaultProviderManager::_generateKey (
2202                          const String & providerName,
2203                          const String & providerFileName)
2204                      {
2205 kumpf           1.69     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
2206                              "DefaultProviderManager::_generateKey");
2207                      
2208 schuur          1.18     String tableKey;
2209                      
2210                          //
2211                          //  Append providerName and providerFileName to key
2212                          //
2213                          tableKey.append (providerName);
2214                          tableKey.append (providerFileName);
2215                      
2216                          PEG_METHOD_EXIT ();
2217                          return tableKey;
2218 chip            1.5  }
2219                      
2220 kumpf           1.28 ProviderName DefaultProviderManager::_resolveProviderName(
2221                          const ProviderIdContainer & providerId)
2222 chip            1.5  {
2223 kumpf           1.28     String providerName;
2224                          String fileName;
2225                          String interfaceName;
2226                          CIMValue genericValue;
2227                      
2228                          genericValue = providerId.getProvider().getProperty(
2229                              providerId.getProvider().findProperty("Name")).getValue();
2230                          genericValue.get(providerName);
2231                      
2232                          genericValue = providerId.getModule().getProperty(
2233                              providerId.getModule().findProperty("Location")).getValue();
2234                          genericValue.get(fileName);
2235                          fileName = _resolvePhysicalName(fileName);
2236                      
2237                          // ATTN: This attribute is probably not required
2238                          genericValue = providerId.getModule().getProperty(
2239                              providerId.getModule().findProperty("InterfaceType")).getValue();
2240                          genericValue.get(interfaceName);
2241 chip            1.5  
2242 kumpf           1.28     return ProviderName(providerName, fileName, interfaceName, 0);
2243 schuur          1.23 }
2244                      
2245 kumpf           1.31 Boolean DefaultProviderManager::hasActiveProviders()
2246                      {
2247                          return providerManager.hasActiveProviders();
2248                      }
2249                      
2250                      void DefaultProviderManager::unloadIdleProviders()
2251 schuur          1.23 {
2252 kumpf           1.31     providerManager.unloadIdleProviders();
2253 chip            1.1  }
2254                      
2255 carolann.graves 1.49 void DefaultProviderManager::_callEnableIndications
2256                          (CIMInstance & req_provider,
2257 kumpf           1.62      PEGASUS_INDICATION_CALLBACK_T _indicationCallback,
2258 carolann.graves 1.49      OpProviderHolder & ph)
2259                      {
2260                          PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, 
2261                              "DefaultProviderManager::_callEnableIndications");
2262                      
2263                          try
2264                          {
2265                              CIMRequestMessage * request = 0;
2266                              CIMResponseMessage * response = 0;
2267                              EnableIndicationsResponseHandler * enableHandler =
2268 kumpf           1.62             new EnableIndicationsResponseHandler(
2269                                      request,
2270                                      response,
2271                                      req_provider,
2272                                      _indicationCallback,
2273                                      _responseChunkCallback);
2274 carolann.graves 1.49     
2275                              PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2276                                  "Calling provider.enableIndications: " +
2277                                  ph.GetProvider ().getName ());
2278                          
2279 kumpf           1.70         pm_service_op_lock op_lock(&ph.GetProvider().status);
2280                              ph.GetProvider().status.protect();
2281 carolann.graves 1.49         ph.GetProvider ().enableIndications (* enableHandler);
2282                          
2283                              //
2284                              //  Store the handler so it is persistent for as
2285                              //  long as the provider has indications enabled
2286                              //
2287                              PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2288                                  "Storing indication handler for " +
2289                                  ph.GetProvider ().getName ());
2290                          
2291                              _insertEntry (ph.GetProvider (), enableHandler);
2292                          }
2293                          catch (CIMException & e)
2294                          {
2295                              PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2296                                  "CIMException: " + e.getMessage ());
2297                      
2298 mike            1.56         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
2299 carolann.graves 1.49             "ProviderManager.Default.DefaultProviderManager."
2300                                      "ENABLE_INDICATIONS_FAILED",
2301                                  "Failed to enable indications for provider $0: $1.", 
2302                                  ph.GetProvider ().getName (), e.getMessage ());
2303                          }
2304                          catch (Exception & e)
2305                          {
2306                              PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2307                                  "Exception: " + e.getMessage ());
2308                      
2309                              Logger::put_l (Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
2310                                  "ProviderManager.Default.DefaultProviderManager."
2311                                      "ENABLE_INDICATIONS_FAILED",
2312                                  "Failed to enable indications for provider $0: $1.", 
2313                                  ph.GetProvider ().getName (), e.getMessage ());
2314                          }
2315                          catch(...)
2316                          {
2317                              PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2318                                  "Unexpected error in _callEnableIndications");
2319                      
2320 carolann.graves 1.49         Logger::put_l (Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
2321                                  "ProviderManager.Default.DefaultProviderManager."
2322                                      "ENABLE_INDICATIONS_FAILED_UNKNOWN",
2323                                  "Failed to enable indications for provider $0.", 
2324                                  ph.GetProvider ().getName ());
2325                          }
2326                      
2327                          PEG_METHOD_EXIT ();
2328                      }
2329                      
2330 mike            1.63 ProviderManager* DefaultProviderManager::createDefaultProviderManagerCallback()
2331                      {
2332                          return new DefaultProviderManager();
2333                      }
2334                      
2335 kumpf           1.26 PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2