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

Diff for /pegasus/src/Pegasus/ProviderManager2/Attic/ProviderManagerService.cpp between version 1.25 and 1.54

version 1.25, 2004/02/04 22:58:21 version 1.54, 2004/06/29 23:42:54
Line 31 
Line 31 
 //              Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators. //              Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators.
 //              Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) //              Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
 //              Adrian Schuur, IBM (schuur@de.ibm.com) //              Adrian Schuur, IBM (schuur@de.ibm.com)
   //              Amit K Arora (amita@in.ibm.com) for PEP-101
   //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
   //              Seema Gupta (gseema@in.ibm.com for PEP135)
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 39 
Line 42 
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
 #include <Pegasus/Common/Constants.h> #include <Pegasus/Common/Constants.h>
 #include <Pegasus/Common/CIMMessage.h> #include <Pegasus/Common/CIMMessage.h>
   #include <Pegasus/Common/Thread.h>
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
 #include <Pegasus/Common/Logger.h> #include <Pegasus/Common/Logger.h>
 #include <Pegasus/Common/Destroyer.h>  #include <Pegasus/Common/AutoPtr.h>
 #include <Pegasus/ProviderManager/OperationResponseHandler.h>  #include <Pegasus/Common/Constants.h>
  
 #include <Pegasus/Config/ConfigManager.h> #include <Pegasus/Config/ConfigManager.h>
  
 #include <Pegasus/ProviderManager2/ProviderManagerModule.h>  #include <Pegasus/ProviderManager2/BasicProviderManagerRouter.h>
 #include <Pegasus/ProviderManager2/ProviderManager.h>  #include <Pegasus/ProviderManager2/OOPProviderManagerRouter.h>
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 // BEGIN TEMP SECTION  
 class ProviderManagerContainer  
 {  
 public:  
     ProviderManagerContainer(void) : _manager(0)  
     {  
     }  
   
     ProviderManagerContainer(const ProviderManagerContainer & container) : _manager(0)  
     {  
         *this = container;  
     }  
   
     ProviderManagerContainer(const String & physicalName, const String & logicalName, const String & interfaceName) : _manager(0)  
     {  
         _physicalName=ProviderManager::_resolvePhysicalName(physicalName);  
   
         _logicalName = logicalName;  
   
         _interfaceName = interfaceName;  
   
         _module = ProviderManagerModule(_physicalName);  
   
         _module.load();  
   
         _manager = _module.getProviderManager(_logicalName);  
   
         PEGASUS_ASSERT(_manager != 0);  
     }  
   
     ~ProviderManagerContainer(void)  
     {  
         _module.unload();  
     }  
   
     ProviderManagerContainer & operator=(const ProviderManagerContainer & container)  
     {  
         if(this == &container)  
         {  
             return(*this);  
         }  
   
         _logicalName = container._logicalName;  
         _physicalName = container._physicalName;  
         _interfaceName = container._interfaceName;  
   
         _module = container._module;  
         _manager = container._manager;  
   
         return(*this);  
     }  
   
     ProviderManager *getProviderManager(void)  
     {  
         return _manager;  
     }  
   
     const String & getPhysicalName(void) const  
     {  
         return(_physicalName);  
     }  
   
     const String & getLogicalName(void) const  
     {  
         return(_logicalName);  
     }  
   
     const String & getInterfaceName(void) const  
     {  
         return(_interfaceName);  
     }  
   
 private:  
     String _physicalName;  
     String _logicalName;  
     String _interfaceName;  
   
     ProviderManagerModule _module;  
     ProviderManager * _manager;  
   
 };  
   
 static Array<ProviderManagerContainer*> _providerManagers;  
 // END TEMP SECTION  
   
 inline Boolean _isSupportedRequestType(const Message * message) inline Boolean _isSupportedRequestType(const Message * message)
 { {
     // ATTN: needs implementation     // ATTN: needs implementation
Line 155 
Line 74 
 } }
  
 ProviderManagerService* ProviderManagerService::providerManagerService=NULL; ProviderManagerService* ProviderManagerService::providerManagerService=NULL;
 CIMRepository* ProviderManagerService::_repository=NULL;  Uint32 ProviderManagerService::_indicationServiceQueueId = PEG_NOT_FOUND;
  
 ProviderManagerService::ProviderManagerService(void) ProviderManagerService::ProviderManagerService(void)
     : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP)     : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP)
Line 171 
Line 90 
     providerManagerService=this;     providerManagerService=this;
     _repository=repository;     _repository=repository;
  
     SetProviderRegistrationManager(providerRegistrationManager);      _providerRegistrationManager = providerRegistrationManager;
   
       _unloadIdleProvidersBusy = 0;
  
     // ATTN: this section is a temporary solution to populate the list of enabled      // Determine whether Out-of-Process Provider support is enabled
     // provider managers for a given distribution. it includes another temporary      ConfigManager* configManager = ConfigManager::getInstance();
     // solution for converting a generic file name into a file name useable by      if (String::equal(
     // each platform.          configManager->getCurrentValue("enableProviderProcesses"), "true"))
       {
     // BEGIN TEMP SECTION          _providerManagerRouter =
     //#if defined(PEGASUS_OS_OS400)              new OOPProviderManagerRouter(indicationCallback);
     //_providerManagers.append(ProviderManagerContainer("QSYS/??????????", "INTERNAL", "INTERNAL"));      }
     //#else      else
     //_providerManager.append(ProviderManagerContainer("InternalProviderManager", "DEFAULT", "INTERNAL"));      {
     //#endif          _providerManagerRouter =
               new BasicProviderManagerRouter(indicationCallback);
     #if defined(ENABLE_DEFAULT_PROVIDER_MANAGER)      }
     #if defined(PEGASUS_OS_OS400)  
     _providerManagers.append(  
        new ProviderManagerContainer("QSYS/QYCMDFTPVM", "DEFAULT", "C++Default"));  
     #else  
     _providerManagers.append(  
        new ProviderManagerContainer("DefaultProviderManager", "DEFAULT", "C++Default"));  
     #endif  
     #endif  
   
     #if defined(ENABLE_CMPI_PROVIDER_MANAGER)  
     #if defined(PEGASUS_OS_OS400)  
     _providerManagers.append(  
        new ProviderManagerContainer("QSYS/QYCMCMPIPM", "CMPI", "CMPI"));  
     #else  
     _providerManagers.append(  
        new ProviderManagerContainer("CMPIProviderManager", "CMPI", "CMPI"));  
     #endif  
     #endif  
     // END TEMP SECTION  
 } }
  
 ProviderManagerService::~ProviderManagerService(void) ProviderManagerService::~ProviderManagerService(void)
 { {
       delete _providerManagerRouter;
     providerManagerService=NULL;     providerManagerService=NULL;
 } }
  
Line 267 
Line 170 
  
         _incomingQueue.enqueue(request->op);         _incomingQueue.enqueue(request->op);
  
         _thread_pool->allocate_and_awaken((void *)this, ProviderManagerService::handleCimOperation);           while (!_thread_pool->allocate_and_awaken(
                        (void *)this, ProviderManagerService::handleCimOperation))
            {
                pegasus_yield();
            }
     }     }
     else     else
     {     {
Line 280 
Line 187 
     return;     return;
 } }
  
   PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL
 PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL ProviderManagerService::handleCimOperation(void * arg) throw()  ProviderManagerService::handleCimOperation(void * arg) throw()
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManagerService::handleCimOperation");      PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
           "ProviderManagerService::handleCimOperation");
  
     if(arg == 0)     if(arg == 0)
     {     {
Line 292 
Line 200 
     }     }
  
     // get the service from argument     // get the service from argument
     ProviderManagerService * service = reinterpret_cast<ProviderManagerService *>(arg);      ProviderManagerService * service =
           reinterpret_cast<ProviderManagerService *>(arg);
  
     if(service->_incomingQueue.size() == 0)     if(service->_incomingQueue.size() == 0)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "ProviderManagerService::handleCimOperation() called with no op node in queue" );              "ProviderManagerService::handleCimOperation() called with no "
                   "op node in queue");
  
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
  
Line 309 
Line 219 
  
     if((op == 0) || (op->_request.count() == 0))     if((op == 0) || (op->_request.count() == 0))
     {     {
           // ATTN: This may dereference a null pointer!
         MessageQueue * queue = MessageQueue::lookup(op->_source_queue);         MessageQueue * queue = MessageQueue::lookup(op->_source_queue);
  
         PEGASUS_ASSERT(queue != 0);         PEGASUS_ASSERT(queue != 0);
Line 321 
Line 232 
  
     AsyncRequest * request = static_cast<AsyncRequest *>(op->_request.next(0));     AsyncRequest * request = static_cast<AsyncRequest *>(op->_request.next(0));
  
     if((request == 0) || (request->getType() != async_messages::ASYNC_LEGACY_OP_START))      if ((request == 0) ||
           (request->getType() != async_messages::ASYNC_LEGACY_OP_START))
     {     {
         // reply with NAK         // reply with NAK
   
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
   
         return(PEGASUS_THREAD_RETURN(0));         return(PEGASUS_THREAD_RETURN(0));
     }     }
  
     try     try
     {     {
         Message * legacy = static_cast<AsyncLegacyOperationStart *>(request)->get_action();          Message* legacy =
               static_cast<AsyncLegacyOperationStart *>(request)->get_action();
  
         if(_isSupportedRequestType(legacy))         if(_isSupportedRequestType(legacy))
         {         {
             Destroyer<Message> xmessage(legacy);              AutoPtr<Message> xmessage(legacy);
  
             // Set the client's requested language into this service thread.             // Set the client's requested language into this service thread.
             // This will allow functions in this service to return messages             // This will allow functions in this service to return messages
Line 345 
Line 256 
  
             if(msg != 0)             if(msg != 0)
             {             {
                 AcceptLanguages * langs = new AcceptLanguages(msg->acceptLanguages);                          AcceptLanguages* langs =
                       new AcceptLanguages(((AcceptLanguageListContainer)msg->operationContext.get
                                                                                           (AcceptLanguageListContainer::NAME)).getLanguages());
                 Thread::setLanguages(langs);                 Thread::setLanguages(langs);
             }             }
             else             else
Line 367 
Line 279 
     return(PEGASUS_THREAD_RETURN(0));     return(PEGASUS_THREAD_RETURN(0));
 } }
  
 void ProviderManagerService::handleCimRequest(AsyncOpNode * op, const Message * message)  void ProviderManagerService::handleCimRequest(
       AsyncOpNode * op,
       Message * message)
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManagerService::handleCimRequest");      PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
           "ProviderManagerService::handleCimRequest");
  
     // ATTN: ensure message is a request???      CIMRequestMessage * request = dynamic_cast<CIMRequestMessage *>(message);
     CIMMessage * request = dynamic_cast<CIMMessage *>(const_cast<Message *>(message));      PEGASUS_ASSERT(request != 0);
  
     // get request from op node     // get request from op node
     AsyncRequest * async = static_cast<AsyncRequest *>(op->_request.next(0));     AsyncRequest * async = static_cast<AsyncRequest *>(op->_request.next(0));
       PEGASUS_ASSERT(async != 0);
     PEGASUS_ASSERT((request != 0) && (async != 0));  
  
     Message * response = 0;     Message * response = 0;
     String ifc;  
  
     // get the responsible provider Manager      if ((dynamic_cast<CIMOperationRequestMessage*>(request) != 0) ||
     ProviderManager * pm = locateProviderManager(message,ifc);          (dynamic_cast<CIMIndicationRequestMessage*>(request) != 0) ||
     if(pm) {          (request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE) ||
         response = pm->processMessage(request);          (request->getType() == CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE))
       {
           // Handle CIMOperationRequestMessage, CIMExportIndicationRequestMessage,
           // CIMIndicationRequestMessage, and CIMInitializeProviderRequestMessage.
           // (These should be blocked when the provider module is disabled.)
   
           //
           // Get the provider module instance to check for a disabled module
           //
           CIMInstance providerModule;
   
           if (request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE)
           {
               // Get a ProviderIdContainer for ExportIndicationRequestMessage.
               // Note: This can be removed when the CIMExportRequestDispatcher
               // is updated to add the ProviderIdContainer to the message.
               CIMInstance provider;
               const CIMExportIndicationRequestMessage* expRequest =
                   dynamic_cast<const CIMExportIndicationRequestMessage*>(request);
               _providerRegistrationManager->lookupIndicationConsumer(
                   expRequest->destinationPath, provider, providerModule);
               request->operationContext.insert(
                   ProviderIdContainer(providerModule, provider));
     }     }
     else     else
     {     {
        if (request->getType()==CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE) {              // The provider ID container is added to the OperationContext
           for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) {              // by the CIMOperationRequestDispatcher for all CIM operation
               ProviderManagerContainer *pmc=_providerManagers[i];              // requests to providers, so it does not need to be added again.
 // ---- next instruction is disabled because of a bug              // CIMInitializeProviderRequestMessage also has a provider ID
 //             response=pmc->getProviderManager()->processMessage(request);              // container.
 // ---- this block is an workaround              ProviderIdContainer pidc =
             CIMStopAllProvidersResponseMessage * resp =                  request->operationContext.get(ProviderIdContainer::NAME);
               new CIMStopAllProvidersResponseMessage(              providerModule = pidc.getModule();
                  request->messageId,          }
                  CIMException(),  
                  ((CIMStopAllProvidersRequestMessage*)request)->queueIds.copyAndPop());          //
              resp->setKey(request->getKey());          // Check if the target provider is disabled
              resp->setHttpMethod (request->getHttpMethod ());          //
              response=resp;          Boolean moduleDisabled = false;
           Uint32 pos = providerModule.findProperty(CIMName("OperationalStatus"));
           PEGASUS_ASSERT(pos != PEG_NOT_FOUND);
           Array<Uint16> operationalStatus;
           providerModule.getProperty(pos).getValue().get(operationalStatus);
   
           for(Uint32 i = 0; i < operationalStatus.size(); i++)
           {
               if ((operationalStatus[i] == CIM_MSE_OPSTATUS_VALUE_STOPPED) ||
                   (operationalStatus[i] == CIM_MSE_OPSTATUS_VALUE_STOPPING))
               {
                   moduleDisabled = true;
              break;              break;
 // ---- end of  workaround  
            }            }
        }        }
        else {  
           CIMRequestMessage * req =          if (moduleDisabled)
               dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));          {
           CIMResponseMessage  *resp=new CIMResponseMessage(0,req->messageId,CIMException(),              //
              req->queueIds.copyAndPop());              // Send a "provider blocked" response
           response=resp;              //
           resp->synch_response(req);              CIMResponseMessage* cimResponse = request->buildResponse();
           OperationResponseHandler handler(req, resp);              cimResponse->cimException = PEGASUS_CIM_EXCEPTION_L(
           handler.setStatus(CIM_ERR_FAILED, "Unknown error.");                  CIM_ERR_ACCESS_DENIED,
                   MessageLoaderParms(
                       "ProviderManager.ProviderManagerService.PROVIDER_BLOCKED",
                       "provider blocked."));
               response = cimResponse;
           }
           else
           {
               //
               // Forward the request to the appropriate ProviderManagerRouter
               //
               response = _providerManagerRouter->processMessage(request);
        }        }
     }     }
       else if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)
       {
           // Handle CIMEnableModuleRequestMessage
           CIMEnableModuleRequestMessage * emReq =
               dynamic_cast<CIMEnableModuleRequestMessage*>(request);
   
           CIMInstance providerModule = emReq->providerModule;
   
           try
           {
               // Forward the request to the ProviderManager
               response = _providerManagerRouter->processMessage(request);
  
     // preserve message key              // If successful, update provider module status to OK
     response->setKey(request->getKey());              // ATTN: Use CIMEnableModuleResponseMessage operationalStatus?
               CIMEnableModuleResponseMessage * emResp =
                   dynamic_cast<CIMEnableModuleResponseMessage*>(response);
               if (emResp->cimException.getCode() == CIM_ERR_SUCCESS)
               {
                   _updateProviderModuleStatus(
                       providerModule, CIM_MSE_OPSTATUS_VALUE_STOPPED,
                       CIM_MSE_OPSTATUS_VALUE_OK);
               }
           }
           catch (Exception& e)
           {
               // Get the OperationalStatus property from the provider module
               Array<Uint16> operationalStatus;
               CIMValue itValue = emReq->providerModule.getProperty(
                   emReq->providerModule.findProperty("OperationalStatus"))
                       .getValue();
               itValue.get(operationalStatus);
  
     // set HTTP method in response from request              if (response != 0)
     response->setHttpMethod(request->getHttpMethod());              {
                   delete response;
               }
   
               response = new CIMEnableModuleResponseMessage(
                   request->messageId,
                   CIMException(CIM_ERR_FAILED, e.getMessage()),
                   request->queueIds.copyAndPop(),
                   operationalStatus);
           }
       }
       else if (request->getType() == CIM_DISABLE_MODULE_REQUEST_MESSAGE)
       {
           // Handle CIMDisableModuleRequestMessage
           CIMDisableModuleRequestMessage * dmReq =
               dynamic_cast<CIMDisableModuleRequestMessage*>(request);
   
           CIMInstance providerModule = dmReq->providerModule;
           Boolean updateModuleStatus = !dmReq->disableProviderOnly;
   
           try
           {
               // Change module status from OK to STOPPING
               if (updateModuleStatus)
               {
                   _updateProviderModuleStatus(
                       providerModule, CIM_MSE_OPSTATUS_VALUE_OK,
                       CIM_MSE_OPSTATUS_VALUE_STOPPING);
               }
   
               // Forward the request to the ProviderManager
               response = _providerManagerRouter->processMessage(request);
   
               // Update provider module status based on success or failure
               if (updateModuleStatus)
               {
                   CIMDisableModuleResponseMessage * dmResp =
                       dynamic_cast<CIMDisableModuleResponseMessage*>(response);
                   if (dmResp->cimException.getCode() != CIM_ERR_SUCCESS)
                   {
                       // Disable operation failed.  Module not stopped.
                       _updateProviderModuleStatus(
                           providerModule, CIM_MSE_OPSTATUS_VALUE_STOPPING,
                           CIM_MSE_OPSTATUS_VALUE_OK);
                   }
                   else
                   {
                       // Disable may or may not have been successful,
                       // depending on whether there are outstanding requests.
                       // Use last operationalStatus entry.
                       _updateProviderModuleStatus(
                           providerModule, CIM_MSE_OPSTATUS_VALUE_STOPPING,
                           dmResp->operationalStatus[
                               dmResp->operationalStatus.size()-1]);
                   }
               }
           }
           catch (Exception& e)
           {
               // Get the OperationalStatus property from the provider module
               Array<Uint16> operationalStatus;
               CIMValue itValue = dmReq->providerModule.getProperty(
                   dmReq->providerModule.findProperty("OperationalStatus"))
                       .getValue();
               itValue.get(operationalStatus);
   
               if (response != 0)
               {
                   delete response;
               }
   
               response = new CIMDisableModuleResponseMessage(
                   request->messageId,
                   CIMException(CIM_ERR_FAILED, e.getMessage()),
                   request->queueIds.copyAndPop(),
                   operationalStatus);
           }
       }
       else
       {
           response = _providerManagerRouter->processMessage(request);
       }
  
     AsyncLegacyOperationResult * async_result =     AsyncLegacyOperationResult * async_result =
         new AsyncLegacyOperationResult(         new AsyncLegacyOperationResult(
Line 437 
Line 503 
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
  
 ProviderManager* ProviderManagerService::locateProviderManager(const Message *message,  void ProviderManagerService::unloadIdleProviders()
              String & it)  
 { {
     CIMNamespaceName nameSpace;      PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
     CIMName className;          "ProviderManagerService::unloadIdleProviders");
  
     const CIMOperationRequestMessage * p =      // Ensure that only one _unloadIdleProvidersHandler thread runs at a time
        dynamic_cast<const CIMOperationRequestMessage *>(message);      _unloadIdleProvidersBusy++;
       if ((_unloadIdleProvidersBusy.value() == 1) &&
           (_thread_pool->allocate_and_awaken(
                (void*)this, ProviderManagerService::_unloadIdleProvidersHandler)))
       {
           // _unloadIdleProvidersBusy is decremented in
           // _unloadIdleProvidersHandler
       }
       else
       {
           // If we fail to allocate a thread, don't retry now.
           _unloadIdleProvidersBusy--;
       }
  
     if (p) {      PEG_METHOD_EXIT();
        nameSpace=p->nameSpace;  
        if (p->providerType==ProviderType::ASSOCIATION)  
           className=((CIMAssociatorsRequestMessage*)p)->assocClass;  
        else className=p->className;  
   
        ProviderName name(  
            CIMObjectPath(String::EMPTY, nameSpace, className).toString(),  
            String::EMPTY,  
            String::EMPTY,  
            String::EMPTY,  
            p->providerType);  
        // find provider manager  
        name = ProviderRegistrar().findProvider(name);  
        it=name.getInterfaceName();  
     }  
   
     else {  
        const CIMIndicationRequestMessage * p =  
           dynamic_cast<const CIMIndicationRequestMessage *>(message);  
        if (p) {  
           CIMIndicationRequestMessage *m=(CIMIndicationRequestMessage*)message;  
           it=m->providerModule.getProperty (m->providerModule.findProperty  
                 ("InterfaceType")).getValue ().toString ();  
        }  
 /*       else {  
           const CIMConsumeIndicationRequestMessage * p =  
             dynamic_cast<const CIMConsumeIndicationRequestMessage *>(message);  
           if (p) {  
              CIMConsumeIndicationRequestMessage *m=(CIMConsumeIndicationRequestMessage*)message;  
              it=m->consumer_module.getProperty (m->consumer_module.findProperty  
                 ("InterfaceType")).getValue ().toString ();  
           } */  
           else {  // remaining functions are sent to default provider  
 //           cout<<"--- ProviderManagerService::locateProviderManager(): unknown message type: "<<  
 //              message->getType()<<endl;  
              it="C++Default";  
 //           return NULL;  
        }  
  //      }  
     }  
   
     // find provider manager for provider interface  
     for(Uint32 i = 0, n = _providerManagers.size(); i < n; i++)  
     {  
         if (String::equalNoCase(it,_providerManagers[i]->getInterfaceName())) {  
            ProviderManagerContainer *pmc=_providerManagers[i];  
            return pmc->getProviderManager();  
         }         }
   
   PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL
   ProviderManagerService::_unloadIdleProvidersHandler(void* arg) throw()
   {
       try
       {
           PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
               "ProviderManagerService::unloadIdleProvidersHandler");
   
           ProviderManagerService* myself =
               reinterpret_cast<ProviderManagerService*>(arg);
   
           try
           {
               myself->_providerManagerRouter->unloadIdleProviders();
     }     }
     ProviderManagerContainer *pmc=_providerManagers[0];          catch (...)
     return pmc->getProviderManager();          {
               // Ignore errors
               PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
                   "Unexpected exception in _unloadIdleProvidersHandler");
 } }
  
 void ProviderManagerService::unload_idle_providers(void)          myself->_unloadIdleProvidersBusy--;
           PEG_METHOD_EXIT();
       }
       catch (...)
 { {
           // Ignore errors
           PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
               "Unexpected exception in _unloadIdleProvidersHandler");
 } }
  
 PEGASUS_NAMESPACE_END      return(PEGASUS_THREAD_RETURN(0));
   }
   
   // Updates the providerModule instance and the ProviderRegistrationManager
   void ProviderManagerService::_updateProviderModuleStatus(
       CIMInstance& providerModule,
       Uint16 fromStatus,
       Uint16 toStatus)
   {
       PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
           "ProviderManagerService::_updateProviderModuleStatus");
   
       Array<Uint16> operationalStatus;
       String providerModuleName;
   
       Uint32 pos = providerModule.findProperty(CIMName("Name"));
       PEGASUS_ASSERT(pos != PEG_NOT_FOUND);
       providerModule.getProperty(pos).getValue().get(providerModuleName);
   
       //
       // get operational status
       //
       pos = providerModule.findProperty(CIMName("OperationalStatus"));
       PEGASUS_ASSERT(pos != PEG_NOT_FOUND);
       CIMProperty operationalStatusProperty = providerModule.getProperty(pos);
       CIMValue operationalStatusValue = operationalStatusProperty.getValue();
  
       if (!operationalStatusValue.isNull())
       {
           operationalStatusValue.get(operationalStatus);
       }
   
       //
       // update module status
       //
       for (Uint32 i = operationalStatus.size(); i > 0; i--)
       {
           if (operationalStatus[i-1] == fromStatus)
           {
               operationalStatus.remove(i-1);
           }
       }
   
       operationalStatus.append(toStatus);
   
       if (_providerRegistrationManager->setProviderModuleStatus(
               providerModuleName, operationalStatus) == false)
       {
           throw PEGASUS_CIM_EXCEPTION_L(
               CIM_ERR_FAILED,
               MessageLoaderParms(
                   "ProviderManager.ProviderManagerService."
                       "SET_MODULE_STATUS_FAILED",
                   "set module status failed."));
       }
   
       operationalStatusProperty.setValue(CIMValue(operationalStatus));
   
       PEG_METHOD_EXIT();
   }
   
   void ProviderManagerService::indicationCallback(
       CIMProcessIndicationRequestMessage* request)
   {
           try
           {
                   AcceptLanguageListContainer cntr = request->operationContext.get(AcceptLanguageListContainer::NAME);
           }catch(Exception &e)
           {
                   request->operationContext.insert(AcceptLanguageListContainer(AcceptLanguages::EMPTY));
           }
   
           if (_indicationServiceQueueId == PEG_NOT_FOUND)
       {
           Array<Uint32> serviceIds;
   
           providerManagerService->find_services(
               PEGASUS_QUEUENAME_INDICATIONSERVICE, 0, 0, &serviceIds);
           PEGASUS_ASSERT(serviceIds.size() != 0);
   
           _indicationServiceQueueId = serviceIds[0];
       }
   
       request->queueIds = QueueIdStack(
           _indicationServiceQueueId, providerManagerService->getQueueId());
   
       AsyncLegacyOperationStart * asyncRequest =
           new AsyncLegacyOperationStart(
           providerManagerService->get_next_xid(),
           0,
           _indicationServiceQueueId,
           request,
           _indicationServiceQueueId);
   
       providerManagerService->SendForget(asyncRequest);
   }
   
   PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.25  
changed lines
  Added in v.1.54

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2