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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2