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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2