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

   1 karl  1.82 //%2006////////////////////////////////////////////////////////////////////////
   2 marek 1.63 //
   3            // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6            // IBM Corp.; EMC Corporation, The Open Group.
   7            // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9            // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11 karl  1.82 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12            // EMC Corporation; Symantec Corporation; The Open Group.
  13 marek 1.63 //
  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.82 // 
  21 marek 1.63 // 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 "CMPI_Version.h"
  35            
  36            #include "CMPIProviderManager.h"
  37            
  38            #include "CMPI_Object.h"
  39            #include "CMPI_Instance.h"
  40            #include "CMPI_ObjectPath.h"
  41            #include "CMPI_Result.h"
  42 marek 1.63 #include "CMPI_SelectExp.h"
  43            
  44            #include <Pegasus/Common/CIMMessage.h>
  45            #include <Pegasus/Common/OperationContext.h>
  46 a.dunfey 1.85 #include <Pegasus/Common/OperationContextInternal.h>
  47 marek    1.63 #include <Pegasus/Common/Tracer.h>
  48               #include <Pegasus/Common/StatisticalData.h>
  49               #include <Pegasus/Common/Logger.h>
  50 kumpf    1.79 #include <Pegasus/Common/LanguageParser.h>
  51 marek    1.63 #include <Pegasus/Common/MessageLoader.h> //l10n
  52               #include <Pegasus/Common/Constants.h>
  53 thilo.boehm 1.89 #include <Pegasus/Common/FileSystem.h>
  54 marek       1.63 
  55                  #include <Pegasus/Config/ConfigManager.h>
  56                  
  57                  #include <Pegasus/Provider/CIMOMHandleQueryContext.h>
  58 a.dunfey    1.85 #include <Pegasus/ProviderManager2/CIMOMHandleContext.h>
  59 marek       1.63 #include <Pegasus/ProviderManager2/ProviderName.h>
  60 kumpf       1.93 #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h>
  61 marek       1.63 #include <Pegasus/ProviderManager2/CMPI/CMPIProviderModule.h>
  62                  #include <Pegasus/ProviderManager2/CMPI/CMPIProvider.h>
  63                  
  64 kumpf       1.93 PEGASUS_USING_STD;
  65 marek       1.63 
  66                  PEGASUS_NAMESPACE_BEGIN
  67                  
  68 dave.sudlik 1.96 
  69 marek       1.95 ReadWriteSem    CMPIProviderManager::rwSemProvTab;
  70                  ReadWriteSem    CMPIProviderManager::rwSemSelxTab;
  71 marek       1.63 CMPIProviderManager::IndProvTab    CMPIProviderManager::provTab;
  72                  CMPIProviderManager::IndSelectTab  CMPIProviderManager::selxTab;
  73 marek       1.95 
  74 venkat.puvvada 1.108 class CMPIPropertyList
  75                      {
  76                          char **props;
  77                          int pCount;
  78                      public:
  79                          CMPIPropertyList(CIMPropertyList &propertyList) : props(0), pCount(0)
  80                          {
  81 ms.aruran      1.115         PEG_METHOD_ENTER(
  82                                  TRC_PROVIDERMANAGER,
  83                                  "CMPIPropertyList::CMPIPropertyList()");
  84 venkat.puvvada 1.108         if (!propertyList.isNull())
  85                              {
  86                                  Array<CIMName> p=propertyList.getPropertyNameArray();
  87                                  pCount=p.size();
  88                                  props = new char*[1+pCount];
  89                                  for (int i=0; i<pCount; i++)
  90                                  {
  91                                      props[i]=strdup(p[i].getString().getCString());
  92                                  }
  93                                  props[pCount]=NULL;
  94                              }
  95                              else props=NULL;
  96 ms.aruran      1.115         PEG_METHOD_EXIT();
  97 venkat.puvvada 1.108     }
  98                          ~CMPIPropertyList()
  99                          {
 100 ms.aruran      1.115         PEG_METHOD_ENTER(
 101                                  TRC_PROVIDERMANAGER,
 102                                  "CMPIPropertyList::~CMPIPropertyList()");
 103 venkat.puvvada 1.108         if (props)
 104                              {
 105                                  for (int i=0; i<pCount; i++)
 106                                      free(props[i]);
 107                                  delete [] props;
 108                              }
 109 ms.aruran      1.115         PEG_METHOD_EXIT();
 110 venkat.puvvada 1.108     }
 111                          char  **getList()
 112                          {
 113                              return props;
 114                          }
 115 marek          1.63  };
 116                      
 117 marek          1.127 CMPIProviderManager::CMPIProviderManager()
 118 marek          1.63  {
 119 ms.aruran      1.115     PEG_METHOD_ENTER(
 120                              TRC_PROVIDERMANAGER,
 121                              "CMPIProviderManager::CMPIProviderManager()");
 122                      
 123 venkat.puvvada 1.108     _subscriptionInitComplete = false;
 124 ms.aruran      1.115     PEG_TRACE_CSTRING (
 125                              TRC_PROVIDERMANAGER,
 126                              Tracer::LEVEL2,
 127                              "-- CMPI Provider Manager activated");
 128                          PEG_METHOD_EXIT();
 129 marek          1.63  }
 130                      
 131 venkat.puvvada 1.108 CMPIProviderManager::~CMPIProviderManager()
 132 marek          1.63  {
 133 ms.aruran      1.115     PEG_METHOD_ENTER(
 134                              TRC_PROVIDERMANAGER,
 135                              "CMPIProviderManager::~CMPIProviderManager()");
 136 venkat.puvvada 1.108     /* Clean up the hash-tables */
 137 marek          1.63      indProvRecord *prec=NULL;
 138 marek          1.95      {
 139                              WriteLock writeLock(rwSemProvTab);
 140 venkat.puvvada 1.108         for (IndProvTab::Iterator i = provTab.start(); i; i++)
 141                              {
 142                                  provTab.lookup(i.key(),prec);
 143                                  if (prec->handler)
 144                                      delete prec->handler;
 145                                  delete prec;
 146                                  //Remove is not neccessary, since the hashtable destructor takes 
 147                                  //care of this already. But instead removing entries while 
 148                                  //iterating the hashtable sometimes causes a segmentation fault!!!
 149                                  //provTab.remove(i.key());
 150                                  prec=NULL;
 151                              }
 152 marek          1.95      }
 153                      
 154 venkat.puvvada 1.108     indSelectRecord *selx=NULL;
 155 marek          1.95      {
 156                              WriteLock writeLock(rwSemSelxTab);
 157 venkat.puvvada 1.108         for (IndSelectTab::Iterator i = selxTab.start(); i; i++)
 158                              {
 159                                  selxTab.lookup(i.key(), selx);
 160                                  if (selx->eSelx)
 161                                      delete selx->eSelx;
 162                                  if (selx->qContext)
 163                                      delete selx->qContext;
 164                                  delete selx;
 165                                  //Same as above!
 166                                  //selxTab.remove(i.key());
 167                                  selx=NULL;
 168                              }
 169 marek          1.95      }
 170 ms.aruran      1.115     PEG_METHOD_EXIT();
 171 marek          1.63  }
 172                      
 173                      Message * CMPIProviderManager::processMessage(Message * request)
 174                      {
 175 ms.aruran      1.115     PEG_METHOD_ENTER(
 176                              TRC_PROVIDERMANAGER,
 177 marek          1.63          "CMPIProviderManager::processMessage()");
 178                      
 179                          Message * response = 0;
 180                      
 181                          // pass the request message to a handler method based on message type
 182 venkat.puvvada 1.108     switch (request->getType())
 183 marek          1.63      {
 184 venkat.puvvada 1.108         case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 185                                  response = handleGetInstanceRequest(request);
 186 marek          1.63  
 187 venkat.puvvada 1.108             break;
 188                              case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 189                                  response = handleEnumerateInstancesRequest(request);
 190                      
 191                                  break;
 192                              case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 193                                  response = handleEnumerateInstanceNamesRequest(request);
 194                      
 195                                  break;
 196                              case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 197                                  response = handleCreateInstanceRequest(request);
 198                      
 199                                  break;
 200                              case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 201                                  response = handleModifyInstanceRequest(request);
 202                      
 203                                  break;
 204                              case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 205                                  response = handleDeleteInstanceRequest(request);
 206                      
 207                                  break;
 208 venkat.puvvada 1.108         case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 209                                  response = handleExecQueryRequest(request);
 210                      
 211                                  break;
 212                              case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 213                                  response = handleAssociatorsRequest(request);
 214                      
 215                                  break;
 216                              case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 217                                  response = handleAssociatorNamesRequest(request);
 218                      
 219                                  break;
 220                              case CIM_REFERENCES_REQUEST_MESSAGE:
 221                                  response = handleReferencesRequest(request);
 222                      
 223                                  break;
 224                              case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 225                                  response = handleReferenceNamesRequest(request);
 226                      
 227                                  break;
 228                              case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 229 venkat.puvvada 1.108             response = handleInvokeMethodRequest(request);
 230                      
 231                                  break;
 232                              case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 233                                  response = handleCreateSubscriptionRequest(request);
 234 marek          1.63  
 235 venkat.puvvada 1.108             break;
 236 marek          1.63  /*    case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 237                              response = handleModifySubscriptionRequest(request);
 238                      
 239                              break;
 240 venkat.puvvada 1.108 */
 241                              case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 242                                  response = handleDeleteSubscriptionRequest(request);
 243 marek          1.63  
 244 venkat.puvvada 1.108             break;
 245 marek          1.63  /*    case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 246                              response = handleExportIndicationRequest(request);
 247                              break;
 248                      */
 249 venkat.puvvada 1.108         case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 250                                  response = handleDisableModuleRequest(request);
 251 marek          1.63  
 252 venkat.puvvada 1.108             break;
 253                              case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 254                                  response = handleEnableModuleRequest(request);
 255                      
 256                                  break;
 257                              case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 258                                  response = handleStopAllProvidersRequest(request);
 259                      
 260                                  break;
 261                              case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
 262                                  response = handleSubscriptionInitCompleteRequest (request);
 263                      
 264                                  break;
 265                              case CIM_GET_PROPERTY_REQUEST_MESSAGE:
 266                                  response = handleGetPropertyRequest(request);
 267                      
 268                                  break;
 269                              case CIM_SET_PROPERTY_REQUEST_MESSAGE:
 270                                  response = handleSetPropertyRequest(request);
 271                      
 272                                  break;
 273 venkat.puvvada 1.108         default:
 274                                  response = handleUnsupportedRequest(request);
 275 marek          1.63  
 276 venkat.puvvada 1.108             break;
 277 marek          1.63      }
 278                      
 279                          PEG_METHOD_EXIT();
 280                      
 281                          return(response);
 282                      }
 283                      
 284                      Boolean CMPIProviderManager::hasActiveProviders()
 285                      {
 286 venkat.puvvada 1.108     return providerManager.hasActiveProviders();
 287 marek          1.63  }
 288                      
 289                      void CMPIProviderManager::unloadIdleProviders()
 290                      {
 291 venkat.puvvada 1.108     providerManager.unloadIdleProviders();
 292 marek          1.63  }
 293                      
 294 venkat.puvvada 1.140 CIMObjectPath CMPIProviderManager::_getFilterPath(
 295                          const CIMInstance &instance)
 296                      {
 297                          CIMConstProperty filterProperty = instance.getProperty(
 298                              instance.findProperty (PEGASUS_PROPERTYNAME_FILTER));
 299                          CIMValue filterValue = filterProperty.getValue();
 300                          CIMObjectPath filterPath;
 301                          filterValue.get(filterPath);
 302                          // Remove host tag
 303                          filterPath.setHost(String::EMPTY);
 304                          // Set subscription's namespace if namespace is not found in filter path.
 305                          if (filterPath.getNameSpace().equal(CIMNamespaceName()))
 306                          {
 307                              filterPath.setNameSpace(instance.getPath().getNameSpace());
 308                          }
 309                      
 310                          return filterPath;
 311                      }
 312 marek          1.63  
 313                      #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
 314                      
 315                      
 316 kumpf          1.92  #define HandlerIntroBase(type,type1,message,request,response,handler) \
 317 marek          1.63      CIM##type##RequestMessage * request = \
 318 venkat.puvvada 1.108         dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *> \
 319                              (message)); \
 320 marek          1.63      PEGASUS_ASSERT(request != 0); \
 321                          CIM##type##ResponseMessage * response = \
 322 kumpf          1.92          dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \
 323 marek          1.63      PEGASUS_ASSERT(response != 0); \
 324 kumpf          1.84      type1##ResponseHandler handler(request, response, _responseChunkCallback);
 325 marek          1.63  
 326                      #define HandlerIntroInd(type,message,request,response,handler) \
 327 kumpf          1.92       HandlerIntroBase(type,Operation,message,request,response,handler)
 328 marek          1.63  
 329                      #define HandlerIntroInit(type,message,request,response,handler) \
 330 kumpf          1.92       HandlerIntroBase(type,Operation,message,request,response,handler)
 331 marek          1.63  
 332 kumpf          1.92  #define HandlerIntro(type,message,request,response,handler) \
 333                           HandlerIntroBase(type,type,message,request,response,handler)
 334 marek          1.63  
 335                      #define HandlerCatch(handler) \
 336 konrad.r       1.64      catch(const CIMException & e)  \
 337 thilo.boehm    1.138     { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
 338                                "CIMException: %s",(const char*)e.getMessage().getCString())); \
 339 dave.sudlik    1.103         handler.setCIMException(e); \
 340 marek          1.63      } \
 341 konrad.r       1.64      catch(const Exception & e) \
 342 thilo.boehm    1.138     { PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
 343                                "Exception: %s",(const char*)e.getMessage().getCString())); \
 344 venkat.puvvada 1.108         handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), \
 345                              e.getMessage()); \
 346 marek          1.63      } \
 347                          catch(...) \
 348 marek          1.131     { PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
 349 marek          1.63                  "Exception: Unknown"); \
 350                              handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
 351                          }
 352                      
 353 marek          1.124 void CMPIProviderManager::_setupCMPIContexts(
 354                          CMPI_ContextOnStack * eCtx,
 355                          OperationContext * context,
 356                          ProviderIdContainer * pidc,
 357                          const String &nameSpace,
 358                          Boolean remote,
 359                          Boolean includeQualifiers,
 360                          Boolean includeClassOrigin,
 361                          Boolean setFlags)
 362                      {
 363                          if (setFlags)
 364                          {
 365                              // set CMPI invocation flags
 366 kumpf          1.125         CMPIValue value;
 367                              value.uint32 = 0;
 368                              if (includeQualifiers) value.uint32 |= CMPI_FLAG_IncludeQualifiers;
 369                              if (includeClassOrigin) value.uint32 |= CMPI_FLAG_IncludeClassOrigin;
 370 marek          1.124         eCtx->ft->addEntry(
 371                                  eCtx,
 372                                  CMPIInvocationFlags,
 373 kumpf          1.125             &value,
 374 marek          1.124             CMPI_uint32);
 375                          }
 376                      
 377                          // add identity context
 378                          const IdentityContainer container =
 379                          context->get(IdentityContainer::NAME);
 380                          eCtx->ft->addEntry(
 381                              eCtx,
 382                              CMPIPrincipal,
 383                              (CMPIValue*)(const char*)container.getUserName().getCString(),
 384                              CMPI_chars);
 385                      
 386                          // add AcceptLanguages to CMPI context
 387                          const AcceptLanguageListContainer accept_language=            
 388                          context->get(AcceptLanguageListContainer::NAME); 
 389                          const AcceptLanguageList acceptLangs = accept_language.getLanguages();
 390                      
 391                          eCtx->ft->addEntry(
 392                              eCtx,
 393                              CMPIAcceptLanguage,
 394                              (CMPIValue*)(const char*)
 395 marek          1.124             LanguageParser::buildAcceptLanguageHeader(acceptLangs).getCString(),
 396                              CMPI_chars);
 397                      
 398                          // add initial namespace to context
 399                          eCtx->ft->addEntry(
 400                          eCtx,
 401                          CMPIInitNameSpace,
 402                          (CMPIValue*)(const char*)nameSpace.getCString(),
 403                          CMPI_chars);
 404                      
 405                          // add remote info to context
 406                          if (remote)
 407                          {
 408                              CString info=pidc->getRemoteInfo().getCString();
 409                              eCtx->ft->addEntry(
 410                                  eCtx,
 411                                  "CMPIRRemoteInfo",(CMPIValue*)(const char*)info,
 412                                  CMPI_chars);
 413                          }
 414                      }
 415                      
 416 venkat.puvvada 1.108 Message * CMPIProviderManager::handleGetInstanceRequest(
 417                          const Message * message)
 418 marek          1.63  {
 419 ms.aruran      1.115     PEG_METHOD_ENTER(
 420                              TRC_PROVIDERMANAGER,
 421                              "CMPIProviderManager::handleGetInstanceRequest()");
 422 marek          1.63  
 423 kumpf          1.92      HandlerIntro(GetInstance,message,request,response,handler);
 424 marek          1.63  
 425 venkat.puvvada 1.108     try
 426                          {
 427 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
 428 marek          1.129             "CMPIProviderManager::handleGetInstanceRequest - Host name:"
 429                                  " %s  Name space: %s  Class name: %s",
 430                                  (const char*) System::getHostName().getCString(),
 431                                  (const char*) request->nameSpace.getString().getCString(),
 432                                  (const char*)
 433                                      request->instanceName.getClassName().getString().getCString()));
 434                              
 435 marek          1.63          // make target object path
 436                              CIMObjectPath objectPath(
 437                                  System::getHostName(),
 438                                  request->nameSpace,
 439                                  request->instanceName.getClassName(),
 440                                  request->instanceName.getKeyBindings());
 441                      
 442                              Boolean remote=false;
 443 venkat.puvvada 1.132         OpProviderHolder ph;
 444 marek          1.63  
 445                              // resolve provider name
 446 venkat.puvvada 1.108         ProviderIdContainer pidc = 
 447                                  request->operationContext.get(ProviderIdContainer::NAME);
 448                      
 449 marek          1.63          ProviderName name = _resolveProviderName(pidc);
 450                      
 451 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
 452                              {
 453                                  ph = providerManager.getRemoteProvider(
 454                                      name.getLocation(), name.getLogicalName());
 455 a.dunfey       1.85          }
 456 venkat.puvvada 1.108         else
 457                              {
 458 a.dunfey       1.85              // get cached or load new provider module
 459 venkat.puvvada 1.108             ph = providerManager.getProvider(
 460                                      name.getPhysicalName(), name.getLogicalName());
 461 marek          1.63          }
 462                      
 463                              // convert arguments
 464                              OperationContext context;
 465                      
 466                              context.insert(request->operationContext.get(IdentityContainer::NAME));
 467 venkat.puvvada 1.108         context.insert(
 468                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
 469                              context.insert(
 470                                  request->operationContext.get(ContentLanguageListContainer::NAME));
 471 marek          1.63          // forward request
 472                              CMPIProvider & pr=ph.GetProvider();
 473                      
 474 a.dunfey       1.85  #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
 475 venkat.puvvada 1.121         AutoPtr<NormalizerContext> tmpNormalizerContext(
 476 venkat.puvvada 1.132             new CIMOMHandleContext(*pr.getCIMOMHandle()));
 477 venkat.puvvada 1.121         request->operationContext.insert(
 478                                  NormalizerContextContainer(tmpNormalizerContext));
 479                      #endif
 480 a.dunfey       1.85  
 481 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
 482                                  "Calling provider.getInstance: %s",
 483                                  (const char*)pr.getName().getCString()));
 484 marek          1.63  
 485                              CMPIStatus rc={CMPI_RC_OK,NULL};
 486                              CMPI_ContextOnStack eCtx(context);
 487                              CMPI_ObjectPathOnStack eRef(objectPath);
 488 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
 489                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
 490 marek          1.63  
 491                              CMPIPropertyList props(request->propertyList);
 492 marek          1.124                 
 493                              _setupCMPIContexts(
 494 venkat.puvvada 1.108             &eCtx,
 495 marek          1.124             &context,
 496                                  &pidc,
 497                                  request->nameSpace.getString(),
 498                                  remote,
 499                                  request->includeQualifiers,
 500                                  request->includeClassOrigin,
 501                                  true);
 502 marek          1.63  
 503                              CMPIProvider::pm_service_op_lock op_lock(&pr);
 504                      
 505 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 506 marek          1.63  
 507 kumpf          1.92          {
 508                                  StatProviderTimeMeasurement providerTime(response);
 509 marek          1.63  
 510 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->getInstance(
 511                                      pr.getInstMI(),
 512 venkat.puvvada 1.108                 &eCtx,
 513                                      &eRes,
 514                                      &eRef,
 515 kumpf          1.92                  (const char **)props.getList());
 516                              }
 517 marek          1.63  
 518 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
 519                      //      Do this before checking rc from provider to throw exception in case 
 520                      //      rc.msg is also localized.
 521                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
 522 venkat.puvvada 1.108         CMPIData cldata = 
 523                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
 524 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
 525                              {
 526                                  response->operationContext.set(
 527                                      ContentLanguageListContainer(
 528 venkat.puvvada 1.108                 ContentLanguageList(
 529                                      LanguageParser::parseContentLanguageHeader(
 530 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
 531 dave.sudlik    1.103             handler.setContext(response->operationContext);
 532 dave.sudlik    1.99          }
 533                      
 534 marek          1.63          if (rc.rc!=CMPI_RC_OK)
 535 dave.sudlik    1.102         {
 536 venkat.puvvada 1.108             CIMException cimException(
 537                                      (CIMStatusCode)rc.rc,
 538 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
 539 venkat.puvvada 1.108 
 540                                  if (eRes.resError)
 541                                  {
 542                                      for (CMPI_Error* currErr=eRes.resError; 
 543 dave.sudlik    1.102                     currErr!=NULL; 
 544                                          currErr=currErr->nextError)
 545 venkat.puvvada 1.108                 {
 546                                          cimException.addError(
 547                                              ((CIMError*)currErr->hdl)->getInstance());
 548                                      }
 549                                  }
 550                                  throw cimException;
 551 dave.sudlik    1.102         }
 552 marek          1.63      }
 553                          HandlerCatch(handler);
 554                      
 555                          PEG_METHOD_EXIT();
 556                      
 557                          return(response);
 558                      }
 559                      
 560 venkat.puvvada 1.108 Message * CMPIProviderManager::handleEnumerateInstancesRequest(
 561                          const Message * message)
 562 marek          1.63  {
 563 ms.aruran      1.115     PEG_METHOD_ENTER(
 564                              TRC_PROVIDERMANAGER,
 565                              "CMPIProviderManager::handleEnumerateInstanceRequest()");
 566 marek          1.63  
 567 kumpf          1.92      HandlerIntro(EnumerateInstances,message,request,response,handler);
 568 venkat.puvvada 1.108     try
 569                          {
 570 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
 571 venkat.puvvada 1.108             "CMPIProviderManager::handleEnumerateInstancesRequest - Host name:"
 572 marek          1.129             " %s  Name space: %s  Class name: %s",
 573                                  (const char*) System::getHostName().getCString(),
 574                                  (const char*) request->nameSpace.getString().getCString(),
 575                                  (const char*) request->className.getString().getCString()));
 576 marek          1.63  
 577                              // make target object path
 578                              CIMObjectPath objectPath(
 579                                  System::getHostName(),
 580                                  request->nameSpace,
 581                                  request->className);
 582                      
 583                              Boolean remote=false;
 584 venkat.puvvada 1.132         OpProviderHolder ph;
 585 marek          1.63  
 586                              // resolve provider name
 587 venkat.puvvada 1.108         ProviderIdContainer pidc = 
 588                                  request->operationContext.get(ProviderIdContainer::NAME);
 589 marek          1.63          ProviderName name = _resolveProviderName(pidc);
 590                      
 591 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
 592                              {
 593                                  ph = providerManager.getRemoteProvider(
 594                                      name.getLocation(), name.getLogicalName());
 595                              }
 596                              else
 597                              {
 598                                  // get cached or load new provider module
 599                                  ph = providerManager.getProvider(
 600                                      name.getPhysicalName(), name.getLogicalName());
 601 marek          1.63          }
 602                      
 603                              // convert arguments
 604                              OperationContext context;
 605                      
 606                              context.insert(request->operationContext.get(IdentityContainer::NAME));
 607 venkat.puvvada 1.108         context.insert(
 608                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
 609                              context.insert(
 610                                  request->operationContext.get(ContentLanguageListContainer::NAME));
 611 marek          1.63  
 612                              CIMPropertyList propertyList(request->propertyList);
 613                      
 614                              // forward request
 615                              CMPIProvider & pr=ph.GetProvider();
 616                      
 617 a.dunfey       1.85  #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
 618 venkat.puvvada 1.121         AutoPtr<NormalizerContext> tmpNormalizerContext(
 619 venkat.puvvada 1.132             new CIMOMHandleContext(*pr.getCIMOMHandle()));
 620 venkat.puvvada 1.121         request->operationContext.insert(
 621                                  NormalizerContextContainer(tmpNormalizerContext));
 622                      #endif
 623 a.dunfey       1.85  
 624 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
 625                                  "Calling provider.enumerateInstances: %s",
 626                                   (const char*)pr.getName().getCString()));
 627 marek          1.63  
 628                              CMPIStatus rc={CMPI_RC_OK,NULL};
 629                              CMPI_ContextOnStack eCtx(context);
 630                              CMPI_ObjectPathOnStack eRef(objectPath);
 631 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
 632                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
 633 marek          1.63  
 634                              CMPIPropertyList props(propertyList);
 635                      
 636 marek          1.124         _setupCMPIContexts(
 637 venkat.puvvada 1.108             &eCtx,
 638 marek          1.124             &context,
 639                                  &pidc,
 640                                  request->nameSpace.getString(),
 641                                  remote,
 642                                  request->includeQualifiers,
 643                                  request->includeClassOrigin,
 644                                  true);
 645 marek          1.63  
 646                              CMPIProvider::pm_service_op_lock op_lock(&pr);
 647                      
 648 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 649 marek          1.63  
 650 kumpf          1.92          {
 651                                  StatProviderTimeMeasurement providerTime(response);
 652 marek          1.63  
 653 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->enumerateInstances(
 654                                      pr.getInstMI(),
 655 venkat.puvvada 1.108                 &eCtx,
 656                                      &eRes,
 657                                      &eRef,
 658 kumpf          1.92                  (const char **)props.getList());
 659                              }
 660 marek          1.63  
 661 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
 662                      //      Do this before checking rc from provider to throw exception in case 
 663                      //      rc.msg is also localized.
 664                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
 665 venkat.puvvada 1.108         CMPIData cldata = 
 666                                  eCtx.ft->getEntry(&eCtx, CMPIContentLanguage, &tmprc);
 667 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
 668                              {
 669                                  response->operationContext.set(
 670                                      ContentLanguageListContainer(
 671 venkat.puvvada 1.108                 ContentLanguageList(
 672                                      LanguageParser::parseContentLanguageHeader(
 673 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
 674 dave.sudlik    1.103             handler.setContext(response->operationContext);
 675 dave.sudlik    1.99          }
 676                      
 677 marek          1.63          if (rc.rc!=CMPI_RC_OK)
 678 dave.sudlik    1.102         {
 679 venkat.puvvada 1.108             CIMException cimException(
 680                                      (CIMStatusCode)rc.rc,
 681 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
 682 venkat.puvvada 1.108 
 683                                  if (eRes.resError)
 684                                  {
 685                                      for (CMPI_Error* currErr=eRes.resError; 
 686 dave.sudlik    1.102                     currErr!=NULL; 
 687                                          currErr=currErr->nextError)
 688 venkat.puvvada 1.108                 {
 689                                          cimException.addError(
 690                                              ((CIMError*)currErr->hdl)->getInstance());
 691                                      }
 692                                  }
 693                                  throw cimException;
 694 dave.sudlik    1.102         }
 695                      
 696 marek          1.63      }
 697                          HandlerCatch(handler);
 698                      
 699                          PEG_METHOD_EXIT();
 700                      
 701                          return(response);
 702                      }
 703                      
 704 venkat.puvvada 1.108 Message * CMPIProviderManager::handleEnumerateInstanceNamesRequest(
 705                          const Message * message)
 706 marek          1.63  {
 707 ms.aruran      1.115     PEG_METHOD_ENTER(
 708                              TRC_PROVIDERMANAGER,
 709                              "CMPIProviderManager::handleEnumerateInstanceNamesRequest()");
 710 marek          1.63  
 711 kumpf          1.92      HandlerIntro(EnumerateInstanceNames,message,request,response,handler);
 712 venkat.puvvada 1.108     try
 713                          {
 714 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
 715 marek          1.129             "CMPIProviderManager::handleEnumerateInstanceNamesRequest"
 716                                  " - Host name: %s  Name space: %s  Class name: %s",
 717                                  (const char*) System::getHostName().getCString(),
 718                                  (const char*) request->nameSpace.getString().getCString(),
 719                                  (const char*) request->className.getString().getCString()));
 720 marek          1.63  
 721 venkat.puvvada 1.108         // make target object path
 722 marek          1.63          CIMObjectPath objectPath(
 723                                  System::getHostName(),
 724                                  request->nameSpace,
 725                                  request->className);
 726                      
 727                              Boolean remote=false;
 728 venkat.puvvada 1.132         OpProviderHolder ph;
 729 marek          1.63  
 730                              // resolve provider name
 731 venkat.puvvada 1.108         ProviderIdContainer pidc = 
 732                                  request->operationContext.get(ProviderIdContainer::NAME);
 733 marek          1.63          ProviderName name = _resolveProviderName(pidc);
 734                      
 735 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
 736                              {
 737                                  ph = providerManager.getRemoteProvider(
 738                                      name.getLocation(), name.getLogicalName());
 739 marek          1.63          }
 740 venkat.puvvada 1.108         else
 741                              {
 742                                  // get cached or load new provider module
 743                                  ph = providerManager.getProvider(
 744                                      name.getPhysicalName(), name.getLogicalName());
 745 marek          1.63          }
 746                      
 747                              // convert arguments
 748                              OperationContext context;
 749                      
 750                              context.insert(request->operationContext.get(IdentityContainer::NAME));
 751 venkat.puvvada 1.108         context.insert(
 752                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
 753                              context.insert(
 754                                  request->operationContext.get(ContentLanguageListContainer::NAME));
 755 marek          1.63          CMPIProvider & pr=ph.GetProvider();
 756                      
 757 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
 758                                  "Calling provider.enumerateInstanceNames: %s",
 759                                  (const char*)pr.getName().getCString()));
 760 marek          1.63  
 761                              CMPIStatus rc={CMPI_RC_OK,NULL};
 762                              CMPI_ContextOnStack eCtx(context);
 763                              CMPI_ObjectPathOnStack eRef(objectPath);
 764 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
 765                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
 766 marek          1.63  
 767 marek          1.124         _setupCMPIContexts(
 768 venkat.puvvada 1.108             &eCtx,
 769 marek          1.124             &context,
 770                                  &pidc,
 771                                  request->nameSpace.getString(),
 772                                  remote,
 773                                  false,
 774                                  false,
 775                                  true);
 776 marek          1.63  
 777                              CMPIProvider::pm_service_op_lock op_lock(&pr);
 778                      
 779 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 780 venkat.puvvada 1.108 
 781 kumpf          1.92          {
 782                                  StatProviderTimeMeasurement providerTime(response);
 783 marek          1.63  
 784 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->enumerateInstanceNames(
 785                                      pr.getInstMI(),
 786                                      &eCtx,
 787                                      &eRes,
 788                                      &eRef);
 789 kumpf          1.92          }
 790 marek          1.63  
 791 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
 792                      //      Do this before checking rc from provider to throw exception in case 
 793                      //      rc.msg is also localized.
 794                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
 795 venkat.puvvada 1.108         CMPIData cldata = 
 796                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
 797 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
 798                              {
 799                                  response->operationContext.set(
 800                                      ContentLanguageListContainer(
 801 venkat.puvvada 1.108                 ContentLanguageList(
 802                                      LanguageParser::parseContentLanguageHeader(
 803 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
 804 dave.sudlik    1.103             handler.setContext(response->operationContext);
 805 dave.sudlik    1.99          }
 806                      
 807 marek          1.63          if (rc.rc!=CMPI_RC_OK)
 808 dave.sudlik    1.102         {
 809 venkat.puvvada 1.108             CIMException cimException(
 810                                      (CIMStatusCode)rc.rc,
 811 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
 812 venkat.puvvada 1.108 
 813                                  if (eRes.resError)
 814                                  {
 815                                      for (CMPI_Error* currErr=eRes.resError; 
 816 dave.sudlik    1.102                     currErr!=NULL; 
 817                                          currErr=currErr->nextError)
 818 venkat.puvvada 1.108                 {
 819                                          cimException.addError(
 820                                              ((CIMError*)currErr->hdl)->getInstance());
 821                                      }
 822                                  }
 823                                  throw cimException;
 824 dave.sudlik    1.102         }
 825 marek          1.63      }
 826                          HandlerCatch(handler);
 827                      
 828                          PEG_METHOD_EXIT();
 829                      
 830                          return(response);
 831                      }
 832                      
 833 venkat.puvvada 1.108 Message * CMPIProviderManager::handleCreateInstanceRequest(
 834                          const Message * message)
 835 marek          1.63  {
 836 ms.aruran      1.115     PEG_METHOD_ENTER(
 837                              TRC_PROVIDERMANAGER,
 838                              "CMPIProviderManager::handleCreateInstanceRequest()");
 839 marek          1.63  
 840 kumpf          1.92      HandlerIntro(CreateInstance,message,request,response,handler);
 841 venkat.puvvada 1.108     try
 842                          {
 843 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
 844 marek          1.129             "CMPIProviderManager::handleCreateInstanceRequest"
 845                                  " - Host name: %s  Name space: %s  Class name: %s",
 846                                  (const char*) System::getHostName().getCString(),
 847                                  (const char*) request->nameSpace.getString().getCString(),
 848                                  (const char*)
 849                                request->newInstance.getPath().getClassName().getString().getCString()
 850                              ));
 851 marek          1.63  
 852                              // make target object path
 853                              CIMObjectPath objectPath(
 854                                  System::getHostName(),
 855                                  request->nameSpace,
 856                                  request->newInstance.getPath().getClassName(),
 857                                  request->newInstance.getPath().getKeyBindings());
 858 venkat.puvvada 1.108         request->newInstance.setPath(objectPath);
 859 marek          1.63  
 860                              Boolean remote=false;
 861 venkat.puvvada 1.132         OpProviderHolder ph;
 862 marek          1.63  
 863                              // resolve provider name
 864 venkat.puvvada 1.108         ProviderIdContainer pidc = 
 865                                  request->operationContext.get(ProviderIdContainer::NAME);
 866 marek          1.63          ProviderName name = _resolveProviderName(pidc);
 867                      
 868 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
 869                              {
 870                                  ph = providerManager.getRemoteProvider(
 871                                      name.getLocation(), name.getLogicalName());
 872                              }
 873                              else
 874                              {
 875                                  // get cached or load new provider module
 876                                  ph = providerManager.getProvider(
 877                                      name.getPhysicalName(), name.getLogicalName());
 878 marek          1.63          }
 879                      
 880                              // convert arguments
 881                              OperationContext context;
 882                      
 883                              context.insert(request->operationContext.get(IdentityContainer::NAME));
 884 venkat.puvvada 1.108         context.insert(
 885                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
 886                              context.insert(
 887                                  request->operationContext.get(ContentLanguageListContainer::NAME));
 888 marek          1.63          // forward request
 889                              CMPIProvider & pr=ph.GetProvider();
 890                      
 891 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
 892                                  "Calling provider.createInstance: %s",
 893                                  (const char*)ph.GetProvider().getName().getCString()));
 894 marek          1.63  
 895                              CMPIStatus rc={CMPI_RC_OK,NULL};
 896                              CMPI_ContextOnStack eCtx(context);
 897                              CMPI_ObjectPathOnStack eRef(objectPath);
 898 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
 899 marek          1.63          CMPI_InstanceOnStack eInst(request->newInstance);
 900 venkat.puvvada 1.132         CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
 901 marek          1.63  
 902 marek          1.124         _setupCMPIContexts(
 903 venkat.puvvada 1.108             &eCtx,
 904 marek          1.124             &context,
 905                                  &pidc,
 906                                  request->nameSpace.getString(),
 907                                  remote,
 908                                  false,
 909                                  false,
 910                                  true);
 911 marek          1.63  
 912                              CMPIProvider::pm_service_op_lock op_lock(&pr);
 913                      
 914 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
 915 marek          1.63  
 916 kumpf          1.92          {
 917                                  StatProviderTimeMeasurement providerTime(response);
 918 marek          1.63  
 919 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->createInstance(
 920                                      pr.getInstMI(),
 921                                      &eCtx,
 922                                      &eRes,
 923                                      &eRef,
 924                                      &eInst);
 925 kumpf          1.92          }
 926 marek          1.63  
 927 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
 928                      //      Do this before checking rc from provider to throw exception in case 
 929                      //      rc.msg is also localized.
 930                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
 931 venkat.puvvada 1.108         CMPIData cldata = 
 932                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
 933 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
 934                              {
 935                                  response->operationContext.set(
 936                                      ContentLanguageListContainer(
 937 venkat.puvvada 1.108                 ContentLanguageList(
 938                                      LanguageParser::parseContentLanguageHeader(
 939 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
 940 dave.sudlik    1.103             handler.setContext(response->operationContext);
 941 dave.sudlik    1.99          }
 942                      
 943 marek          1.63          if (rc.rc!=CMPI_RC_OK)
 944 dave.sudlik    1.102         {
 945 venkat.puvvada 1.108             CIMException cimException(
 946                                      (CIMStatusCode)rc.rc,
 947 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
 948 venkat.puvvada 1.108 
 949                                  if (eRes.resError)
 950                                  {
 951                                      for (CMPI_Error* currErr=eRes.resError; 
 952 dave.sudlik    1.102                     currErr!=NULL; 
 953                                          currErr=currErr->nextError)
 954 venkat.puvvada 1.108                 {
 955                                          cimException.addError(
 956                                              ((CIMError*)currErr->hdl)->getInstance());
 957                                      }
 958                                  }
 959                                  throw cimException;
 960 dave.sudlik    1.102         }
 961 marek          1.63      }
 962                          HandlerCatch(handler);
 963                      
 964                          PEG_METHOD_EXIT();
 965                      
 966                          return(response);
 967                      }
 968                      
 969 venkat.puvvada 1.108 Message * CMPIProviderManager::handleModifyInstanceRequest(
 970                          const Message * message)
 971 marek          1.63  {
 972 ms.aruran      1.115     PEG_METHOD_ENTER(
 973                              TRC_PROVIDERMANAGER,
 974                              "CMPIProviderManager::handleModifyInstanceRequest()");
 975 marek          1.63  
 976 kumpf          1.92      HandlerIntro(ModifyInstance,message,request,response,handler);
 977 venkat.puvvada 1.108     try
 978                          {
 979 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
 980 marek          1.129             "CMPIProviderManager::handleModifyInstanceRequest"
 981                                  " - Host name: %s  Name space: %s  Class name: %s",
 982                                  (const char*) System::getHostName().getCString(),
 983                                  (const char*) request->nameSpace.getString().getCString(),
 984                                  (const char*) request->modifiedInstance.\
 985                                      getPath().getClassName().getString().getCString()));
 986 marek          1.63  
 987                              // make target object path
 988                              CIMObjectPath objectPath(
 989                                  System::getHostName(),
 990                                  request->nameSpace,
 991                                  request->modifiedInstance.getPath ().getClassName(),
 992                                  request->modifiedInstance.getPath ().getKeyBindings());
 993                      
 994                              Boolean remote=false;
 995 venkat.puvvada 1.132         OpProviderHolder ph;
 996 marek          1.63  
 997                              // resolve provider name
 998 venkat.puvvada 1.108         ProviderIdContainer pidc = 
 999                                  request->operationContext.get(ProviderIdContainer::NAME);
1000 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1001                      
1002 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1003                              {
1004                                  ph = providerManager.getRemoteProvider(
1005                                      name.getLocation(), name.getLogicalName());
1006 marek          1.63          }
1007 venkat.puvvada 1.108         else
1008                              {
1009                                  // get cached or load new provider module
1010                                  ph = providerManager.getProvider(
1011                                      name.getPhysicalName(), name.getLogicalName());
1012 marek          1.63          }
1013                      
1014                              // convert arguments
1015                              OperationContext context;
1016                      
1017                              context.insert(request->operationContext.get(IdentityContainer::NAME));
1018 venkat.puvvada 1.108         context.insert(
1019                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1020                              context.insert(
1021                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1022 marek          1.63          // forward request
1023                              CMPIProvider & pr=ph.GetProvider();
1024                      
1025 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1026                                  "Calling provider.modifyInstance: %s",
1027                                  (const char*)pr.getName().getCString()));
1028 marek          1.63  
1029                              CMPIStatus rc={CMPI_RC_OK,NULL};
1030                              CMPI_ContextOnStack eCtx(context);
1031                              CMPI_ObjectPathOnStack eRef(objectPath);
1032 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1033 marek          1.63          CMPI_InstanceOnStack eInst(request->modifiedInstance);
1034 venkat.puvvada 1.132         CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1035 marek          1.63  
1036                              CMPIPropertyList props(request->propertyList);
1037                      
1038 marek          1.124         _setupCMPIContexts(
1039 venkat.puvvada 1.108             &eCtx,
1040 marek          1.124             &context,
1041                                  &pidc,
1042                                  request->nameSpace.getString(),
1043                                  remote,
1044                                  request->includeQualifiers,
1045                                  false,
1046                                  true);
1047 marek          1.63  
1048                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1049                      
1050 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1051 marek          1.63  
1052 kumpf          1.92          {
1053                                  StatProviderTimeMeasurement providerTime(response);
1054 marek          1.63  
1055 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->modifyInstance(
1056                                      pr.getInstMI(),
1057                                      &eCtx,
1058                                      &eRes,
1059                                      &eRef,
1060                                      &eInst,
1061 kumpf          1.92                  (const char **)props.getList());
1062                              }
1063 marek          1.63  
1064 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1065                      //      Do this before checking rc from provider to throw exception in case 
1066                      //      rc.msg is also localized.
1067                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1068 venkat.puvvada 1.108         CMPIData cldata = 
1069                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
1070 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1071                              {
1072                                  response->operationContext.set(
1073                                      ContentLanguageListContainer(
1074 venkat.puvvada 1.108                 ContentLanguageList(
1075                                      LanguageParser::parseContentLanguageHeader(
1076 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1077 dave.sudlik    1.103             handler.setContext(response->operationContext);
1078 dave.sudlik    1.99          }
1079                      
1080 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1081 dave.sudlik    1.102         {
1082 venkat.puvvada 1.108             CIMException cimException(
1083                                      (CIMStatusCode)rc.rc,
1084 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1085 venkat.puvvada 1.108 
1086                                  if (eRes.resError)
1087                                  {
1088                                      for (CMPI_Error* currErr=eRes.resError; 
1089 dave.sudlik    1.102                     currErr!=NULL; 
1090                                          currErr=currErr->nextError)
1091 venkat.puvvada 1.108                 {
1092                                          cimException.addError(
1093                                              ((CIMError*)currErr->hdl)->getInstance());
1094                                      }
1095                                  }
1096                                  throw cimException;
1097 dave.sudlik    1.102         }
1098 marek          1.63      }
1099                          HandlerCatch(handler);
1100                      
1101                          PEG_METHOD_EXIT();
1102                      
1103                          return(response);
1104                      }
1105                      
1106 venkat.puvvada 1.108 Message * CMPIProviderManager::handleDeleteInstanceRequest(
1107                          const Message * message)
1108 marek          1.63  {
1109 ms.aruran      1.115     PEG_METHOD_ENTER(
1110                              TRC_PROVIDERMANAGER,
1111                              "CMPIProviderManager::handleDeleteInstanceRequest()");
1112 marek          1.63  
1113 kumpf          1.92      HandlerIntro(DeleteInstance,message,request,response,handler);
1114 venkat.puvvada 1.108     try
1115                          {
1116 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1117 marek          1.129             "CMPIProviderManager::handleDeleteInstanceRequest"
1118                                  " - Host name: %s  Name space: %s  Class name: %s",
1119                                  (const char*) System::getHostName().getCString(),
1120                                  (const char*) request->nameSpace.getString().getCString(),
1121                                  (const char*)
1122                                      request->instanceName.getClassName().getString().getCString()));
1123                              
1124 marek          1.63          // make target object path
1125                              CIMObjectPath objectPath(
1126                                  System::getHostName(),
1127                                  request->nameSpace,
1128                                  request->instanceName.getClassName(),
1129                                  request->instanceName.getKeyBindings());
1130                      
1131                              Boolean remote=false;
1132 venkat.puvvada 1.132         OpProviderHolder ph;
1133 marek          1.63  
1134                              // resolve provider name
1135 venkat.puvvada 1.108         ProviderIdContainer pidc = 
1136                                  request->operationContext.get(ProviderIdContainer::NAME);
1137 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1138                      
1139 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1140                              {
1141                                  ph = providerManager.getRemoteProvider(
1142                                      name.getLocation(), name.getLogicalName());
1143 marek          1.63          }
1144 venkat.puvvada 1.108         else
1145                              {
1146                                  // get cached or load new provider module
1147                                  ph = providerManager.getProvider(
1148                                      name.getPhysicalName(), name.getLogicalName());
1149 marek          1.63          }
1150                      
1151                              // convert arguments
1152                              OperationContext context;
1153                      
1154                              context.insert(request->operationContext.get(IdentityContainer::NAME));
1155 venkat.puvvada 1.108         context.insert(
1156                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1157                              context.insert(
1158                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1159 marek          1.63          // forward request
1160                              CMPIProvider & pr=ph.GetProvider();
1161                      
1162 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1163                                  "Calling provider.deleteInstance: %s",
1164                                  (const char*)pr.getName().getCString()));
1165 marek          1.63  
1166                              CMPIStatus rc={CMPI_RC_OK,NULL};
1167                              CMPI_ContextOnStack eCtx(context);
1168                              CMPI_ObjectPathOnStack eRef(objectPath);
1169 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1170                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1171 marek          1.63  
1172 marek          1.124         _setupCMPIContexts(
1173 venkat.puvvada 1.108             &eCtx,
1174 marek          1.124             &context,
1175                                  &pidc,
1176                                  request->nameSpace.getString(),
1177                                  remote,
1178                                  false,
1179                                  false,
1180                                  true);
1181 marek          1.63  
1182                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1183                      
1184 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1185 marek          1.63  
1186 kumpf          1.92          {
1187                                  StatProviderTimeMeasurement providerTime(response);
1188 marek          1.63  
1189 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->deleteInstance(
1190                                      pr.getInstMI(),
1191                                      &eCtx,
1192                                      &eRes,
1193                                      &eRef);
1194 kumpf          1.92          }
1195 marek          1.63  
1196 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1197                      //      Do this before checking rc from provider to throw exception in case 
1198                      //      rc.msg is also localized.
1199                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1200 venkat.puvvada 1.108         CMPIData cldata = 
1201                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
1202 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1203                              {
1204                                  response->operationContext.set(
1205                                      ContentLanguageListContainer(
1206 venkat.puvvada 1.108                 ContentLanguageList(
1207                                      LanguageParser::parseContentLanguageHeader(
1208 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1209 dave.sudlik    1.103             handler.setContext(response->operationContext);
1210 dave.sudlik    1.99          }
1211                      
1212 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1213 dave.sudlik    1.102         {
1214 venkat.puvvada 1.108             CIMException cimException(
1215                                      (CIMStatusCode)rc.rc,
1216 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1217 venkat.puvvada 1.108 
1218                                  if (eRes.resError)
1219                                  {
1220                                      for (CMPI_Error* currErr=eRes.resError; 
1221 dave.sudlik    1.102                     currErr!=NULL; 
1222                                          currErr=currErr->nextError)
1223 venkat.puvvada 1.108                 {
1224                                          cimException.addError(
1225                                              ((CIMError*)currErr->hdl)->getInstance());
1226                                      }
1227                                  }
1228                                  throw cimException;
1229 dave.sudlik    1.102         }
1230 marek          1.63      }
1231                          HandlerCatch(handler);
1232                      
1233                          PEG_METHOD_EXIT();
1234                      
1235                          return(response);
1236                      }
1237                      
1238                      Message * CMPIProviderManager::handleExecQueryRequest(const Message * message)
1239                      {
1240 ms.aruran      1.115     PEG_METHOD_ENTER(
1241                              TRC_PROVIDERMANAGER,
1242                              "CMPIProviderManager::handleExecQueryRequest()");
1243 marek          1.63  
1244 kumpf          1.92      HandlerIntro(ExecQuery,message,request,response,handler);
1245 marek          1.63  
1246 venkat.puvvada 1.108     try
1247                          {
1248 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1249 marek          1.129             "CMPIProviderManager::ExecQueryRequest"
1250                                  " - Host name: %s  Name space: %s  Class name: %s",
1251                                  (const char*) System::getHostName().getCString(),
1252                                  (const char*) request->nameSpace.getString().getCString(),
1253                                  (const char*) request->className.getString().getCString()));
1254 marek          1.63  
1255                              // make target object path
1256                              CIMObjectPath objectPath(
1257                                  System::getHostName(),
1258                                  request->nameSpace,
1259                                  request->className);
1260                      
1261                              Boolean remote=false;
1262                      
1263 venkat.puvvada 1.132         OpProviderHolder ph;
1264 marek          1.63  
1265                              // resolve provider name
1266 venkat.puvvada 1.108         ProviderIdContainer pidc = 
1267                                  request->operationContext.get(ProviderIdContainer::NAME);
1268 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1269                      
1270 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1271                              {
1272                                  ph = providerManager.getRemoteProvider(
1273                                      name.getLocation(), name.getLogicalName());
1274 marek          1.63          }
1275 venkat.puvvada 1.108         else
1276                              {
1277                                  // get cached or load new provider module
1278                                  ph = providerManager.getProvider(
1279                                      name.getPhysicalName(), name.getLogicalName());
1280 marek          1.63          }
1281                      
1282                              // convert arguments
1283                              OperationContext context;
1284                      
1285                              context.insert(request->operationContext.get(IdentityContainer::NAME));
1286 venkat.puvvada 1.108         context.insert(
1287                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1288                              context.insert(
1289                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1290 marek          1.63  
1291                              // forward request
1292                              CMPIProvider & pr=ph.GetProvider();
1293                      
1294 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1295                                  "Calling provider.execQuery: %s",
1296                                  (const char*)pr.getName().getCString()));
1297 marek          1.63  
1298                              const char **props=NULL;
1299                      
1300                              CMPIStatus rc={CMPI_RC_OK,NULL};
1301                              CMPI_ContextOnStack eCtx(context);
1302                              CMPI_ObjectPathOnStack eRef(objectPath);
1303 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1304                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1305 marek          1.63  
1306                              const CString queryLan=request->queryLanguage.getCString();
1307                              const CString query=request->query.getCString();
1308                      
1309 marek          1.124         _setupCMPIContexts(
1310 venkat.puvvada 1.108             &eCtx,
1311 marek          1.124             &context,
1312                                  &pidc,
1313                                  request->nameSpace.getString(),
1314                                  remote,
1315                                  false,
1316                                  false,
1317                                  true);
1318 marek          1.63  
1319                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1320                      
1321 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1322 marek          1.63  
1323 kumpf          1.92          {
1324                                  StatProviderTimeMeasurement providerTime(response);
1325 marek          1.63  
1326 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->execQuery(
1327                                      pr.getInstMI(),
1328                                      &eCtx,
1329                                      &eRes,
1330                                      &eRef,
1331                                      CHARS(queryLan),
1332                                      CHARS(query));
1333 kumpf          1.92          }
1334 marek          1.63  
1335 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1336                      //      Do this before checking rc from provider to throw exception in case 
1337                      //      rc.msg is also localized.
1338                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1339 venkat.puvvada 1.108         CMPIData cldata = 
1340                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
1341 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1342                              {
1343                                  response->operationContext.set(
1344                                      ContentLanguageListContainer(
1345 venkat.puvvada 1.108                 ContentLanguageList(
1346                                      LanguageParser::parseContentLanguageHeader(
1347 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1348 dave.sudlik    1.103             handler.setContext(response->operationContext);
1349 dave.sudlik    1.99          }
1350                      
1351 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1352 dave.sudlik    1.102         {
1353 venkat.puvvada 1.108             CIMException cimException(
1354                                      (CIMStatusCode)rc.rc,
1355 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1356 venkat.puvvada 1.108 
1357                                  if (eRes.resError)
1358                                  {
1359                                      for (CMPI_Error* currErr=eRes.resError; 
1360 dave.sudlik    1.102                     currErr!=NULL; 
1361                                          currErr=currErr->nextError)
1362 venkat.puvvada 1.108                 {
1363                                          cimException.addError(
1364                                              ((CIMError*)currErr->hdl)->getInstance());
1365                                      }
1366                                  }
1367                                  throw cimException;
1368 dave.sudlik    1.102         }
1369                      
1370 marek          1.63      }
1371                          HandlerCatch(handler);
1372                      
1373                          PEG_METHOD_EXIT();
1374                      
1375                          return(response);
1376                      }
1377                      
1378                      Message * CMPIProviderManager::handleAssociatorsRequest(const Message * message)
1379                      {
1380 ms.aruran      1.115     PEG_METHOD_ENTER(
1381                              TRC_PROVIDERMANAGER,
1382                              "CMPIProviderManager::handleAssociatorsRequest()");
1383 marek          1.63  
1384 kumpf          1.92      HandlerIntro(Associators,message,request,response,handler);
1385 venkat.puvvada 1.108     try
1386                          {
1387 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1388 marek          1.129             "CMPIProviderManager::handleAssociatorsRequest"
1389                                  " - Host name: %s  Name space: %s  Class name: %s",
1390                                  (const char*) System::getHostName().getCString(),
1391                                  (const char*) request->nameSpace.getString().getCString(),
1392                                  (const char*)
1393                                      request->objectName.getClassName().getString().getCString()));
1394 marek          1.63  
1395                              // make target object path
1396                              CIMObjectPath objectPath(
1397                                  System::getHostName(),
1398                                  request->nameSpace,
1399                                  request->objectName.getClassName());
1400                      
1401                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1402                      
1403                              CIMObjectPath assocPath(
1404                                  System::getHostName(),
1405                                  request->nameSpace,
1406                                  request->assocClass.getString());
1407                      
1408                              Boolean remote=false;
1409                      
1410 venkat.puvvada 1.132         OpProviderHolder ph;
1411 marek          1.63  
1412                              // resolve provider name
1413 venkat.puvvada 1.108         ProviderIdContainer pidc = 
1414                                  request->operationContext.get(ProviderIdContainer::NAME);
1415 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1416                      
1417 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1418                              {
1419                                  ph = providerManager.getRemoteProvider(
1420                                      name.getLocation(), name.getLogicalName());
1421 marek          1.63          }
1422 venkat.puvvada 1.108         else
1423                              {
1424                                  // get cached or load new provider module
1425                                  ph = providerManager.getProvider(
1426                                      name.getPhysicalName(), name.getLogicalName());
1427 marek          1.63          }
1428                      
1429 venkat.puvvada 1.108         // convert arguments
1430 marek          1.63          OperationContext context;
1431                      
1432                              context.insert(request->operationContext.get(IdentityContainer::NAME));
1433 venkat.puvvada 1.108         context.insert(
1434                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1435                              context.insert(
1436                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1437 marek          1.63  
1438                              // forward request
1439                              CMPIProvider & pr=ph.GetProvider();
1440                      
1441 a.dunfey       1.85  #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
1442 venkat.puvvada 1.121         AutoPtr<NormalizerContext> tmpNormalizerContext(
1443 venkat.puvvada 1.132             new CIMOMHandleContext(*pr.getCIMOMHandle()));
1444 venkat.puvvada 1.121         request->operationContext.insert(
1445                                  NormalizerContextContainer(tmpNormalizerContext));
1446                      #endif
1447 a.dunfey       1.85  
1448 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1449                                  "Calling provider.associators: %s",
1450                                  (const char*)pr.getName().getCString()));
1451                      
1452                              PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1453                                  "--- CMPIProviderManager::associators < role: > %s%s",
1454                                  (const char*)request->role.getCString(),
1455                                  (const char*)request->assocClass.getString().getCString()));
1456 marek          1.63  
1457                              CMPIStatus rc={CMPI_RC_OK,NULL};
1458                              CMPI_ContextOnStack eCtx(context);
1459                              CMPI_ObjectPathOnStack eRef(objectPath);
1460 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1461                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1462 marek          1.63          const CString aClass=request->assocClass.getString().getCString();
1463                              const CString rClass=request->resultClass.getString().getCString();
1464                              const CString rRole=request->role.getCString();
1465                              const CString resRole=request->resultRole.getCString();
1466                      
1467                              CMPIPropertyList props(request->propertyList);
1468                      
1469 marek          1.124         _setupCMPIContexts(
1470 venkat.puvvada 1.108             &eCtx,
1471 marek          1.124             &context,
1472                                  &pidc,
1473                                  request->nameSpace.getString(),
1474                                  remote,
1475                                  request->includeQualifiers,
1476                                  request->includeClassOrigin,
1477                                  true);
1478 marek          1.63  
1479                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1480                      
1481 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1482 marek          1.63  
1483 kumpf          1.92          {
1484                                  StatProviderTimeMeasurement providerTime(response);
1485 marek          1.63  
1486 venkat.puvvada 1.132             rc = pr.getAssocMI()->ft->associators(
1487                                      pr.getAssocMI(),
1488                                      &eCtx,
1489                                      &eRes,
1490                                      &eRef,
1491                                      CHARS(aClass),
1492                                      CHARS(rClass),
1493                                      CHARS(rRole),
1494                                      CHARS(resRole),
1495 kumpf          1.92                  (const char **)props.getList());
1496                              }
1497 marek          1.63  
1498 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1499                      //      Do this before checking rc from provider to throw exception in case 
1500                      //      rc.msg is also localized.
1501                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1502 venkat.puvvada 1.108         CMPIData cldata = eCtx.ft->getEntry (
1503                                  &eCtx, 
1504                                  CMPIContentLanguage, 
1505                                  &tmprc);
1506 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1507                              {
1508                                  response->operationContext.set(
1509                                      ContentLanguageListContainer(
1510 venkat.puvvada 1.108                 ContentLanguageList(
1511                                      LanguageParser::parseContentLanguageHeader(
1512 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1513 dave.sudlik    1.103             handler.setContext(response->operationContext);
1514 dave.sudlik    1.99          }
1515                      
1516 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1517 dave.sudlik    1.102         {
1518 venkat.puvvada 1.108             CIMException cimException(
1519                                      (CIMStatusCode)rc.rc,
1520 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1521 venkat.puvvada 1.108 
1522                                  if (eRes.resError)
1523                                  {
1524                                      for (CMPI_Error* currErr=eRes.resError; 
1525 dave.sudlik    1.102                     currErr!=NULL; 
1526                                          currErr=currErr->nextError)
1527 venkat.puvvada 1.108                 {
1528                                          cimException.addError(
1529                                              ((CIMError*)currErr->hdl)->getInstance());
1530                                      }
1531                                  }
1532                                  throw cimException;
1533 dave.sudlik    1.102         }
1534 marek          1.63      }
1535                          HandlerCatch(handler);
1536                      
1537                          PEG_METHOD_EXIT();
1538                      
1539                          return(response);
1540                      }
1541                      
1542 venkat.puvvada 1.108 Message * CMPIProviderManager::handleAssociatorNamesRequest(
1543                          const Message * message)
1544 marek          1.63  {
1545 ms.aruran      1.115     PEG_METHOD_ENTER(
1546                              TRC_PROVIDERMANAGER,
1547                              "CMPIProviderManager::handleAssociatorNamesRequest()");
1548 marek          1.63  
1549 kumpf          1.92      HandlerIntro(AssociatorNames,message,request,response,handler);
1550 venkat.puvvada 1.108     try
1551                          {
1552 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1553 marek          1.129             "CMPIProviderManager::handleAssociatorNamesRequest"
1554                                  " - Host name: %s  Name space: %s  Class name: %s",
1555                                  (const char*) System::getHostName().getCString(),
1556                                  (const char*) request->nameSpace.getString().getCString(),
1557                                  (const char*)
1558                                      request->objectName.getClassName().getString().getCString()));
1559 marek          1.63  
1560                              // make target object path
1561                              CIMObjectPath objectPath(
1562                                  System::getHostName(),
1563                                  request->nameSpace,
1564                                  request->objectName.getClassName());
1565                      
1566                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1567                      
1568                              CIMObjectPath assocPath(
1569                                  System::getHostName(),
1570                                  request->nameSpace,
1571                                  request->assocClass.getString());
1572                      
1573                              Boolean remote=false;
1574 venkat.puvvada 1.132         OpProviderHolder ph;
1575 marek          1.63  
1576                              // resolve provider name
1577 venkat.puvvada 1.108         ProviderIdContainer pidc = 
1578                                  request->operationContext.get(ProviderIdContainer::NAME);
1579 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1580                      
1581 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1582                              {
1583                                  ph = providerManager.getRemoteProvider(
1584                                      name.getLocation(), name.getLogicalName());
1585 marek          1.63          }
1586 venkat.puvvada 1.108         else
1587                              {
1588                                  // get cached or load new provider module
1589                                  ph = providerManager.getProvider(
1590                                      name.getPhysicalName(), name.getLogicalName());
1591 marek          1.63          }
1592                      
1593                              // convert arguments
1594                              OperationContext context;
1595                      
1596                              context.insert(request->operationContext.get(IdentityContainer::NAME));
1597 venkat.puvvada 1.108         context.insert(
1598                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1599                              context.insert(
1600                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1601 marek          1.63  
1602                              // forward request
1603                              CMPIProvider & pr=ph.GetProvider();
1604                      
1605 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1606                                  "Calling provider.associatorNames: %s",
1607                                  (const char*)pr.getName().getCString()));
1608                      
1609                              PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1610                                  "--- CMPIProviderManager::associatorNames --  role: %s< aCls %s", 
1611                                  (const char*)request->role.getCString(),
1612                                  (const char*)request->assocClass.getString().getCString()));
1613 marek          1.63  
1614                              CMPIStatus rc={CMPI_RC_OK,NULL};
1615                              CMPI_ContextOnStack eCtx(context);
1616                              CMPI_ObjectPathOnStack eRef(objectPath);
1617 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1618                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1619 marek          1.63          const CString aClass=request->assocClass.getString().getCString();
1620                              const CString rClass=request->resultClass.getString().getCString();
1621                              const CString rRole=request->role.getCString();
1622                              const CString resRole=request->resultRole.getCString();
1623                      
1624 marek          1.124         _setupCMPIContexts(
1625 venkat.puvvada 1.108             &eCtx,
1626 marek          1.124             &context,
1627                                  &pidc,
1628                                  request->nameSpace.getString(),
1629                                  remote,
1630                                  false,
1631                                  false,
1632                                  true);
1633 marek          1.63  
1634                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1635                      
1636 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1637 marek          1.63  
1638 kumpf          1.92          {
1639                                  StatProviderTimeMeasurement providerTime(response);
1640 marek          1.63  
1641 venkat.puvvada 1.132             rc = pr.getAssocMI()->ft->associatorNames(
1642                                      pr.getAssocMI(),
1643                                      &eCtx,
1644                                      &eRes,
1645                                      &eRef,
1646                                      CHARS(aClass),
1647                                      CHARS(rClass),
1648                                      CHARS(rRole),
1649                                      CHARS(resRole));
1650 kumpf          1.92          }
1651 marek          1.63  
1652 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1653                      //      Do this before checking rc from provider to throw exception in case 
1654                      //      rc.msg is also localized.
1655                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1656 venkat.puvvada 1.108         CMPIData cldata = 
1657                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
1658 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1659                              {
1660                                  response->operationContext.set(
1661                                      ContentLanguageListContainer(
1662 venkat.puvvada 1.108                 ContentLanguageList(
1663                                      LanguageParser::parseContentLanguageHeader(
1664 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1665 dave.sudlik    1.103             handler.setContext(response->operationContext);
1666 dave.sudlik    1.99          }
1667                      
1668 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1669 dave.sudlik    1.102         {
1670 venkat.puvvada 1.108             CIMException cimException(
1671                                      (CIMStatusCode)rc.rc,
1672 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1673 venkat.puvvada 1.108 
1674                                  if (eRes.resError)
1675                                  {
1676                                      for (CMPI_Error* currErr=eRes.resError; 
1677 dave.sudlik    1.102                     currErr!=NULL; 
1678                                          currErr=currErr->nextError)
1679 venkat.puvvada 1.108                 {
1680                                          cimException.addError(
1681                                              ((CIMError*)currErr->hdl)->getInstance());
1682                                      }
1683                                  }
1684                                  throw cimException;
1685 dave.sudlik    1.102         }
1686 marek          1.63      }
1687                          HandlerCatch(handler);
1688                      
1689                          PEG_METHOD_EXIT();
1690                      
1691                          return(response);
1692                      }
1693                      
1694                      Message * CMPIProviderManager::handleReferencesRequest(const Message * message)
1695                      {
1696 ms.aruran      1.115     PEG_METHOD_ENTER(
1697                              TRC_PROVIDERMANAGER,
1698                              "CMPIProviderManager::handleReferencesRequest()");
1699 marek          1.63  
1700 kumpf          1.92      HandlerIntro(References,message,request,response,handler);
1701 venkat.puvvada 1.108     try
1702                          {
1703 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1704 marek          1.129             "CMPIProviderManager::handleReferencesRequest"
1705                                  " - Host name: %s  Name space: %s  Class name: %s",
1706                                  (const char*) System::getHostName().getCString(),
1707                                  (const char*) request->nameSpace.getString().getCString(),
1708                                  (const char*)
1709                                      request->objectName.getClassName().getString().getCString()));
1710 marek          1.63  
1711                              // make target object path
1712                              CIMObjectPath objectPath(
1713                                  System::getHostName(),
1714                                  request->nameSpace,
1715                                  request->objectName.getClassName());
1716                      
1717                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1718                      
1719                              CIMObjectPath resultPath(
1720                                  System::getHostName(),
1721                                  request->nameSpace,
1722                                  request->resultClass.getString());
1723                      
1724                              Boolean remote=false;
1725 venkat.puvvada 1.132         OpProviderHolder ph;
1726 marek          1.63  
1727                              // resolve provider name
1728 venkat.puvvada 1.108         ProviderIdContainer pidc = 
1729                                  request->operationContext.get(ProviderIdContainer::NAME);
1730 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1731                      
1732 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1733                              {
1734                                  ph = providerManager.getRemoteProvider(
1735                                      name.getLocation(), name.getLogicalName());
1736 marek          1.63          }
1737 venkat.puvvada 1.108         else
1738                              {
1739                                  // get cached or load new provider module
1740                                  ph = providerManager.getProvider(
1741                                      name.getPhysicalName(), name.getLogicalName());
1742 marek          1.63          }
1743                      
1744                              // convert arguments
1745                              OperationContext context;
1746                      
1747                              context.insert(request->operationContext.get(IdentityContainer::NAME));
1748 venkat.puvvada 1.108         context.insert(
1749                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1750                              context.insert(
1751                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1752 marek          1.63          // forward request
1753                              CMPIProvider & pr=ph.GetProvider();
1754                      
1755 a.dunfey       1.85  #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
1756 venkat.puvvada 1.121         AutoPtr<NormalizerContext> tmpNormalizerContext(
1757 venkat.puvvada 1.132             new CIMOMHandleContext(*pr.getCIMOMHandle()));
1758 venkat.puvvada 1.121         request->operationContext.insert(
1759                                  NormalizerContextContainer(tmpNormalizerContext));
1760                      #endif
1761 a.dunfey       1.85  
1762 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1763                                  "Calling provider.references: %s",
1764                                  (const char*)pr.getName().getCString()));
1765                      
1766                              PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1767                                  "--- CMPIProviderManager::references -- role:%s< aCls %s",
1768                                  (const char*)request->role.getCString(),
1769                                  (const char*)request->resultClass.getString().getCString()));
1770 marek          1.63  
1771                              CMPIStatus rc={CMPI_RC_OK,NULL};
1772                              CMPI_ContextOnStack eCtx(context);
1773                              CMPI_ObjectPathOnStack eRef(objectPath);
1774 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1775                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1776 marek          1.63          const CString rClass=request->resultClass.getString().getCString();
1777                              const CString rRole=request->role.getCString();
1778                      
1779                              CMPIPropertyList props(request->propertyList);
1780                      
1781 marek          1.124         _setupCMPIContexts(
1782 venkat.puvvada 1.108             &eCtx,
1783 marek          1.124             &context,
1784                                  &pidc,
1785                                  request->nameSpace.getString(),
1786                                  remote,
1787                                  request->includeQualifiers,
1788                                  request->includeClassOrigin,
1789                                  true);
1790 marek          1.63  
1791                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1792                      
1793 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1794 marek          1.63  
1795 kumpf          1.92          {
1796                                  StatProviderTimeMeasurement providerTime(response);
1797 marek          1.63  
1798 venkat.puvvada 1.132             rc = pr.getAssocMI()->ft->references(
1799                                      pr.getAssocMI(),
1800                                      &eCtx,
1801                                      &eRes,
1802                                      &eRef,
1803                                      CHARS(rClass),
1804                                      CHARS(rRole),
1805                                      (const char **)props.getList());
1806 kumpf          1.92          }
1807 marek          1.63  
1808 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1809                      //      Do this before checking rc from provider to throw exception in case 
1810                      //      rc.msg is also localized.
1811                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1812 venkat.puvvada 1.108         CMPIData cldata = 
1813                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
1814 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1815                              {
1816                                  response->operationContext.set(
1817                                      ContentLanguageListContainer(
1818 venkat.puvvada 1.108                 ContentLanguageList(
1819                                      LanguageParser::parseContentLanguageHeader(
1820 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1821 dave.sudlik    1.103             handler.setContext(response->operationContext);
1822 dave.sudlik    1.99          }
1823                      
1824 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1825 dave.sudlik    1.102         {
1826 venkat.puvvada 1.108             CIMException cimException(
1827                                      (CIMStatusCode)rc.rc,
1828 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1829 venkat.puvvada 1.108 
1830                                  if (eRes.resError)
1831                                  {
1832                                      for (CMPI_Error* currErr=eRes.resError; 
1833 dave.sudlik    1.102                     currErr!=NULL; 
1834                                          currErr=currErr->nextError)
1835 venkat.puvvada 1.108                 {
1836                                          cimException.addError(
1837                                              ((CIMError*)currErr->hdl)->getInstance());
1838                                      }
1839                                  }
1840                                  throw cimException;
1841 dave.sudlik    1.102         }
1842 marek          1.63      }
1843                          HandlerCatch(handler);
1844                      
1845                          PEG_METHOD_EXIT();
1846                      
1847                          return(response);
1848                      }
1849                      
1850 venkat.puvvada 1.108 Message * CMPIProviderManager::handleReferenceNamesRequest(
1851                          const Message * message)
1852 marek          1.63  {
1853 ms.aruran      1.115     PEG_METHOD_ENTER(
1854                              TRC_PROVIDERMANAGER,
1855                              "CMPIProviderManager::handleReferenceNamesRequest()");
1856 marek          1.63  
1857 kumpf          1.92      HandlerIntro(ReferenceNames,message,request,response,handler);
1858 venkat.puvvada 1.108     try
1859                          {
1860 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1861 marek          1.129             "CMPIProviderManager::handleReferenceNamesRequest"
1862                                  " - Host name: %s  Name space: %s  Class name: %s",
1863                                  (const char*) System::getHostName().getCString(),
1864                                  (const char*) request->nameSpace.getString().getCString(),
1865                                  (const char*)
1866                                      request->objectName.getClassName().getString().getCString()));
1867                              
1868 marek          1.63          // make target object path
1869                              CIMObjectPath objectPath(
1870                                  System::getHostName(),
1871                                  request->nameSpace,
1872                                  request->objectName.getClassName());
1873                      
1874                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1875                      
1876                              CIMObjectPath resultPath(
1877                                  System::getHostName(),
1878                                  request->nameSpace,
1879                                  request->resultClass.getString());
1880                      
1881                              Boolean remote=false;
1882 venkat.puvvada 1.132         OpProviderHolder ph;
1883 marek          1.63  
1884                              // resolve provider name
1885 venkat.puvvada 1.108         ProviderIdContainer pidc = 
1886                                  request->operationContext.get(ProviderIdContainer::NAME);
1887 marek          1.63          ProviderName name = _resolveProviderName(pidc);
1888                      
1889 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
1890                              {
1891                                  ph = providerManager.getRemoteProvider(
1892                                      name.getLocation(), name.getLogicalName());
1893 marek          1.63          }
1894 venkat.puvvada 1.108         else
1895                              {
1896                                  // get cached or load new provider module
1897                                  ph = providerManager.getProvider(
1898                                      name.getPhysicalName(), name.getLogicalName());
1899 marek          1.63          }
1900                      
1901                              // convert arguments
1902                              OperationContext context;
1903                      
1904 venkat.puvvada 1.108         context.insert(request->operationContext.get(IdentityContainer::NAME));
1905                              context.insert(
1906                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1907                              context.insert(
1908                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1909 marek          1.63          CMPIProvider & pr=ph.GetProvider();
1910                      
1911 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1912                                  "Calling provider.referenceNames: %s",
1913                                  (const char*)pr.getName().getCString()));
1914                      
1915                              PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
1916                                  "--- CMPIProviderManager::referenceNames -- role: %s< aCls %s",
1917                                  (const char*)request->role.getCString(),
1918                                  (const char*)request->resultClass.getString().getCString()));
1919 marek          1.63  
1920                              CMPIStatus rc={CMPI_RC_OK,NULL};
1921                              CMPI_ContextOnStack eCtx(context);
1922                              CMPI_ObjectPathOnStack eRef(objectPath);
1923 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
1924                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
1925 marek          1.63          const CString rClass=request->resultClass.getString().getCString();
1926                              const CString rRole=request->role.getCString();
1927                      
1928 marek          1.124         _setupCMPIContexts(
1929 venkat.puvvada 1.108             &eCtx,
1930 marek          1.124             &context,
1931                                  &pidc,
1932                                  request->nameSpace.getString(),
1933                                  remote,
1934                                  false,
1935                                  false,
1936                                  true);
1937 marek          1.63  
1938                              CMPIProvider::pm_service_op_lock op_lock(&pr);
1939                      
1940 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
1941 marek          1.63  
1942 kumpf          1.92          {
1943                                  StatProviderTimeMeasurement providerTime(response);
1944 marek          1.63  
1945 venkat.puvvada 1.132             rc = pr.getAssocMI()->ft->referenceNames(
1946                                      pr.getAssocMI(),
1947                                      &eCtx,
1948                                      &eRes,
1949                                      &eRef,
1950                                      CHARS(rClass),
1951                                      CHARS(rRole));
1952 kumpf          1.92          }
1953 marek          1.63  
1954 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
1955                      //      Do this before checking rc from provider to throw exception in case 
1956                      //      rc.msg is also localized.
1957                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
1958 venkat.puvvada 1.108         CMPIData cldata = 
1959                                   eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
1960 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
1961                              {
1962                                  response->operationContext.set(
1963                                      ContentLanguageListContainer(
1964 venkat.puvvada 1.108                 ContentLanguageList(
1965                                      LanguageParser::parseContentLanguageHeader(
1966 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
1967 dave.sudlik    1.103             handler.setContext(response->operationContext);
1968 dave.sudlik    1.99          }
1969                      
1970 marek          1.63          if (rc.rc!=CMPI_RC_OK)
1971 dave.sudlik    1.102         {
1972 venkat.puvvada 1.108             CIMException cimException(
1973                                      (CIMStatusCode)rc.rc,
1974 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
1975 venkat.puvvada 1.108 
1976                                  if (eRes.resError)
1977                                  {
1978                                      for (CMPI_Error* currErr=eRes.resError; 
1979 dave.sudlik    1.102                     currErr!=NULL; 
1980                                          currErr=currErr->nextError)
1981 venkat.puvvada 1.108                 {
1982                                          cimException.addError(
1983                                              ((CIMError*)currErr->hdl)->getInstance());
1984                                      }
1985                                  }
1986                                  throw cimException;
1987 dave.sudlik    1.102         }
1988 marek          1.63      }
1989                          HandlerCatch(handler);
1990                      
1991                          PEG_METHOD_EXIT();
1992                      
1993                          return(response);
1994                      }
1995                      
1996 venkat.puvvada 1.108 Message * CMPIProviderManager::handleInvokeMethodRequest(
1997                          const Message * message)
1998 marek          1.63  {
1999 ms.aruran      1.115     PEG_METHOD_ENTER(
2000                              TRC_PROVIDERMANAGER,
2001                              "CMPIProviderManager::handleInvokeMethodRequest()");
2002 marek          1.63  
2003 kumpf          1.92      HandlerIntro(InvokeMethod,message,request,response,handler);
2004 venkat.puvvada 1.108     try
2005                          {
2006 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2007 marek          1.129             "CMPIProviderManager::handleInvokeMethodRequest"
2008                                  " - Host name: %s  Name space: %s  Class name: %s",
2009                                  (const char*) System::getHostName().getCString(),
2010                                  (const char*) request->nameSpace.getString().getCString(),
2011                                  (const char*)
2012                                      request->instanceName.getClassName().getString().getCString()));
2013 marek          1.63  
2014                              // make target object path
2015                              CIMObjectPath objectPath(
2016                                  System::getHostName(),
2017                                  request->nameSpace,
2018                                  request->instanceName.getClassName(),
2019                                  request->instanceName.getKeyBindings());
2020                      
2021                              Boolean remote=false;
2022 venkat.puvvada 1.132         OpProviderHolder ph;
2023 marek          1.63  
2024                              // resolve provider name
2025 venkat.puvvada 1.108         ProviderIdContainer pidc = 
2026                                  request->operationContext.get(ProviderIdContainer::NAME);
2027 marek          1.63          ProviderName name = _resolveProviderName(pidc);
2028                      
2029 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
2030                              {
2031                                  ph = providerManager.getRemoteProvider(
2032                                      name.getLocation(), name.getLogicalName());
2033 marek          1.63          }
2034 venkat.puvvada 1.108         else
2035                              {
2036                                  // get cached or load new provider module
2037                                  ph = providerManager.getProvider(
2038                                      name.getPhysicalName(), name.getLogicalName());
2039 marek          1.63          }
2040                      
2041                              // convert arguments
2042                              OperationContext context;
2043                      
2044                              context.insert(request->operationContext.get(IdentityContainer::NAME));
2045 venkat.puvvada 1.108         context.insert(
2046                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
2047                              context.insert(
2048                                  request->operationContext.get(ContentLanguageListContainer::NAME));
2049 marek          1.63  
2050                              CIMObjectPath instanceReference(request->instanceName);
2051                      
2052                              // ATTN: propagate namespace
2053                              instanceReference.setNameSpace(request->nameSpace);
2054                      
2055                              // forward request
2056                              CMPIProvider & pr=ph.GetProvider();
2057                      
2058 a.dunfey       1.85  #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
2059 venkat.puvvada 1.121         AutoPtr<NormalizerContext> tmpNormalizerContext(
2060 venkat.puvvada 1.132             new CIMOMHandleContext(*pr.getCIMOMHandle()));
2061 venkat.puvvada 1.121         request->operationContext.insert(
2062                                  NormalizerContextContainer(tmpNormalizerContext));
2063                      #endif
2064 a.dunfey       1.85  
2065 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
2066                                  "Calling provider.invokeMethod: %s",
2067                                  (const char*)pr.getName().getCString()));
2068 marek          1.63  
2069                              CMPIStatus rc={CMPI_RC_OK,NULL};
2070                              CMPI_ContextOnStack eCtx(context);
2071                              CMPI_ObjectPathOnStack eRef(objectPath);
2072 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(handler,pr.getBroker());
2073                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
2074 marek          1.63          CMPI_ArgsOnStack eArgsIn(request->inParameters);
2075                              Array<CIMParamValue> outArgs;
2076                              CMPI_ArgsOnStack eArgsOut(outArgs);
2077                              CString mName=request->methodName.getString().getCString();
2078                      
2079 marek          1.124         _setupCMPIContexts(
2080 venkat.puvvada 1.108             &eCtx,
2081 marek          1.124             &context,
2082                                  &pidc,
2083                                  request->nameSpace.getString(),
2084                                  remote,
2085                                  false,
2086                                  false,
2087                                  true);
2088 marek          1.63  
2089                              CMPIProvider::pm_service_op_lock op_lock(&pr);
2090                      
2091 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
2092 venkat.puvvada 1.108 
2093 kumpf          1.92          {
2094                                  StatProviderTimeMeasurement providerTime(response);
2095 marek          1.63  
2096 venkat.puvvada 1.132             rc = pr.getMethMI()->ft->invokeMethod(
2097                                      pr.getMethMI(),
2098                                      &eCtx,
2099                                      &eRes,
2100                                      &eRef,
2101                                      CHARS(mName),
2102                                      &eArgsIn,
2103                                      &eArgsOut);
2104 kumpf          1.92          }
2105 marek          1.63  
2106 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
2107                      //      Do this before checking rc from provider to throw exception in case 
2108                      //      rc.msg is also localized.
2109                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
2110 venkat.puvvada 1.108         CMPIData cldata = 
2111                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
2112 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
2113                              {
2114                                  response->operationContext.set(
2115                                      ContentLanguageListContainer(
2116 venkat.puvvada 1.108                 ContentLanguageList(
2117                                      LanguageParser::parseContentLanguageHeader(
2118 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
2119 dave.sudlik    1.103             handler.setContext(response->operationContext);
2120 dave.sudlik    1.99          }
2121                      
2122 marek          1.63          if (rc.rc!=CMPI_RC_OK)
2123 dave.sudlik    1.102         {
2124 venkat.puvvada 1.108             CIMException cimException(
2125                                      (CIMStatusCode)rc.rc,
2126 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
2127 venkat.puvvada 1.108 
2128                                  if (eRes.resError)
2129                                  {
2130                                      for (CMPI_Error* currErr=eRes.resError; 
2131 dave.sudlik    1.102                     currErr!=NULL; 
2132                                          currErr=currErr->nextError)
2133 venkat.puvvada 1.108                 {
2134                                          cimException.addError(
2135                                              ((CIMError*)currErr->hdl)->getInstance());
2136                                      }
2137                                  }
2138                                  throw cimException;
2139 dave.sudlik    1.102         }
2140                      
2141 a.dunfey       1.85  #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
2142 venkat.puvvada 1.121         // Even if external normalization is enabled we don't normalize the 
2143                              // Embedded instances present in output args. Normalize them here.
2144 a.dunfey       1.85          {
2145                                  // There is no try catch here because if there is no external
2146                                  // normalization, then these containers were added by this method.
2147                                  const CachedClassDefinitionContainer * classCont =
2148                                      dynamic_cast<const CachedClassDefinitionContainer *>(
2149 venkat.puvvada 1.108                 &request->operationContext.get(
2150                                      CachedClassDefinitionContainer::NAME));
2151 kumpf          1.106             PEGASUS_ASSERT(classCont != 0);
2152 a.dunfey       1.85              const NormalizerContextContainer * contextCont =
2153                                      dynamic_cast<const NormalizerContextContainer*>(
2154 venkat.puvvada 1.108                 &request->operationContext.get(
2155                                      NormalizerContextContainer::NAME));
2156 kumpf          1.106             PEGASUS_ASSERT(contextCont != 0);
2157                      
2158 a.dunfey       1.85              CIMClass classDef(classCont->getClass());
2159                                  Uint32 methodIndex = classDef.findMethod(request->methodName);
2160                                  PEGASUS_ASSERT(methodIndex != PEG_NOT_FOUND);
2161                                  CIMMethod methodDef(classDef.getMethod(methodIndex));
2162 venkat.puvvada 1.108             for (unsigned int i = 0, n = outArgs.size(); i < n; ++i)
2163 a.dunfey       1.85              {
2164                                      CIMParamValue currentParam(outArgs[i]);
2165                                      CIMValue paramValue(currentParam.getValue());
2166                                      // If the parameter value is an EmbeddedObject type, we have
2167                                      // to check against the type of the parameter definition.
2168                                      // CMPI does not distinguish between EmbeddedObjects and
2169                                      // EmbeddedInstances, so if the parameter definition has a type
2170                                      // of EmbeddedInstance, the type of the output parameter must
2171                                      // be changed.
2172 venkat.puvvada 1.108                 if (paramValue.getType() == CIMTYPE_OBJECT)
2173 a.dunfey       1.85                  {
2174                                          String currentParamName(currentParam.getParameterName());
2175                                          Uint32 paramIndex = methodDef.findParameter(
2176                                              CIMName(currentParamName));
2177 venkat.puvvada 1.108                     if (paramIndex == PEG_NOT_FOUND)
2178 a.dunfey       1.85                      {
2179                                              MessageLoaderParms msg("ProviderManager.CMPI."
2180                                                  "CMPIProviderManager.PARAMETER_NOT_FOUND",
2181 dave.sudlik    1.117                             "Parameter $0 not found in definition for "
2182                                                  "method $1.", currentParamName,
2183 a.dunfey       1.85                              request->methodName.getString());
2184 thilo.boehm    1.138 
2185                                              PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2186                                                  "Parameter %s not found in definition for "
2187                                                  "method %s.",
2188                                                  (const char*)currentParamName.getCString(),
2189                                                  (const char*)
2190                                                      request->methodName.getString().getCString()));
2191                      
2192 a.dunfey       1.85                          handler.setStatus(CIM_ERR_FAILED,
2193 dave.sudlik    1.117                             MessageLoader::getMessage(msg));
2194 a.dunfey       1.85                      }
2195                                          else
2196                                          {
2197                                              CIMConstParameter paramDef(
2198                                                  methodDef.getParameter(paramIndex));
2199 thilo.boehm    1.135                         if (paramDef.findQualifier(
2200                                                      PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE)
2201 a.dunfey       1.85                              != PEG_NOT_FOUND)
2202                                              {
2203 venkat.puvvada 1.126                             if (paramValue.isArray())
2204                                                  {  
2205                                                      Array<CIMInstance> paramInstArr;
2206                                                      Array<CIMObject> paramObjectArr;
2207                                                      paramValue.get(paramObjectArr);
2208 kumpf          1.134                                 for (Uint32 j = 0 ; 
2209                                                          j < paramObjectArr.size() ; ++j)
2210 venkat.puvvada 1.126                                 {
2211                                                          paramInstArr.append(
2212 kumpf          1.134                                         CIMInstance(paramObjectArr[j]));
2213 venkat.puvvada 1.126                                     // resolve each embedded instance.
2214                                                          resolveEmbeddedInstanceTypes(
2215 kumpf          1.134                                         &handler, paramInstArr[j]);
2216 venkat.puvvada 1.126                                 }
2217                                                      currentParam = CIMParamValue(currentParamName,
2218                                                          CIMValue(paramInstArr));
2219                                                  }
2220                                                  else
2221                                                  {
2222                                                      CIMObject paramObject;
2223                                                      paramValue.get(paramObject);
2224                                                      CIMInstance paramInst(paramObject);
2225                                                      resolveEmbeddedInstanceTypes(&handler,
2226                                                          paramInst);
2227                                                      currentParam = CIMParamValue(currentParamName,
2228                                                          CIMValue(paramInst));
2229                                                  }
2230 a.dunfey       1.85                          }
2231                                              else
2232                                              {
2233                                                  currentParam = CIMParamValue(currentParamName,
2234 venkat.puvvada 1.126                                 paramValue);
2235 a.dunfey       1.85                          }
2236                      
2237                                              handler.deliverParamValue(currentParam);
2238                                          }
2239                                      }
2240                                      else
2241                                      {
2242                                          handler.deliverParamValue(currentParam);
2243                                      }
2244                                  }
2245                              }
2246                      #else
2247                              for (int i=0,s=outArgs.size(); i<s; i++)
2248                              {
2249                                  handler.deliverParamValue(outArgs[i]);
2250                              }
2251                      #endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT
2252 venkat.puvvada 1.108         handler.complete();
2253 marek          1.63      }
2254                          HandlerCatch(handler);
2255                      
2256                          PEG_METHOD_EXIT();
2257                      
2258                          return(response);
2259                      }
2260                      
2261 venkat.puvvada 1.108 int LocateIndicationProviderNames(
2262                          const CIMInstance& pInstance,
2263                          const CIMInstance& pmInstance,
2264                          String& providerName, 
2265                          String& location)
2266 marek          1.63  {
2267 ms.aruran      1.115    PEG_METHOD_ENTER(
2268                              TRC_PROVIDERMANAGER,
2269                              "CMPIProviderManager:LocateIndicationProviderNames()");
2270 marek          1.139     Uint32 pos = pInstance.findProperty(PEGASUS_PROPERTYNAME_NAME);
2271 marek          1.63      pInstance.getProperty(pos).getValue().get(providerName);
2272                      
2273                          pos = pmInstance.findProperty(CIMName ("Location"));
2274                          pmInstance.getProperty(pos).getValue().get(location);
2275 ms.aruran      1.115     PEG_METHOD_EXIT();
2276 marek          1.63      return 0;
2277                      }
2278                      
2279 venkat.puvvada 1.108 Message * CMPIProviderManager::handleCreateSubscriptionRequest(
2280                          const Message * message)
2281 marek          1.63  {
2282 ms.aruran      1.115     PEG_METHOD_ENTER(
2283                              TRC_PROVIDERMANAGER,
2284                              "CMPIProviderManager::handleCreateSubscriptionRequest()");
2285 marek          1.63  
2286                          HandlerIntroInd(CreateSubscription,message,request,response,
2287 venkat.puvvada 1.108         handler);
2288                          try
2289                          {
2290 marek          1.63          CIMInstance req_provider, req_providerModule;
2291 venkat.puvvada 1.108         ProviderIdContainer pidc = 
2292                                  (ProviderIdContainer)request->operationContext.get(
2293                                  ProviderIdContainer::NAME);
2294 marek          1.63          req_provider = pidc.getProvider();
2295                              req_providerModule = pidc.getModule();
2296                      
2297                              String providerName,providerLocation;
2298                              LocateIndicationProviderNames(req_provider, req_providerModule,
2299 venkat.puvvada 1.108             providerName,providerLocation);
2300 marek          1.63  
2301 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2302 marek          1.129             "CMPIProviderManager::handleCreateSubscriptionRequest"
2303                                  " - Host name: %s  Name space: %s  Provider name(s): %s",
2304                                  (const char*) System::getHostName().getCString(),
2305                                  (const char*) request->nameSpace.getString().getCString(),
2306                                  (const char*) providerName.getCString()));
2307 marek          1.63  
2308                              Boolean remote=false;
2309 venkat.puvvada 1.132         OpProviderHolder ph;
2310 marek          1.63  
2311 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
2312                              {
2313                                  ph = providerManager.getRemoteProvider(
2314                                      providerLocation, providerName);
2315 marek          1.63          }
2316 venkat.puvvada 1.108         else
2317                              {
2318                                  // get cached or load new provider module
2319                                  ph = providerManager.getProvider(
2320                                      providerLocation, providerName);
2321 marek          1.63          }
2322                      
2323                              indProvRecord *prec=NULL;
2324 marek          1.95          {
2325                                  WriteLock writeLock(rwSemProvTab);
2326 venkat.puvvada 1.108             provTab.lookup(ph.GetProvider().getName(),prec);
2327                                  if (prec) prec->count++;
2328                                  else
2329                                  {
2330                                      prec=new indProvRecord();
2331 venkat.puvvada 1.110 #ifdef PEGASUS_ENABLE_REMOTE_CMPI
2332                                      if (remote)
2333                                      {
2334                                          prec->remoteInfo = pidc.getRemoteInfo();
2335                                      }
2336                      #endif
2337 venkat.puvvada 1.108                 provTab.insert(ph.GetProvider().getName(),prec);
2338                                  }
2339 marek          1.95          }
2340 marek          1.63  
2341                              //
2342                              //  Save the provider instance from the request
2343                              //
2344                              ph.GetProvider ().setProviderInstance (req_provider);
2345                      
2346 venkat.puvvada 1.140         const CIMObjectPath &filterPath = _getFilterPath(
2347                                  request->subscriptionInstance);
2348 marek          1.63  
2349 marek          1.95          indSelectRecord *srec=NULL;
2350                      
2351                              {
2352                                  WriteLock writeLock(rwSemSelxTab);
2353 venkat.puvvada 1.140             selxTab.lookup(filterPath,srec);
2354 marek          1.95              if (srec) srec->count++;
2355 venkat.puvvada 1.108             else
2356                                  {
2357                                      srec=new indSelectRecord();
2358 venkat.puvvada 1.140                 selxTab.insert(filterPath,srec);
2359 marek          1.95              }
2360                              }
2361 marek          1.63  
2362                              // convert arguments
2363                              OperationContext context;
2364                              context.insert(request->operationContext.get(IdentityContainer::NAME));
2365 venkat.puvvada 1.108         context.insert(
2366                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
2367                              context.insert(
2368                                  request->operationContext.get(ContentLanguageListContainer::NAME));
2369                              context.insert(
2370                                  request->operationContext.get(SubscriptionInstanceContainer::NAME));
2371                              context.insert(
2372                                  request->operationContext.get(
2373                                  SubscriptionFilterConditionContainer::NAME));
2374 marek          1.63  
2375 venkat.puvvada 1.108         CIMObjectPath subscriptionName = 
2376                                  request->subscriptionInstance.getPath();
2377 marek          1.63  
2378                              CMPIProvider & pr=ph.GetProvider();
2379                      
2380                              CMPIStatus rc={CMPI_RC_OK,NULL};
2381                              CMPI_ContextOnStack eCtx(context);
2382 venkat.puvvada 1.108         SubscriptionFilterConditionContainer sub_cntr =  
2383                                  request->operationContext.get(
2384                                  SubscriptionFilterConditionContainer::NAME);
2385                      
2386                              CIMOMHandleQueryContext *_context= 
2387                                  new CIMOMHandleQueryContext(
2388                                  CIMNamespaceName(
2389                                  request->nameSpace.getString()),
2390 venkat.puvvada 1.132             *pr.getCIMOMHandle());
2391 venkat.puvvada 1.108 
2392                              CMPI_SelectExp *eSelx=new CMPI_SelectExp(
2393                                  context,
2394                                  _context,
2395                                  request->query,
2396                                  sub_cntr.getQueryLanguage());
2397 marek          1.63  
2398                              srec->eSelx=eSelx;
2399 venkat.puvvada 1.108         srec->qContext=_context;
2400 marek          1.63  
2401 venkat.puvvada 1.132         CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
2402 marek          1.63  
2403 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
2404                                  "Calling provider.createSubscriptionRequest: %s",
2405                                  (const char*)pr.getName().getCString()));
2406 marek          1.63  
2407 venkat.puvvada 1.108         for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)
2408                              {
2409 marek          1.63              CIMObjectPath className(
2410                                      System::getHostName(),
2411                                      request->nameSpace,
2412                                      request->classNames[i]);
2413                                  eSelx->classNames.append(className);
2414                              }
2415                              CMPI_ObjectPathOnStack eRef(eSelx->classNames[0]);
2416                      
2417                              CIMPropertyList propertyList = request->propertyList;
2418 venkat.puvvada 1.108         if (!propertyList.isNull())
2419                              {
2420                                  Array<CIMName> p=propertyList.getPropertyNameArray();
2421                                  int pCount=p.size();
2422                                  eSelx->props = new const char*[1+pCount];
2423                                  for (int i=0; i<pCount; i++)
2424                                  {
2425                                      eSelx->props[i]=strdup(p[i].getString().getCString());
2426                                  }
2427                                  eSelx->props[pCount]=NULL;
2428 marek          1.63          }
2429                      
2430                              Uint16 repeatNotificationPolicy = request->repeatNotificationPolicy;
2431                      
2432 marek          1.124         // includeQualifiers and includeClassOrigin not of interest for
2433                              // this type of request
2434                              _setupCMPIContexts(
2435 kumpf          1.79              &eCtx,
2436 marek          1.124             &context,
2437                                  &pidc,
2438                                  request->nameSpace.getString(),
2439                                  remote);
2440 marek          1.63  
2441                              CMPIProvider::pm_service_op_lock op_lock(&pr);
2442                      
2443 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
2444 venkat.puvvada 1.108 
2445 kumpf          1.92          {
2446                                  StatProviderTimeMeasurement providerTime(response);
2447                      
2448 venkat.puvvada 1.132             if (pr.getIndMI()->ft->ftVersion >= 100)
2449 kumpf          1.92              {
2450 venkat.puvvada 1.132                 rc = pr.getIndMI()->ft->activateFilter(
2451                                          pr.getIndMI(),
2452                                          &eCtx,eSelx,
2453 kumpf          1.92                      CHARS(eSelx->classNames[0].getClassName().getString().
2454 venkat.puvvada 1.132                         getCString()),
2455                                          &eRef,
2456                                          false);
2457 kumpf          1.92              }
2458                                  else
2459                                  {
2460 venkat.puvvada 1.108                 // Older version of (pre 1.00) also pass in a CMPIResult
2461 marek          1.63  
2462 kumpf          1.92                  rc = ((CMPIStatus (*)(CMPIIndicationMI*, CMPIContext*,
2463 venkat.puvvada 1.108                     CMPIResult*, CMPISelectExp*,
2464                                          const char *, CMPIObjectPath*, CMPIBoolean))
2465 venkat.puvvada 1.132                     pr.getIndMI()->ft->activateFilter)
2466                                      (pr.getIndMI(),&eCtx,NULL,eSelx,
2467 venkat.puvvada 1.108                     CHARS(eSelx->classNames[0].getClassName().getString().
2468 dave.sudlik    1.96                      getCString()),&eRef,false);
2469 kumpf          1.92              }
2470                              }
2471 marek          1.63  
2472 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
2473                      //      Do this before checking rc from provider to throw exception in case 
2474                      //      rc.msg is also localized.
2475                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
2476 venkat.puvvada 1.108         CMPIData cldata = 
2477                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
2478 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
2479                              {
2480                                  response->operationContext.set(
2481                                      ContentLanguageListContainer(
2482 venkat.puvvada 1.108                 ContentLanguageList(
2483                                      LanguageParser::parseContentLanguageHeader(
2484 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
2485 dave.sudlik    1.99          }
2486                      
2487 marek          1.63          if (rc.rc!=CMPI_RC_OK)
2488                              {
2489 marek          1.95              //  Removed the select expression from the cache
2490                                  WriteLock lock(rwSemSelxTab);
2491                                  if (--srec->count<=0)
2492                                  {
2493 venkat.puvvada 1.140                 selxTab.remove(filterPath);
2494 marek          1.95                  delete _context;
2495                                      delete eSelx;
2496                                      delete srec;
2497                                  }
2498 venkat.puvvada 1.108             throw CIMException((CIMStatusCode)rc.rc,
2499 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
2500 marek          1.63          }
2501                              else
2502                              {
2503                                  //
2504                                  //  Increment count of current subscriptions for this provider
2505                                  //
2506                                  if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ())
2507                                  {
2508                                      //
2509                                      //  If there were no current subscriptions before the increment,
2510                                      //  the first subscription has been created
2511                                      //  Call the provider's enableIndications method
2512                                      //
2513                                      if (_subscriptionInitComplete)
2514                                      {
2515                                          _callEnableIndications (req_provider, _indicationCallback,
2516 marek          1.124                         ph, (const char*)pidc.getRemoteInfo().getCString());
2517 marek          1.63                  }
2518                                  }
2519                              }
2520                          }
2521                          HandlerCatch(handler);
2522                      
2523                          PEG_METHOD_EXIT();
2524                      
2525                          return(response);
2526                      }
2527                      
2528 venkat.puvvada 1.108 Message * CMPIProviderManager::handleDeleteSubscriptionRequest(
2529                          const Message * message)
2530 marek          1.63  {
2531 ms.aruran      1.115     PEG_METHOD_ENTER(
2532                              TRC_PROVIDERMANAGER,
2533                              "CMPIProviderManager::handleDeleteSubscriptionRequest()");
2534 marek          1.63  
2535                          HandlerIntroInd(DeleteSubscription,message,request,response,
2536 venkat.puvvada 1.108         handler);
2537                          try
2538                          {
2539 marek          1.63          String providerName,providerLocation;
2540                      
2541                              CIMInstance req_provider, req_providerModule;
2542 venkat.puvvada 1.108         ProviderIdContainer pidc = 
2543                                  (ProviderIdContainer)request->operationContext.get(
2544                                  ProviderIdContainer::NAME);
2545 marek          1.63          req_provider = pidc.getProvider();
2546                              req_providerModule = pidc.getModule();
2547                      
2548                              LocateIndicationProviderNames(req_provider, req_providerModule,
2549 venkat.puvvada 1.108             providerName,providerLocation);
2550 marek          1.63  
2551 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2552 marek          1.129             "CMPIProviderManager::handleDeleteSubscriptionRequest"
2553                                  " - Host name: %s  Name space: %s  Provider name(s): %s",
2554                                  (const char*) System::getHostName().getCString(),
2555                                  (const char*) request->nameSpace.getString().getCString(),
2556                                  (const char*) providerName.getCString()));
2557 marek          1.63  
2558                              Boolean remote=false;
2559 venkat.puvvada 1.132         OpProviderHolder ph;
2560 marek          1.63  
2561 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
2562                              {
2563                                  ph = providerManager.getRemoteProvider(
2564                                      providerLocation, providerName);
2565 marek          1.63          }
2566 venkat.puvvada 1.108         else
2567                              {
2568                                  // get cached or load new provider module
2569                                  ph = providerManager.getProvider(
2570                                      providerLocation, providerName);
2571 marek          1.63          }
2572                      
2573                      
2574                              indProvRecord *prec=NULL;
2575 marek          1.95          {
2576                                  WriteLock writeLock(rwSemProvTab);
2577 venkat.puvvada 1.108             provTab.lookup(ph.GetProvider().getName(),prec);
2578                                  if (--prec->count<=0)
2579                                  {
2580                                      if (prec->handler)
2581                                          delete prec->handler;
2582                                      delete prec;
2583                                      provTab.remove(ph.GetProvider().getName());
2584                                      prec=NULL;
2585                                  }
2586 marek          1.95          }
2587 marek          1.63  
2588                              indSelectRecord *srec=NULL;
2589 venkat.puvvada 1.140         const CIMObjectPath &filterPath = _getFilterPath(
2590                                  request->subscriptionInstance);
2591 r.kieninger    1.81  
2592 marek          1.95          WriteLock writeLock(rwSemSelxTab);
2593 venkat.puvvada 1.140         if (!selxTab.lookup(filterPath,srec))
2594 venkat.puvvada 1.108         {
2595 dave.sudlik    1.117             MessageLoaderParms parms(
2596                                      "ProviderManager.CMPI.CMPIProviderManager."
2597                                      "FAILED_LOCATE_SUBSCRIPTION_FILTER",
2598                                      "Failed to locate the subscription filter.");
2599 venkat.puvvada 1.108             // failed to get select expression from hash table
2600 dave.sudlik    1.117             throw CIMException(CIM_ERR_FAILED, parms);
2601 venkat.puvvada 1.108         };
2602 marek          1.63  
2603                              CMPI_SelectExp *eSelx=srec->eSelx;
2604 venkat.puvvada 1.108         CIMOMHandleQueryContext *qContext=srec->qContext;
2605 marek          1.63  
2606                              CMPI_ObjectPathOnStack eRef(eSelx->classNames[0]);
2607 marek          1.95          if (--srec->count<=0)
2608                              {
2609 venkat.puvvada 1.140             selxTab.remove(filterPath);
2610 marek          1.95          }
2611 marek          1.63  
2612                              // convert arguments
2613                              OperationContext context;
2614                              context.insert(request->operationContext.get(IdentityContainer::NAME));
2615 venkat.puvvada 1.108         context.insert(
2616                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
2617                              context.insert(
2618                                  request->operationContext.get(ContentLanguageListContainer::NAME));
2619                              context.insert(
2620                                  request->operationContext.get(SubscriptionInstanceContainer::NAME));
2621 marek          1.63  
2622 venkat.puvvada 1.108         CIMObjectPath subscriptionName = 
2623                                  request->subscriptionInstance.getPath();
2624 marek          1.63  
2625                              CMPIProvider & pr=ph.GetProvider();
2626                      
2627                              CMPIStatus rc={CMPI_RC_OK,NULL};
2628                              CMPI_ContextOnStack eCtx(context);
2629 venkat.puvvada 1.132         CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
2630 marek          1.63  
2631 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
2632                                  "Calling provider.deleteSubscriptionRequest: %s",
2633                                  (const char*)pr.getName().getCString()));
2634 marek          1.63  
2635 marek          1.124         // includeQualifiers and includeClassOrigin not of interest for
2636                              // this type of request
2637                              _setupCMPIContexts(
2638 venkat.puvvada 1.108             &eCtx,
2639 marek          1.124             &context,
2640                                  &pidc,
2641                                  request->nameSpace.getString(),
2642                                  remote);
2643 marek          1.63  
2644                              CMPIProvider::pm_service_op_lock op_lock(&pr);
2645                      
2646 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
2647 venkat.puvvada 1.108 
2648 kumpf          1.92          {
2649                                  StatProviderTimeMeasurement providerTime(response);
2650                      
2651 venkat.puvvada 1.132             if (pr.getIndMI()->ft->ftVersion >= 100)
2652 kumpf          1.92              {
2653 venkat.puvvada 1.132                 rc = pr.getIndMI()->ft->deActivateFilter(
2654                                          pr.getIndMI(),
2655                                          &eCtx,
2656                                          eSelx,
2657 kumpf          1.92                      CHARS(eSelx->classNames[0].getClassName().getString().
2658 venkat.puvvada 1.132                         getCString()),
2659                                          &eRef,
2660                                          prec==NULL);
2661 kumpf          1.92              }
2662                                  else
2663                                  {
2664                                      // Older version of (pre 1.00) also pass in a CMPIResult
2665 marek          1.63  
2666 kumpf          1.92                  rc = ((CMPIStatus (*)(CMPIIndicationMI*, CMPIContext*,
2667                                          CMPIResult*, CMPISelectExp*,
2668 venkat.puvvada 1.108                     const char *, CMPIObjectPath*, CMPIBoolean))
2669 venkat.puvvada 1.132                     pr.getIndMI()->ft->deActivateFilter)
2670                                      (pr.getIndMI(),&eCtx,NULL,eSelx,
2671 venkat.puvvada 1.108                     CHARS(eSelx->classNames[0].getClassName().getString().
2672 dave.sudlik    1.96                      getCString()),&eRef,prec==NULL);
2673 kumpf          1.92              }
2674                              }
2675 marek          1.63  
2676 marek          1.95          if (srec->count<=0)
2677                              {
2678 venkat.puvvada 1.108             delete qContext;
2679                                  delete eSelx;
2680                                  delete srec;
2681 marek          1.95          }
2682 marek          1.63  
2683 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
2684                      //      Do this before checking rc from provider to throw exception in case 
2685                      //      rc.msg is also localized.
2686                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
2687 venkat.puvvada 1.108         CMPIData cldata = 
2688                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
2689 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
2690                              {
2691                                  response->operationContext.set(
2692                                      ContentLanguageListContainer(
2693 venkat.puvvada 1.108                 ContentLanguageList(
2694                                      LanguageParser::parseContentLanguageHeader(
2695 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
2696 dave.sudlik    1.99          }
2697                      
2698 marek          1.63          if (rc.rc!=CMPI_RC_OK)
2699                              {
2700 venkat.puvvada 1.108             throw CIMException((CIMStatusCode)rc.rc,
2701 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
2702 marek          1.63          }
2703                              else
2704                              {
2705                                  //
2706                                  //  Decrement count of current subscriptions for this provider
2707                                  //
2708                                  if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ())
2709                                  {
2710                                      //
2711                                      //  If there are no current subscriptions after the decrement,
2712                                      //  the last subscription has been deleted
2713                                      //  Call the provider's disableIndications method
2714                                      //
2715                                      if (_subscriptionInitComplete)
2716                                      {
2717 marek          1.124                     _callDisableIndications(
2718                                              ph,
2719                                              (const char*)pidc.getRemoteInfo().getCString());
2720 marek          1.63                  }
2721                                  }
2722                              }
2723                          }
2724                          HandlerCatch(handler);
2725                      
2726                          PEG_METHOD_EXIT();
2727                      
2728                          return(response);
2729                      }
2730                      
2731 venkat.puvvada 1.108 Message * CMPIProviderManager::handleDisableModuleRequest(
2732                          const Message * message)
2733 marek          1.63  {
2734 ms.aruran      1.115     PEG_METHOD_ENTER(
2735                              TRC_PROVIDERMANAGER,
2736                              "CMPIProviderManager::handleDisableModuleRequest()");
2737 marek          1.63  
2738                          CIMDisableModuleRequestMessage * request =
2739 venkat.puvvada 1.108         dynamic_cast<CIMDisableModuleRequestMessage *>(
2740                              const_cast<Message *>(message));
2741 marek          1.63  
2742                          PEGASUS_ASSERT(request != 0);
2743                      
2744 venkat.puvvada 1.133     //Set to false when provider refused to unload due to pending operations.
2745                          Boolean disableModuleOk = true;
2746                      
2747 marek          1.63      // get provider module name
2748                          Boolean disableProviderOnly = request->disableProviderOnly;
2749                      
2750                          //
2751                          // Unload providers
2752                          //
2753                          Array<CIMInstance> _pInstances = request->providers;
2754                          Array <Boolean> _indicationProviders = request->indicationProviders;
2755 venkat.puvvada 1.108     /* The CIMInstances on request->providers array is completly _different_ 
2756                             than the request->providerModule CIMInstance. Hence  */
2757 marek          1.63  
2758 konrad.r       1.69      String physicalName=(request->providerModule.getProperty(
2759 venkat.puvvada 1.108         request->
2760                              providerModule.findProperty("Location")).getValue().toString());
2761 marek          1.63  
2762 venkat.puvvada 1.108     for (Uint32 i = 0, n = _pInstances.size(); i < n; i++)
2763 marek          1.63      {
2764                              String providerName;
2765 marek          1.139         _pInstances[i].getProperty(_pInstances [i].findProperty
2766                                  (PEGASUS_PROPERTYNAME_NAME)).getValue().get(providerName);
2767 marek          1.63  
2768 marek          1.139         Uint32 pos = _pInstances[i].findProperty(PEGASUS_PROPERTYNAME_NAME);
2769 marek          1.63  
2770 venkat.puvvada 1.128         if (!providerManager.isProviderActive(providerName))
2771                              {
2772                                  continue;
2773 venkat.puvvada 1.133         }
2774                       
2775                              Boolean unloadOk = providerManager.unloadProvider(
2776                                  physicalName, 
2777                                  _pInstances[i].getProperty(
2778 marek          1.139                 _pInstances[i].findProperty(PEGASUS_PROPERTYNAME_NAME)
2779 venkat.puvvada 1.133                 ).getValue ().toString ());
2780                      
2781                              if (!unloadOk)
2782                              {
2783                                  disableModuleOk = false;
2784                                  continue;
2785                              }
2786 marek          1.63          //
2787                              //  Reset the indication provider's count of current
2788                              //  subscriptions since it has been disabled
2789                              //
2790                              if (_indicationProviders [i])
2791                              {
2792                                  if (physicalName.size () > 0)
2793                                  {
2794 venkat.puvvada 1.108                 try
2795                                      {
2796 venkat.puvvada 1.132                     OpProviderHolder ph = 
2797 venkat.puvvada 1.108                         providerManager.getProvider(
2798                                              physicalName, 
2799                                              providerName);
2800                                          ph.GetProvider ().resetSubscriptions ();
2801                                      }
2802                                      catch (const Exception &e)
2803                                      {
2804 thilo.boehm    1.138                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2805                                              "Exception during reset subscriptions on indication "
2806                                              "provider %s: %s", 
2807                                              (const char*)providerName.getCString(),
2808                                              (const char*)e.getMessage().getCString()));
2809 venkat.puvvada 1.108                 }
2810 marek          1.63              }
2811                              }
2812                          }
2813                      
2814 kumpf          1.123     CIMDisableModuleResponseMessage* response =
2815                              dynamic_cast<CIMDisableModuleResponseMessage*>(
2816                                  request->buildResponse());
2817 marek          1.63      PEGASUS_ASSERT(response != 0);
2818 venkat.puvvada 1.133 
2819                          if (disableModuleOk)
2820                          {
2821                              response->operationalStatus.append(
2822                                  CIM_MSE_OPSTATUS_VALUE_STOPPED);
2823                          }
2824                          else
2825                          {
2826                              response->operationalStatus.append(
2827                                  CIM_MSE_OPSTATUS_VALUE_OK);
2828                          }
2829 marek          1.63  
2830                          PEG_METHOD_EXIT();
2831                      
2832                          return(response);
2833                      }
2834                      
2835 venkat.puvvada 1.108 Message * CMPIProviderManager::handleEnableModuleRequest(
2836                          const Message * message)
2837 marek          1.63  {
2838 ms.aruran      1.115     PEG_METHOD_ENTER(
2839                              TRC_PROVIDERMANAGER,
2840                              "CMPIProviderManager::handleEnableModuleRequest()");
2841 marek          1.63  
2842                          CIMEnableModuleRequestMessage * request =
2843 venkat.puvvada 1.108         dynamic_cast<CIMEnableModuleRequestMessage *>(
2844                              const_cast<Message *>(message));
2845 marek          1.63  
2846                          PEGASUS_ASSERT(request != 0);
2847                      
2848                          Array<Uint16> operationalStatus;
2849                          operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
2850                      
2851 kumpf          1.123     CIMEnableModuleResponseMessage* response =
2852                              dynamic_cast<CIMEnableModuleResponseMessage*>(
2853                                  request->buildResponse());
2854 marek          1.63      PEGASUS_ASSERT(response != 0);
2855 kumpf          1.123     response->operationalStatus = operationalStatus;
2856 marek          1.63  
2857                          PEG_METHOD_EXIT();
2858                      
2859                          return(response);
2860                      }
2861                      
2862 venkat.puvvada 1.108 Message * CMPIProviderManager::handleStopAllProvidersRequest(
2863                          const Message * message)
2864 marek          1.63  {
2865 ms.aruran      1.115     PEG_METHOD_ENTER(
2866                              TRC_PROVIDERMANAGER,
2867                              "CMPIProviderManager::handleStopAllProvidersRequest()");
2868 marek          1.63  
2869                          CIMStopAllProvidersRequestMessage * request =
2870 venkat.puvvada 1.108         dynamic_cast<CIMStopAllProvidersRequestMessage *>(
2871                              const_cast<Message *>(message));
2872 marek          1.63  
2873                          PEGASUS_ASSERT(request != 0);
2874                      
2875 kumpf          1.123     CIMStopAllProvidersResponseMessage* response =
2876                              dynamic_cast<CIMStopAllProvidersResponseMessage*>(
2877                                  request->buildResponse());
2878 marek          1.63      PEGASUS_ASSERT(response != 0);
2879                      
2880                          // tell the provider manager to shutdown all the providers
2881                          providerManager.shutdownAllProviders();
2882                      
2883                          PEG_METHOD_EXIT();
2884                      
2885                          return(response);
2886                      }
2887                      
2888 venkat.puvvada 1.108 Message * CMPIProviderManager::handleSubscriptionInitCompleteRequest(
2889                          const Message * message)
2890 marek          1.63  {
2891 ms.aruran      1.115     PEG_METHOD_ENTER(
2892                              TRC_PROVIDERMANAGER,
2893                              "CMPIProviderManager::handleSubscriptionInitCompleteRequest()");
2894 marek          1.63  
2895                          CIMSubscriptionInitCompleteRequestMessage * request =
2896                              dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
2897 venkat.puvvada 1.108         (const_cast <Message *> (message));
2898 marek          1.63  
2899                          PEGASUS_ASSERT (request != 0);
2900                      
2901                          CIMSubscriptionInitCompleteResponseMessage * response =
2902                              dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
2903 venkat.puvvada 1.108         (request->buildResponse ());
2904 marek          1.63  
2905                          PEGASUS_ASSERT (response != 0);
2906                      
2907                          //
2908                          //  Set indicator
2909                          //
2910                          _subscriptionInitComplete = true;
2911                      
2912                          //
2913                          //  For each provider that has at least one subscription, call
2914                          //  provider's enableIndications method
2915                          //
2916                          Array <CMPIProvider *> enableProviders;
2917                          enableProviders = providerManager.getIndicationProvidersToEnable ();
2918                      
2919                          Uint32 numProviders = enableProviders.size ();
2920                          for (Uint32 i = 0; i < numProviders; i++)
2921                          {
2922                              try
2923                              {
2924                                  CIMInstance provider;
2925 marek          1.63              provider = enableProviders [i]->getProviderInstance ();
2926                      
2927 venkat.puvvada 1.110             CString info;
2928                      #ifdef PEGASUS_ENABLE_REMOTE_CMPI
2929                                  indProvRecord *provRec = 0;
2930                                  if (provTab.lookup (enableProviders [i]->getName(), provRec))
2931                                  {
2932                                      if (provRec->remoteInfo != String::EMPTY)
2933                                      {
2934                                          info = provRec->remoteInfo.getCString();
2935                                      }
2936                                  }
2937                      #endif
2938 marek          1.63              //
2939                                  //  Get cached or load new provider module
2940                                  //
2941 venkat.puvvada 1.132             OpProviderHolder ph;
2942 venkat.puvvada 1.110             if ((const char*)info)
2943                                  {
2944                                      ph = providerManager.getRemoteProvider
2945                                          (enableProviders [i]->getModule ()->getFileName (),
2946                                          enableProviders [i]->getName ());
2947                                  }
2948                                  else
2949                                  {
2950                                      ph = providerManager.getProvider
2951                                          (enableProviders [i]->getModule ()->getFileName (),
2952                                          enableProviders [i]->getName ());
2953                                  }
2954 venkat.puvvada 1.108             _callEnableIndications(
2955                                      provider, 
2956                                      _indicationCallback, 
2957                                      ph, 
2958                                      (const char*)info);
2959 marek          1.63          }
2960 konrad.r       1.64          catch (const CIMException & e)
2961 marek          1.63          {
2962 thilo.boehm    1.138             PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL1,
2963                                      "CIMException: %s",(const char*)e.getMessage().getCString()));
2964 marek          1.63          }
2965 konrad.r       1.64          catch (const Exception & e)
2966 marek          1.63          {
2967 thilo.boehm    1.138             PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL1,
2968                                      "Exception: %s",(const char*)e.getMessage().getCString()));
2969 marek          1.63          }
2970 venkat.puvvada 1.108         catch (...)
2971 marek          1.63          {
2972 ms.aruran      1.115             PEG_TRACE_CSTRING(
2973                                      TRC_PROVIDERMANAGER,
2974 marek          1.131                 Tracer::LEVEL1,
2975 marek          1.63                  "Unknown error in handleSubscriptionInitCompleteRequest");
2976                              }
2977                          }
2978                      
2979                          PEG_METHOD_EXIT ();
2980 venkat.puvvada 1.108     return(response);
2981 marek          1.63  }
2982                      
2983 venkat.puvvada 1.108 Message * CMPIProviderManager::handleGetPropertyRequest(
2984                          const Message * message)
2985 dave.sudlik    1.98  {
2986 ms.aruran      1.115     PEG_METHOD_ENTER(
2987                              TRC_PROVIDERMANAGER,
2988                              "CMPIProviderManager::handleGetPropertyRequest()");
2989 dave.sudlik    1.98  
2990                          HandlerIntro(GetProperty,message,request,response,handler);
2991                      
2992                          // We're only going to be interested in the specific property from this
2993                          // instance.
2994                          Array<CIMName> localPropertyListArray;
2995                          localPropertyListArray.append(request->propertyName);
2996                          CIMPropertyList localPropertyList(localPropertyListArray);
2997                      
2998                          // NOTE: GetProperty will use the CIMInstanceProvider interface, so we
2999                          // must manually define a request, response, and handler (emulate 
3000                          // HandlerIntro macro)
3001                          CIMGetInstanceRequestMessage * GI_request = 
3002                              new CIMGetInstanceRequestMessage(
3003 venkat.puvvada 1.108         request->messageId, 
3004                              request->nameSpace,
3005                              request->instanceName,
3006                              false,
3007                              false,
3008                              false,
3009                              localPropertyList,
3010                              request->queueIds,
3011                              request->authType,
3012                              request->userName
3013                              );
3014 dave.sudlik    1.98  
3015                          PEGASUS_ASSERT(GI_request != 0); 
3016                      
3017                          CIMGetInstanceResponseMessage * GI_response = 
3018 venkat.puvvada 1.108         dynamic_cast<CIMGetInstanceResponseMessage*>
3019                              (GI_request->buildResponse());
3020 dave.sudlik    1.98  
3021                          PEGASUS_ASSERT(GI_response != 0); 
3022                      
3023 venkat.puvvada 1.108     GetInstanceResponseHandler GI_handler(
3024                              GI_request, 
3025                              GI_response, 
3026                              _responseChunkCallback);
3027 dave.sudlik    1.98  
3028 venkat.puvvada 1.108     try
3029 dave.sudlik    1.98      {
3030 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3031 marek          1.129             "CMPIProviderManager::handleGetPropertyRequest"
3032                                  " - Host name: %s  Name space: %s  "
3033                                      "Class name: %s  Property name: %s",
3034                                  (const char*) System::getHostName().getCString(),
3035                                  (const char*) request->nameSpace.getString().getCString(),
3036                                  (const char*)
3037                                      request->instanceName.getClassName().getString().getCString(),
3038                                  (const char*) request->propertyName.getString().getCString()));
3039                              
3040 dave.sudlik    1.98          // make target object path
3041                              CIMObjectPath objectPath(
3042                                  System::getHostName(),
3043                                  request->nameSpace,
3044                                  request->instanceName.getClassName(),
3045                                  request->instanceName.getKeyBindings());
3046                      
3047                              Boolean remote=false;
3048 venkat.puvvada 1.132         OpProviderHolder ph;
3049 dave.sudlik    1.98  
3050                              // resolve provider name
3051 venkat.puvvada 1.108         ProviderIdContainer pidc = 
3052                                  request->operationContext.get(ProviderIdContainer::NAME);
3053 dave.sudlik    1.98          ProviderName name = _resolveProviderName(pidc);
3054                      
3055 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
3056                              {
3057                                  ph = providerManager.getRemoteProvider(
3058                                      name.getLocation(), name.getLogicalName());
3059 dave.sudlik    1.98          }
3060 venkat.puvvada 1.108         else
3061                              {
3062                                  // get cached or load new provider module
3063                                  ph = providerManager.getProvider(
3064                                      name.getPhysicalName(), name.getLogicalName());
3065 dave.sudlik    1.98          }
3066                      
3067                              // convert arguments
3068                              OperationContext context;
3069                      
3070                              context.insert(request->operationContext.get(IdentityContainer::NAME));
3071 venkat.puvvada 1.108         context.insert(
3072                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
3073                              context.insert(
3074                                  request->operationContext.get(ContentLanguageListContainer::NAME));
3075 dave.sudlik    1.98          // forward request
3076                              CMPIProvider & pr=ph.GetProvider();
3077                      
3078                      #ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT
3079 venkat.puvvada 1.121         AutoPtr<NormalizerContext> tmpNormalizerContext(
3080 venkat.puvvada 1.132             new CIMOMHandleContext(*pr.getCIMOMHandle()));
3081 venkat.puvvada 1.121         request->operationContext.insert(
3082                                  NormalizerContextContainer(tmpNormalizerContext));
3083                      #endif
3084 dave.sudlik    1.98  
3085 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
3086                                  "Calling provider.getInstance via getProperty: %s",
3087                                  (const char*)pr.getName().getCString()));
3088 dave.sudlik    1.98  
3089                              CMPIStatus rc={CMPI_RC_OK,NULL};
3090                              CMPI_ContextOnStack eCtx(context);
3091                              CMPI_ObjectPathOnStack eRef(objectPath);
3092 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(GI_handler,pr.getBroker());
3093                              CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
3094 dave.sudlik    1.98  
3095                              // For the getInstance provider call, use the property list that we 
3096                              // created containing the single property from the getProperty call.
3097                              CMPIPropertyList props(localPropertyList);
3098                      
3099 venkat.puvvada 1.108         // Leave includeQualifiers and includeClassOrigin as false for this 
3100                              // call to getInstance
3101 marek          1.124         _setupCMPIContexts(
3102 venkat.puvvada 1.108             &eCtx,
3103 marek          1.124             &context,
3104                                  &pidc,
3105                                  request->nameSpace.getString(),
3106                                  remote,
3107                                  false,
3108                                  false,
3109                                  true);
3110 dave.sudlik    1.98  
3111                              CMPIProvider::pm_service_op_lock op_lock(&pr);
3112                      
3113 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
3114 dave.sudlik    1.98  
3115                              {
3116                                  StatProviderTimeMeasurement providerTime(response);
3117                      
3118 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->getInstance(
3119                                      pr.getInstMI(),
3120                                      &eCtx,
3121                                      &eRes,
3122                                      &eRef,
3123 dave.sudlik    1.98                  (const char **)props.getList());
3124                              }
3125                      
3126 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
3127                      //      Do this before checking rc from provider to throw exception in case 
3128                      //      rc.msg is also localized.
3129                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
3130 venkat.puvvada 1.108         CMPIData cldata = 
3131                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
3132 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
3133                              {
3134                                  response->operationContext.set(
3135                                      ContentLanguageListContainer(
3136 venkat.puvvada 1.108                 ContentLanguageList(
3137                                      LanguageParser::parseContentLanguageHeader(
3138 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
3139 dave.sudlik    1.103             handler.setContext(response->operationContext);
3140 dave.sudlik    1.99          }
3141                      
3142 dave.sudlik    1.98          if (rc.rc!=CMPI_RC_OK)
3143 dave.sudlik    1.102         {
3144 venkat.puvvada 1.108             CIMException cimException(
3145                                      (CIMStatusCode)rc.rc,
3146 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
3147 venkat.puvvada 1.108 
3148                                  if (eRes.resError)
3149                                  {
3150                                      for (CMPI_Error* currErr=eRes.resError; 
3151 dave.sudlik    1.102                     currErr!=NULL; 
3152                                          currErr=currErr->nextError)
3153 venkat.puvvada 1.108                 {
3154                                          cimException.addError(
3155                                              ((CIMError*)currErr->hdl)->getInstance());
3156                                      }
3157                                  }
3158                                  throw cimException;
3159 dave.sudlik    1.102         }
3160 dave.sudlik    1.98  
3161                              // Copy property value from instance to getProperty response
3162 venkat.puvvada 1.108         if (!(GI_response->cimInstance.isUninitialized()))
3163 dave.sudlik    1.98          {
3164 venkat.puvvada 1.108             Uint32 pos = 
3165                                      GI_response->cimInstance.findProperty(request->propertyName);
3166 dave.sudlik    1.98  
3167 venkat.puvvada 1.108             if (pos != PEG_NOT_FOUND)
3168 dave.sudlik    1.98              {
3169 venkat.puvvada 1.108                 response->value = 
3170                                          GI_response->cimInstance.getProperty(pos).getValue();
3171 dave.sudlik    1.98              }
3172                                  // Else property not found. Return CIM_ERR_NO_SUCH_PROPERTY.
3173                                  else
3174                                  {
3175                                      throw PEGASUS_CIM_EXCEPTION(
3176                                          CIM_ERR_NO_SUCH_PROPERTY,
3177                                          request->propertyName.getString()
3178                                          );
3179                                  }
3180                              }
3181                          }
3182                          HandlerCatch(handler);
3183                      
3184                          delete GI_request;
3185                          delete GI_response;
3186                      
3187                          PEG_METHOD_EXIT();
3188                      
3189                          return(response);
3190                      }
3191                      
3192 venkat.puvvada 1.108 Message * CMPIProviderManager::handleSetPropertyRequest(
3193                          const Message * message)
3194 dave.sudlik    1.98  {
3195 ms.aruran      1.115     PEG_METHOD_ENTER(
3196                              TRC_PROVIDERMANAGER,
3197                              "CMPIProviderManager::handleSetPropertyRequest()");
3198 dave.sudlik    1.98  
3199                          HandlerIntro(SetProperty,message,request,response,handler);
3200                      
3201 venkat.puvvada 1.108     // We're only going to be interested in the specific property from this 
3202                          // instance.
3203 dave.sudlik    1.98      Array<CIMName> localPropertyListArray;
3204                          localPropertyListArray.append(request->propertyName);
3205                          CIMPropertyList localPropertyList(localPropertyListArray);
3206                      
3207 venkat.puvvada 1.108     // Build a modified instance with just the specific property and its 
3208                          // new value.
3209 dave.sudlik    1.98      CIMInstance localModifiedInstance(request->instanceName.getClassName());
3210                          localModifiedInstance.setPath(request->instanceName);
3211 venkat.puvvada 1.108     localModifiedInstance.addProperty(
3212                              CIMProperty(request->propertyName, request->newValue));
3213 dave.sudlik    1.98  
3214 venkat.puvvada 1.108     // NOTE: SetProperty will use the CIMInstanceProvider interface, so we must
3215                          // manually define a request, response, and handler.
3216 dave.sudlik    1.98      CIMModifyInstanceRequestMessage * MI_request = 
3217                              new CIMModifyInstanceRequestMessage(
3218 venkat.puvvada 1.108         request->messageId, 
3219                              request->nameSpace,
3220                              localModifiedInstance,
3221                              false,
3222                              localPropertyList,
3223                              request->queueIds,
3224                              request->authType,
3225                              request->userName
3226                              );
3227 dave.sudlik    1.98  
3228                          PEGASUS_ASSERT(MI_request != 0); 
3229                      
3230                          CIMModifyInstanceResponseMessage * MI_response = 
3231 venkat.puvvada 1.108         dynamic_cast<CIMModifyInstanceResponseMessage*>(
3232                              MI_request->buildResponse());
3233 dave.sudlik    1.98  
3234                          PEGASUS_ASSERT(MI_response != 0); 
3235                      
3236 venkat.puvvada 1.108     ModifyInstanceResponseHandler MI_handler(
3237                              MI_request, 
3238                              MI_response, 
3239                              _responseChunkCallback);
3240 dave.sudlik    1.98  
3241 venkat.puvvada 1.108     try
3242 dave.sudlik    1.98      {
3243 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3244 marek          1.129             "CMPIProviderManager::handleSetPropertyRequest"
3245                                  " - Host name: %s  Name space: %s  "
3246                                      "Class name: %s  Property name: %s",
3247                                  (const char*) System::getHostName().getCString(),
3248                                  (const char*) request->nameSpace.getString().getCString(),
3249                                  (const char*)
3250                                      request->instanceName.getClassName().getString().getCString(),
3251                                  (const char*) request->propertyName.getString().getCString()));
3252                              
3253 dave.sudlik    1.98          // make target object path
3254                              CIMObjectPath objectPath(
3255                                  System::getHostName(),
3256                                  request->nameSpace,
3257                                  request->instanceName.getClassName(),
3258                                  request->instanceName.getKeyBindings());
3259                      
3260                              Boolean remote=false;
3261 venkat.puvvada 1.132         OpProviderHolder ph;
3262 dave.sudlik    1.98  
3263                              // resolve provider name
3264 venkat.puvvada 1.108         ProviderIdContainer pidc = 
3265                                  request->operationContext.get(ProviderIdContainer::NAME);
3266 dave.sudlik    1.98          ProviderName name = _resolveProviderName(pidc);
3267                      
3268 venkat.puvvada 1.108         if ((remote=pidc.isRemoteNameSpace()))
3269                              {
3270                                  ph = providerManager.getRemoteProvider(
3271                                      name.getLocation(), name.getLogicalName());
3272 dave.sudlik    1.98          }
3273 venkat.puvvada 1.108         else
3274                              {
3275                                  // get cached or load new provider module
3276                                  ph = providerManager.getProvider(
3277                                      name.getPhysicalName(), name.getLogicalName());
3278 dave.sudlik    1.98          }
3279                      
3280                              // convert arguments
3281                              OperationContext context;
3282                      
3283                              context.insert(request->operationContext.get(IdentityContainer::NAME));
3284 venkat.puvvada 1.108         context.insert(
3285                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
3286                              context.insert(
3287                                  request->operationContext.get(ContentLanguageListContainer::NAME));
3288 dave.sudlik    1.98          // forward request
3289                              CMPIProvider & pr=ph.GetProvider();
3290                      
3291 thilo.boehm    1.138         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
3292                                  "Calling provider.modifyInstance via setProperty: %s",
3293                                  (const char*)pr.getName().getCString()));
3294 dave.sudlik    1.98  
3295                              CMPIStatus rc={CMPI_RC_OK,NULL};
3296                              CMPI_ContextOnStack eCtx(context);
3297                              CMPI_ObjectPathOnStack eRef(objectPath);
3298 venkat.puvvada 1.132         CMPI_ResultOnStack eRes(MI_handler,pr.getBroker());
3299 dave.sudlik    1.98          CMPI_InstanceOnStack eInst(localModifiedInstance);
3300 venkat.puvvada 1.132         CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
3301 dave.sudlik    1.98  
3302                              CMPIPropertyList props(localPropertyList);
3303                      
3304                              // Leave includeQualifiers as false for this call to modifyInstance
3305 marek          1.124         _setupCMPIContexts(
3306 venkat.puvvada 1.108             &eCtx,
3307 marek          1.124             &context,
3308                                  &pidc,
3309                                  request->nameSpace.getString(),
3310                                  remote,
3311                                  false,
3312                                  false,
3313                                  true);
3314 dave.sudlik    1.98  
3315                              CMPIProvider::pm_service_op_lock op_lock(&pr);
3316                      
3317 r.kieninger    1.119         AutoPThreadSecurity threadLevelSecurity(request->operationContext);
3318 dave.sudlik    1.98  
3319                              {
3320                                  StatProviderTimeMeasurement providerTime(response);
3321                      
3322 venkat.puvvada 1.132             rc = pr.getInstMI()->ft->modifyInstance(
3323                                      pr.getInstMI(),
3324                                      &eCtx,
3325                                      &eRes,
3326                                      &eRef,
3327                                      &eInst,
3328 dave.sudlik    1.98                  (const char **)props.getList());
3329                              }
3330                      
3331 dave.sudlik    1.99  //      Need to save ContentLanguage value into operation context of response
3332                      //      Do this before checking rc from provider to throw exception in case 
3333                      //      rc.msg is also localized.
3334                              CMPIStatus tmprc={CMPI_RC_OK,NULL};
3335 venkat.puvvada 1.108         CMPIData cldata = 
3336                                  eCtx.ft->getEntry (&eCtx, CMPIContentLanguage, &tmprc);
3337 dave.sudlik    1.99          if (tmprc.rc == CMPI_RC_OK)
3338                              {
3339                                  response->operationContext.set(
3340                                      ContentLanguageListContainer(
3341 venkat.puvvada 1.108                 ContentLanguageList(
3342                                      LanguageParser::parseContentLanguageHeader(
3343 s.kodali       1.137                 CMGetCharsPtr(cldata.value.string, NULL)))));
3344 dave.sudlik    1.103             handler.setContext(response->operationContext);
3345 dave.sudlik    1.99          }
3346                      
3347 dave.sudlik    1.98          if (rc.rc!=CMPI_RC_OK)
3348 dave.sudlik    1.102         {
3349 venkat.puvvada 1.108             CIMException cimException(
3350                                      (CIMStatusCode)rc.rc,
3351 s.kodali       1.137                 rc.msg ? CMGetCharsPtr(rc.msg, NULL) : String::EMPTY);
3352 venkat.puvvada 1.108 
3353                                  if (eRes.resError)
3354                                  {
3355                                      for (CMPI_Error* currErr=eRes.resError; 
3356 dave.sudlik    1.102                     currErr!=NULL; 
3357                                          currErr=currErr->nextError)
3358 venkat.puvvada 1.108                 {
3359                                          cimException.addError(
3360                                              ((CIMError*)currErr->hdl)->getInstance());
3361                                      }
3362                                  }
3363                                  throw cimException;
3364 dave.sudlik    1.102         }
3365 dave.sudlik    1.98      }
3366                          HandlerCatch(handler);
3367                      
3368                          delete MI_request;
3369                          delete MI_response;
3370                      
3371                          PEG_METHOD_EXIT();
3372                      
3373                          return(response);
3374                      }
3375                      
3376 venkat.puvvada 1.108 Message * CMPIProviderManager::handleUnsupportedRequest(
3377                          const Message * message)
3378 marek          1.63  {
3379 ms.aruran      1.115     PEG_METHOD_ENTER(
3380                              TRC_PROVIDERMANAGER,
3381                              "CMPIProviderManager::handleUnsupportedRequest()");
3382 marek          1.63      CIMRequestMessage* request =
3383                              dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
3384                          PEGASUS_ASSERT(request != 0 );
3385                      
3386                          CIMResponseMessage* response = request->buildResponse();
3387                          response->cimException =
3388                              PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
3389                      
3390                          PEG_METHOD_EXIT();
3391                          return response;
3392                      }
3393                      
3394                      ProviderName CMPIProviderManager::_resolveProviderName(
3395                          const ProviderIdContainer & providerId)
3396                      {
3397                          String providerName;
3398                          String fileName;
3399                          String location;
3400 dmitry.mikulin 1.114     String moduleName;
3401 marek          1.63      CIMValue genericValue;
3402                      
3403 ms.aruran      1.115     PEG_METHOD_ENTER(
3404                              TRC_PROVIDERMANAGER,
3405                              "CMPIProviderManager::_resolveProviderName()");
3406                      
3407 dmitry.mikulin 1.114     genericValue = providerId.getModule().getProperty(
3408 marek          1.139         providerId.getModule().findProperty(
3409                                  PEGASUS_PROPERTYNAME_NAME)).getValue();
3410 dmitry.mikulin 1.114     genericValue.get(moduleName);
3411                      
3412 marek          1.63      genericValue = providerId.getProvider().getProperty(
3413 marek          1.139         providerId.getProvider().findProperty(
3414                                  PEGASUS_PROPERTYNAME_NAME)).getValue();
3415 marek          1.63      genericValue.get(providerName);
3416                      
3417                          genericValue = providerId.getModule().getProperty(
3418                              providerId.getModule().findProperty("Location")).getValue();
3419                          genericValue.get(location);
3420                          fileName = _resolvePhysicalName(location);
3421                      
3422 thilo.boehm    1.89      // An empty file name is only for interest if we are in the 
3423                          // local name space. So the message is only issued if not
3424                          // in the remote Name Space.
3425                          if (fileName == String::EMPTY && (!providerId.isRemoteNameSpace()))
3426                          {
3427 venkat.puvvada 1.108         genericValue.get(location);
3428                              String fullName = FileSystem::buildLibraryFileName(location);
3429                              Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
3430 kumpf          1.136             MessageLoaderParms(
3431                                      "ProviderManager.CMPI.CMPIProviderManager.CANNOT_FIND_LIBRARY",
3432                                      "For provider $0 library $1 was not found.", 
3433                                      providerName, fullName));
3434 thilo.boehm    1.89  
3435                          }
3436 dmitry.mikulin 1.114     ProviderName name(moduleName, providerName, fileName);
3437 marek          1.63      name.setLocation(location);
3438 ms.aruran      1.115     PEG_METHOD_EXIT();
3439 marek          1.63      return name;
3440                      }
3441                      
3442                      void CMPIProviderManager::_callEnableIndications
3443                          (CIMInstance & req_provider,
3444 venkat.puvvada 1.108     PEGASUS_INDICATION_CALLBACK_T _indicationCallback,
3445 venkat.puvvada 1.132     OpProviderHolder & ph,
3446 venkat.puvvada 1.108     const char* remoteInfo)
3447 marek          1.63  {
3448 ms.aruran      1.115     PEG_METHOD_ENTER(
3449                              TRC_PROVIDERMANAGER,
3450                              "CMPIProviderManager::_callEnableIndications()");
3451 marek          1.63  
3452                          try
3453                          {
3454 w.otsuka       1.86          indProvRecord *provRec =0;
3455 marek          1.95          {
3456                                  WriteLock lock(rwSemProvTab);
3457                      
3458 venkat.puvvada 1.108             if (provTab.lookup (ph.GetProvider ().getName (), provRec))
3459                                  {
3460                                      provRec->enabled = true;
3461                                      CIMRequestMessage * request = 0;
3462                                      CIMResponseMessage * response = 0;
3463                                      provRec->handler=new EnableIndicationsResponseHandler(
3464                                          request,
3465                                          response,
3466                                          req_provider,
3467                                          _indicationCallback,
3468                                          _responseChunkCallback);
3469                                  }
3470 marek          1.95          }
3471 marek          1.63  
3472                              CMPIProvider & pr=ph.GetProvider();
3473                      
3474                              //
3475                              //  Versions prior to 86 did not include enableIndications routine
3476                              //
3477 venkat.puvvada 1.132         if (pr.getIndMI()->ft->ftVersion >= 86)
3478 marek          1.63          {
3479                                  OperationContext context;
3480 kumpf          1.112 #ifdef PEGASUS_ZOS_THREADLEVEL_SECURITY
3481 venkat.puvvada 1.108             // For the z/OS security model we always need an Identity container
3482                                  // in the operation context. Since we don't have a client request 
3483                                  // ID here we have to use the cim servers identity for the time 
3484                                  // being.
3485                                  IdentityContainer idContainer(System::getEffectiveUserName());
3486                                  context.insert(idContainer);
3487 kumpf          1.112 #endif
3488 marek          1.90  
3489 marek          1.63              CMPIStatus rc={CMPI_RC_OK,NULL};
3490                                  CMPI_ContextOnStack eCtx(context);
3491 venkat.puvvada 1.132             CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
3492 marek          1.63  
3493 dave.sudlik    1.100             // Add RemoteInformation -V 5245
3494                                  if (remoteInfo)
3495                                  {
3496                                      eCtx.ft->addEntry(&eCtx,"CMPIRRemoteInfo",
3497 venkat.puvvada 1.108                     (CMPIValue*)(const char*)remoteInfo,CMPI_chars);
3498 dave.sudlik    1.100             }
3499                      
3500 thilo.boehm    1.138             PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
3501                                      "Calling provider.enableIndications: %s",
3502                                      (const char*)pr.getName().getCString()));
3503 marek          1.63  
3504 venkat.puvvada 1.111             pr.protect();
3505 marek          1.63  
3506 dave.sudlik    1.101             // enableIndications() is defined by the CMPI standard as
3507                                  // returning a CMPIStatus return value. Unfortunately, Pegasus
3508                                  // originally implemented enableIndications() with a void
3509                                  // return type, and this incompatibility was not detected for 
3510                                  // some time. Since exceptions thrown from enableIndications() 
3511                                  // are not reported (other than via logging), it was decided to
3512                                  // discard the returned CMPIStatus here. This will prevent us from
3513                                  // breaking existing CMPI Indication providers. This is ok since
3514                                  // there really isn't a user to which the problem should be
3515                                  // reported.
3516 venkat.puvvada 1.132             pr.getIndMI()->ft->enableIndications(pr.getIndMI(),&eCtx);
3517 marek          1.63          }
3518                              else
3519                              {
3520 thilo.boehm    1.138             PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
3521                                      "Not calling provider.enableIndications: %s routine as it is "
3522                                      "an earlier version that does not support this function",
3523                                       (const char*)pr.getName().getCString()));
3524 marek          1.63          }
3525                          }
3526 konrad.r       1.64      catch (const Exception & e)
3527 marek          1.63      {
3528 kumpf          1.136         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3529                                  MessageLoaderParms(
3530                                      "ProviderManager.CMPI.CMPIProviderManager."
3531                                          "ENABLE_INDICATIONS_FAILED",
3532                                      "Failed to enable indications for provider $0: $1.",
3533                                      ph.GetProvider().getName(), e.getMessage()));
3534 marek          1.63      }
3535 venkat.puvvada 1.108     catch (...)
3536 marek          1.63      {
3537 kumpf          1.136         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3538                                  MessageLoaderParms(
3539                                      "ProviderManager.CMPI.CMPIProviderManager."
3540                                          "ENABLE_INDICATIONS_FAILED_UNKNOWN",
3541                                      "Failed to enable indications for provider $0.",
3542                                      ph.GetProvider().getName()));
3543 marek          1.63      }
3544                      
3545                          PEG_METHOD_EXIT ();
3546                      }
3547                      
3548                      void CMPIProviderManager::_callDisableIndications
3549 venkat.puvvada 1.132     (OpProviderHolder & ph, const char *remoteInfo)
3550 marek          1.63  {
3551 ms.aruran      1.115     PEG_METHOD_ENTER(
3552                              TRC_PROVIDERMANAGER,
3553                              "CMPIProviderManager::_callDisableIndications()");
3554 marek          1.63  
3555 dave.sudlik    1.101     try
3556 marek          1.95      {
3557 dave.sudlik    1.101         indProvRecord * provRec = 0;
3558                              {
3559                                  WriteLock writeLock(rwSemProvTab);
3560 venkat.puvvada 1.108             if (provTab.lookup (ph.GetProvider ().getName (), provRec))
3561                                  {
3562                                      provRec->enabled = false;
3563                                      if (provRec->handler) delete provRec->handler;
3564                                      provRec->handler = NULL;
3565                                  }
3566 dave.sudlik    1.101         }
3567                      
3568                              CMPIProvider & pr=ph.GetProvider();
3569 marek          1.63  
3570 dave.sudlik    1.101         //
3571                              //  Versions prior to 86 did not include disableIndications routine
3572                              //
3573 venkat.puvvada 1.132         if (pr.getIndMI()->ft->ftVersion >= 86)
3574 dave.sudlik    1.101         {
3575                                  OperationContext context;
3576                                  CMPIStatus rc={CMPI_RC_OK,NULL};
3577                                  CMPI_ContextOnStack eCtx(context);
3578                      
3579                                  if (remoteInfo)
3580                                  {
3581 venkat.puvvada 1.108                 eCtx.ft->addEntry(&eCtx,"CMPIRRemoteInfo",
3582                                          (CMPIValue*)(const char*)remoteInfo,CMPI_chars);
3583 dave.sudlik    1.101             }
3584 venkat.puvvada 1.132             CMPI_ThreadContext thr(pr.getBroker(),&eCtx);
3585 dave.sudlik    1.96  
3586 thilo.boehm    1.138             PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
3587                                      "Calling provider.disableIndications: %s",
3588                                      (const char*)pr.getName().getCString()));
3589 dave.sudlik    1.100 
3590 dave.sudlik    1.101             // disableIndications() is defined by the CMPI standard as
3591                                  // returning a CMPIStatus return value. Unfortunately, Pegasus
3592                                  // originally implemented disableIndications() with a void
3593                                  // return type, and this incompatibility was not detected for 
3594                                  // some time. For consistency with the enableIndications()
3595                                  // interface, it was decided to discard the returned CMPIStatus 
3596                                  // here. This will prevent us from breaking existing CMPI 
3597                                  // Indication providers. This is ok since there really isn't a 
3598                                  // user to which the problem should be reported.
3599 venkat.puvvada 1.132             pr.getIndMI()->ft->disableIndications(
3600                                      pr.getIndMI(), 
3601 venkat.puvvada 1.108                 &eCtx);
3602 marek          1.63  
3603 venkat.puvvada 1.111             pr.unprotect();
3604 dave.sudlik    1.101         }
3605                              else
3606                              {
3607 thilo.boehm    1.138             PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
3608                                      "Not calling provider.disableIndications: %s routine as it is "
3609                                      "an earlier version that does not support this function",
3610                                      (const char*)pr.getName().getCString()));
3611 dave.sudlik    1.101         }
3612                          }
3613                          catch (const Exception & e)
3614                          {
3615 kumpf          1.136         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3616                                  MessageLoaderParms(
3617                                      "ProviderManager.CMPI.CMPIProviderManager."
3618                                          "DISABLE_INDICATIONS_FAILED",
3619                                      "Failed to disable indications for provider $0: $1.",
3620                                      ph.GetProvider().getName(), e.getMessage()));
3621 marek          1.63      }
3622 venkat.puvvada 1.108     catch (...)
3623 marek          1.63      {
3624 kumpf          1.136         Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
3625                                  MessageLoaderParms(
3626                                      "ProviderManager.CMPI.CMPIProviderManager."
3627                                          "DISABLE_INDICATIONS_FAILED_UNKNOWN",
3628                                      "Failed to disable indications for provider $0.",
3629                                      ph.GetProvider().getName()));
3630 marek          1.63      }
3631                      
3632                          PEG_METHOD_EXIT ();
3633                      }
3634                      
3635                      PEGASUS_NAMESPACE_END
3636 venkat.puvvada 1.108     

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2