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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2