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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2