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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2