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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2