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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2