(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.47 and 1.67

version 1.47, 2004/06/16 12:45:55 version 1.67, 2005/05/06 21:44:28
Line 1 
Line 1 
 //%2003////////////////////////////////////////////////////////////////////////  //%2005////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.  // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.; // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
 // IBM Corp.; EMC Corporation, The Open Group. // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 40 
Line 44 
 #include "ProviderManagerService.h" #include "ProviderManagerService.h"
  
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
   #include <Pegasus/Common/PegasusVersion.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/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/AutoPtr.h> #include <Pegasus/Common/AutoPtr.h>
   #include <Pegasus/Common/Constants.h>
  
 #include <Pegasus/Config/ConfigManager.h> #include <Pegasus/Config/ConfigManager.h>
  
 #include <Pegasus/ProviderManager2/BasicProviderManagerRouter.h> #include <Pegasus/ProviderManager2/BasicProviderManagerRouter.h>
   #include <Pegasus/ProviderManager2/OOPProviderManagerRouter.h>
   #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 static const Uint16 _MODULE_OK       = 2;  
 static const Uint16 _MODULE_STOPPING = 9;  
 static const Uint16 _MODULE_STOPPED  = 10;  
   
 CIMRepository* ProviderManagerService::_repository=NULL;  
   
 inline Boolean _isSupportedRequestType(const Message * message) inline Boolean _isSupportedRequestType(const Message * message)
 { {
     // ATTN: needs implementation     // ATTN: needs implementation
Line 98 
Line 100 
  
     _unloadIdleProvidersBusy = 0;     _unloadIdleProvidersBusy = 0;
  
     _providerManagerRouter =      _basicProviderManagerRouter = 0;
       _oopProviderManagerRouter = 0;
   
       // Determine which ProviderManagerRouter(s) to use
   
       ConfigManager* configManager = ConfigManager::getInstance();
       Boolean forceProviderProcesses = String::equal(
           configManager->getCurrentValue("forceProviderProcesses"), "true");
   
   #ifdef PEGASUS_DISABLE_PROV_USERCTXT
       if (forceProviderProcesses)
       {
           _oopProviderManagerRouter =
               new OOPProviderManagerRouter(indicationCallback);
       }
       else
       {
           _basicProviderManagerRouter =
         new BasicProviderManagerRouter(indicationCallback);         new BasicProviderManagerRouter(indicationCallback);
 } }
   #else
       _oopProviderManagerRouter =
           new OOPProviderManagerRouter(indicationCallback);
   
       if (!forceProviderProcesses)
       {
           _basicProviderManagerRouter =
               new BasicProviderManagerRouter(indicationCallback);
       }
   #endif
   }
  
 ProviderManagerService::~ProviderManagerService(void) ProviderManagerService::~ProviderManagerService(void)
 { {
     delete _providerManagerRouter;      delete _basicProviderManagerRouter;
       delete _oopProviderManagerRouter;
     providerManagerService=NULL;     providerManagerService=NULL;
 } }
  
Line 180 
Line 211 
     return;     return;
 } }
  
   // Note: This method should not throw an exception.  It is used as a thread
   // entry point, and any exceptions thrown are ignored.
 PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL
 ProviderManagerService::handleCimOperation(void * arg) throw()  ProviderManagerService::handleCimOperation(void* arg)
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         "ProviderManagerService::handleCimOperation");         "ProviderManagerService::handleCimOperation");
  
     if(arg == 0)      PEGASUS_ASSERT(arg != 0);
     {  
         // thread started with invalid argument.  
         return(PEGASUS_THREAD_RETURN(1));  
     }  
  
     // get the service from argument     // get the service from argument
     ProviderManagerService * service =     ProviderManagerService * service =
         reinterpret_cast<ProviderManagerService *>(arg);         reinterpret_cast<ProviderManagerService *>(arg);
       PEGASUS_ASSERT(service != 0);
  
       try
       {
     if(service->_incomingQueue.size() == 0)     if(service->_incomingQueue.size() == 0)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             "ProviderManagerService::handleCimOperation() called with no "             "ProviderManagerService::handleCimOperation() called with no "
                 "op node in queue");                 "op node in queue");
  
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
   
         // thread started with no message in queue.  
         return(PEGASUS_THREAD_RETURN(1));         return(PEGASUS_THREAD_RETURN(1));
     }     }
  
Line 223 
Line 253 
         return(PEGASUS_THREAD_RETURN(1));         return(PEGASUS_THREAD_RETURN(1));
     }     }
  
     AsyncRequest * request = static_cast<AsyncRequest *>(op->_request.next(0));          AsyncRequest* request =
               static_cast<AsyncRequest*>(op->_request.next(0));
  
     if ((request == 0) ||     if ((request == 0) ||
         (request->getType() != async_messages::ASYNC_LEGACY_OP_START))         (request->getType() != async_messages::ASYNC_LEGACY_OP_START))
Line 233 
Line 264 
         return(PEGASUS_THREAD_RETURN(0));         return(PEGASUS_THREAD_RETURN(0));
     }     }
  
     try  
     {  
         Message* legacy =         Message* legacy =
             static_cast<AsyncLegacyOperationStart *>(request)->get_action();             static_cast<AsyncLegacyOperationStart *>(request)->get_action();
  
Line 249 
Line 278 
  
             if (msg != 0)             if (msg != 0)
             {             {
                 AcceptLanguages* langs =                  AcceptLanguages* langs = new AcceptLanguages(
                     new AcceptLanguages(msg->acceptLanguages);                      ((AcceptLanguageListContainer)msg->operationContext.get(
                           AcceptLanguageListContainer::NAME)).getLanguages());
                 Thread::setLanguages(langs);                 Thread::setLanguages(langs);
             }             }
             else             else
Line 261 
Line 291 
             service->handleCimRequest(op, legacy);             service->handleCimRequest(op, legacy);
         }         }
     }     }
       catch (const Exception& e)
       {
           PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
               "Unexpected exception in handleCimOperation: " + e.getMessage());
       }
     catch(...)     catch(...)
     {     {
         // ATTN: log error          PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
               "Unexpected exception in handleCimOperation.");
     }     }
  
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
Line 286 
Line 322 
     PEGASUS_ASSERT(async != 0);     PEGASUS_ASSERT(async != 0);
  
     Message * response = 0;     Message * response = 0;
       Boolean consumerLookupFailed = false;
   
       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 providerModule;
           CIMInstance provider;
           const CIMExportIndicationRequestMessage* expRequest =
               dynamic_cast<const CIMExportIndicationRequestMessage*>(request);
           if (_providerRegistrationManager->lookupIndicationConsumer(
                   expRequest->destinationPath, provider, providerModule))
           {
               request->operationContext.insert(
                   ProviderIdContainer(providerModule, provider));
           }
           else
           {
               consumerLookupFailed = true;
           }
       }
  
     if ((dynamic_cast<CIMOperationRequestMessage*>(request) != 0) ||      if (consumerLookupFailed)
       {
           CIMResponseMessage* cimResponse = request->buildResponse();
           cimResponse->cimException = PEGASUS_CIM_EXCEPTION(
               CIM_ERR_NOT_SUPPORTED, String::EMPTY);
           response = cimResponse;
       }
       else if ((dynamic_cast<CIMOperationRequestMessage*>(request) != 0) ||
         (dynamic_cast<CIMIndicationRequestMessage*>(request) != 0) ||         (dynamic_cast<CIMIndicationRequestMessage*>(request) != 0) ||
         (request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE) ||         (request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE) ||
         (request->getType() == CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE))         (request->getType() == CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE))
Line 301 
Line 368 
         //         //
         CIMInstance providerModule;         CIMInstance providerModule;
  
         CIMIndicationRequestMessage* indRequest =  
             dynamic_cast<CIMIndicationRequestMessage*>(request);  
         if (indRequest != 0)  
         {  
             providerModule = indRequest->providerModule;  
         }  
         else if (request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE)  
         {  
             // Get a ProviderIdContainer for ExportIndicationRequestMessage  
             ProviderIdContainer pidc = _getProviderIdContainer(request);  
             request->operationContext.insert(pidc);  
   
             providerModule = pidc.getModule();  
         }  
         else  
         {  
             // The provider ID container is added to the OperationContext             // The provider ID container is added to the OperationContext
             // by the CIMOperationRequestDispatcher for all CIM operation             // by the CIMOperationRequestDispatcher for all CIM operation
             // requests to providers, so it does not need to be added again.             // requests to providers, so it does not need to be added again.
Line 325 
Line 376 
             ProviderIdContainer pidc =             ProviderIdContainer pidc =
                 request->operationContext.get(ProviderIdContainer::NAME);                 request->operationContext.get(ProviderIdContainer::NAME);
             providerModule = pidc.getModule();             providerModule = pidc.getModule();
         }  
  
         //         //
         // Check if the target provider is disabled         // Check if the target provider is disabled
Line 338 
Line 388 
  
         for(Uint32 i = 0; i < operationalStatus.size(); i++)         for(Uint32 i = 0; i < operationalStatus.size(); i++)
         {         {
             if ((operationalStatus[i] == _MODULE_STOPPED) ||              if ((operationalStatus[i] == CIM_MSE_OPSTATUS_VALUE_STOPPED) ||
                 (operationalStatus[i] == _MODULE_STOPPING))                  (operationalStatus[i] == CIM_MSE_OPSTATUS_VALUE_STOPPING))
             {             {
                 moduleDisabled = true;                 moduleDisabled = true;
                 break;                 break;
Line 364 
Line 414 
             //             //
             // Forward the request to the appropriate ProviderManagerRouter             // Forward the request to the appropriate ProviderManagerRouter
             //             //
             response = _providerManagerRouter->processMessage(request);              response = _processMessage(request);
         }         }
     }     }
     else if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)     else if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)
Line 378 
Line 428 
         try         try
         {         {
             // Forward the request to the ProviderManager             // Forward the request to the ProviderManager
             response = _providerManagerRouter->processMessage(request);              response = _processMessage(request);
  
             // If successful, update provider module status to OK             // If successful, update provider module status to OK
             // ATTN: Use CIMEnableModuleResponseMessage operationalStatus?             // ATTN: Use CIMEnableModuleResponseMessage operationalStatus?
Line 387 
Line 437 
             if (emResp->cimException.getCode() == CIM_ERR_SUCCESS)             if (emResp->cimException.getCode() == CIM_ERR_SUCCESS)
             {             {
                 _updateProviderModuleStatus(                 _updateProviderModuleStatus(
                     providerModule, _MODULE_STOPPED, _MODULE_OK);                      providerModule, CIM_MSE_OPSTATUS_VALUE_STOPPED,
                       CIM_MSE_OPSTATUS_VALUE_OK);
             }             }
         }         }
         catch (Exception& e)         catch (Exception& e)
Line 426 
Line 477 
             if (updateModuleStatus)             if (updateModuleStatus)
             {             {
                 _updateProviderModuleStatus(                 _updateProviderModuleStatus(
                     providerModule, _MODULE_OK, _MODULE_STOPPING);                      providerModule, CIM_MSE_OPSTATUS_VALUE_OK,
                       CIM_MSE_OPSTATUS_VALUE_STOPPING);
             }             }
  
             // Forward the request to the ProviderManager             // Forward the request to the ProviderManager
             response = _providerManagerRouter->processMessage(request);              response = _processMessage(request);
  
             // Update provider module status based on success or failure             // Update provider module status based on success or failure
             if (updateModuleStatus)             if (updateModuleStatus)
Line 441 
Line 493 
                 {                 {
                     // Disable operation failed.  Module not stopped.                     // Disable operation failed.  Module not stopped.
                     _updateProviderModuleStatus(                     _updateProviderModuleStatus(
                         providerModule, _MODULE_STOPPING, _MODULE_OK);                          providerModule, CIM_MSE_OPSTATUS_VALUE_STOPPING,
                           CIM_MSE_OPSTATUS_VALUE_OK);
                 }                 }
                 else                 else
                 {                 {
Line 449 
Line 502 
                     // depending on whether there are outstanding requests.                     // depending on whether there are outstanding requests.
                     // Use last operationalStatus entry.                     // Use last operationalStatus entry.
                     _updateProviderModuleStatus(                     _updateProviderModuleStatus(
                         providerModule, _MODULE_STOPPING,                          providerModule, CIM_MSE_OPSTATUS_VALUE_STOPPING,
                         dmResp->operationalStatus[                         dmResp->operationalStatus[
                             dmResp->operationalStatus.size()-1]);                             dmResp->operationalStatus.size()-1]);
                 }                 }
Line 478 
Line 531 
     }     }
     else     else
     {     {
         response = _providerManagerRouter->processMessage(request);          response = _processMessage(request);
     }     }
  
     AsyncLegacyOperationResult * async_result =     AsyncLegacyOperationResult * async_result =
Line 493 
Line 546 
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
  
   void
   ProviderManagerService::handleCimResponse(CIMRequestMessage &request,
                                                                                                                                                                           CIMResponseMessage &response)
   {
           CIMStatusCode code = CIM_ERR_SUCCESS;
           String message;
   
           try
           {
                   // only incomplete messages are processed because the caller ends up
                   // sending the complete() stage
                   PEGASUS_ASSERT(response.isComplete() == false);
   
                   AsyncLegacyOperationStart *requestAsync =
                           dynamic_cast<AsyncLegacyOperationStart *>(request._async);
                   PEGASUS_ASSERT(requestAsync);
                   AsyncOpNode *op = requestAsync->op;
                   PEGASUS_ASSERT(op);
                   PEGASUS_ASSERT(! response._async);
                   response._async = new AsyncLegacyOperationResult
                           (requestAsync->getKey(), requestAsync->getRouting(), op, &response);
   
                   // set the destination
                   op->_op_dest = op->_callback_response_q;
   
                   MessageQueueService *service =
                           dynamic_cast<MessageQueueService *>(op->_callback_response_q);
   
                   PEGASUS_ASSERT(service);
   
                   // the last chunk MUST be sent last, so use execute the callback
                   // not all chunks are going through the dispatcher's chunk
                   // resequencer, so this must be a synchronous call here
                   // After the call is done, response and asyncResponse are now invalid
                   // as they have been sent and deleted externally
   
                   op->_async_callback(op, service, op->_callback_ptr);
           }
   
           catch(CIMException &e)
           {
                   code = e.getCode();
                   message = e.getMessage();
           }
           catch(Exception &e)
           {
                   code = CIM_ERR_FAILED;
                   message = e.getMessage();
           }
           catch(...)
           {
                   code = CIM_ERR_FAILED;
                   message = cimStatusCodeToString(code);
           }
   
           if (code !=  CIM_ERR_SUCCESS)
                   response.cimException = PEGASUS_CIM_EXCEPTION(code, message);
   }
   
   Message* ProviderManagerService::_processMessage(CIMRequestMessage* request)
   {
       Message* response = 0;
   
       if ((request->getType() == CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE) ||
           (request->getType() ==
               CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE) ||
           (request->getType() == CIM_NOTIFY_CONFIG_CHANGE_REQUEST_MESSAGE))
       {
           if (_basicProviderManagerRouter)
           {
               response = _basicProviderManagerRouter->processMessage(request);
           }
   
           if (_oopProviderManagerRouter)
           {
               // Note: These responses do not contain interesting data, so just
               // use the last one.
               if (response)
               {
                   delete response;
               }
   
               response = _oopProviderManagerRouter->processMessage(request);
           }
       }
       else
       {
           CIMInstance providerModule;
   
           if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)
           {
               CIMEnableModuleRequestMessage* emReq =
                   dynamic_cast<CIMEnableModuleRequestMessage*>(request);
               providerModule = emReq->providerModule;
           }
           else if (request->getType() == CIM_DISABLE_MODULE_REQUEST_MESSAGE)
           {
               CIMDisableModuleRequestMessage* dmReq =
                   dynamic_cast<CIMDisableModuleRequestMessage*>(request);
               providerModule = dmReq->providerModule;
           }
           else
           {
               ProviderIdContainer pidc =
                   request->operationContext.get(ProviderIdContainer::NAME);
               providerModule = pidc.getModule();
           }
   
           Uint16 userContext = 0;
           Uint32 pos = providerModule.findProperty(
               PEGASUS_PROPERTYNAME_MODULE_USERCONTEXT);
           if (pos != PEG_NOT_FOUND)
           {
               providerModule.getProperty(pos).getValue().get(userContext);
           }
   
           // Forward the request to the appropriate ProviderManagerRouter, based
           // on the CIM Server configuration and the UserContext setting.
   
           ConfigManager* configManager = ConfigManager::getInstance();
           Boolean forceProviderProcesses = String::equal(
               configManager->getCurrentValue("forceProviderProcesses"), "true");
   
           if (forceProviderProcesses
   #ifndef PEGASUS_DISABLE_PROV_USERCTXT
               || (userContext == PG_PROVMODULE_USERCTXT_REQUESTOR)
               || (userContext == PG_PROVMODULE_USERCTXT_DESIGNATED)
               || ((userContext == PG_PROVMODULE_USERCTXT_PRIVILEGED) &&
                   !System::isPrivilegedUser(System::getEffectiveUserName()))
   #endif
              )
           {
               response = _oopProviderManagerRouter->processMessage(request);
           }
           else
           {
               response = _basicProviderManagerRouter->processMessage(request);
           }
       }
   
       return response;
   }
   
 void ProviderManagerService::unloadIdleProviders() void ProviderManagerService::unloadIdleProviders()
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
Line 527 
Line 723 
         ProviderManagerService* myself =         ProviderManagerService* myself =
             reinterpret_cast<ProviderManagerService*>(arg);             reinterpret_cast<ProviderManagerService*>(arg);
  
         try          if (myself->_basicProviderManagerRouter)
         {         {
             myself->_providerManagerRouter->unloadIdleProviders();              try
         }  
         catch (...)  
         {         {
             // Ignore errors                  myself->_basicProviderManagerRouter->unloadIdleProviders();
             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,  
                 "Unexpected exception in _unloadIdleProvidersHandler");  
         }  
   
         myself->_unloadIdleProvidersBusy--;  
         PEG_METHOD_EXIT();  
     }     }
     catch (...)     catch (...)
     {     {
         // Ignore errors         // Ignore errors
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             "Unexpected exception in _unloadIdleProvidersHandler");                      "Unexpected exception from "
     }                          "BasicProviderManagerRouter::_unloadIdleProviders");
   
     return(PEGASUS_THREAD_RETURN(0));  
 }  
   
 ProviderIdContainer ProviderManagerService::_getProviderIdContainer(  
     const CIMRequestMessage* message)  
 {  
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,  
         "ProviderManagerService::_getProviderIdContainer");  
   
     CIMInstance providerModule;  
     CIMInstance provider;  
   
     switch (message->getType())  
     {  
     case CIM_GET_CLASS_REQUEST_MESSAGE:  
     case CIM_DELETE_CLASS_REQUEST_MESSAGE:  
     case CIM_CREATE_CLASS_REQUEST_MESSAGE:  
     case CIM_MODIFY_CLASS_REQUEST_MESSAGE:  
     case CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE:  
     case CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE:  
     case CIM_GET_QUALIFIER_REQUEST_MESSAGE:  
     case CIM_SET_QUALIFIER_REQUEST_MESSAGE:  
     case CIM_DELETE_QUALIFIER_REQUEST_MESSAGE:  
     case CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE:  
         // The ProviderManagerService does not support class operations  
         PEGASUS_ASSERT(0);  
         break;  
   
     case CIM_GET_INSTANCE_REQUEST_MESSAGE:  
     case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:  
     case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:  
     case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:  
     case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:  
     case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:  
     case CIM_GET_PROPERTY_REQUEST_MESSAGE:  
     case CIM_SET_PROPERTY_REQUEST_MESSAGE:  
     {  
         // Look up instance provider  
         const CIMOperationRequestMessage* request =  
             dynamic_cast<const CIMOperationRequestMessage*>(message);  
         _providerRegistrationManager->lookupInstanceProvider(  
             request->nameSpace, request->className, provider, providerModule);  
         break;  
     }  
   
     case CIM_EXEC_QUERY_REQUEST_MESSAGE:  
     {  
         // Look up instance query provider  
         const CIMOperationRequestMessage* request =  
             dynamic_cast<const CIMOperationRequestMessage*>(message);  
         Boolean hasNoQuery;  
         _providerRegistrationManager->lookupInstanceProvider(  
             request->nameSpace, request->className, provider, providerModule,  
             0, &hasNoQuery);  
         // We shouldn't have gotten this far if this isn't a query provider  
         PEGASUS_ASSERT(!hasNoQuery);  
         break;  
     }  
   
     case CIM_ASSOCIATORS_REQUEST_MESSAGE:  
     {  
         // Look up association provider  
         const CIMAssociatorsRequestMessage* request =  
             dynamic_cast<const CIMAssociatorsRequestMessage*>(message);  
         Array<CIMInstance> providerModules;  
         Array<CIMInstance> providers;  
         _providerRegistrationManager->lookupAssociationProvider(  
             request->nameSpace, request->assocClass,  
             providers, providerModules);  
         providerModule = providerModules[0];  
         provider = providers[0];  
         break;  
     }     }
   
     case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:  
     {  
         // Look up association provider  
         const CIMAssociatorNamesRequestMessage* request =  
             dynamic_cast<const CIMAssociatorNamesRequestMessage*>(message);  
         Array<CIMInstance> providerModules;  
         Array<CIMInstance> providers;  
         _providerRegistrationManager->lookupAssociationProvider(  
             request->nameSpace, request->assocClass,  
             providers, providerModules);  
         providerModule = providerModules[0];  
         provider = providers[0];  
         break;  
     }     }
  
     case CIM_REFERENCES_REQUEST_MESSAGE:          if (myself->_oopProviderManagerRouter)
     {     {
         // Look up association provider              try
         const CIMReferencesRequestMessage* request =  
             dynamic_cast<const CIMReferencesRequestMessage*>(message);  
         Array<CIMInstance> providerModules;  
         Array<CIMInstance> providers;  
         _providerRegistrationManager->lookupAssociationProvider(  
             request->nameSpace, request->resultClass,  
             providers, providerModules);  
         providerModule = providerModules[0];  
         provider = providers[0];  
         break;  
     }  
   
     case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:  
     {     {
         // Look up association provider                  myself->_oopProviderManagerRouter->unloadIdleProviders();
         const CIMReferenceNamesRequestMessage* request =  
             dynamic_cast<const CIMReferenceNamesRequestMessage*>(message);  
         Array<CIMInstance> providerModules;  
         Array<CIMInstance> providers;  
         _providerRegistrationManager->lookupAssociationProvider(  
             request->nameSpace, request->resultClass,  
             providers, providerModules);  
         providerModule = providerModules[0];  
         provider = providers[0];  
         break;  
     }     }
               catch (...)
     case CIM_INVOKE_METHOD_REQUEST_MESSAGE:  
     {     {
         // Look up method provider                  // Ignore errors
         const CIMInvokeMethodRequestMessage* request =                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             dynamic_cast<const CIMInvokeMethodRequestMessage*>(message);                      "Unexpected exception from "
         _providerRegistrationManager->lookupMethodProvider(                          "OOPProviderManagerRouter::_unloadIdleProviders");
             request->nameSpace, request->className, request->methodName,  
             provider, providerModule);  
         break;  
     }     }
   
     case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:  
     {  
         const CIMExportIndicationRequestMessage* request =  
             dynamic_cast<const CIMExportIndicationRequestMessage*>(message);  
         _providerRegistrationManager->lookupIndicationConsumer(  
             request->destinationPath, provider, providerModule);  
         break;  
     }     }
  
     case CIM_ENABLE_INDICATIONS_REQUEST_MESSAGE:          myself->_unloadIdleProvidersBusy--;
     case CIM_DISABLE_INDICATIONS_REQUEST_MESSAGE:          PEG_METHOD_EXIT();
     case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:  
     case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:  
     case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:  
     {  
         // Provider information is already in the message  
         const CIMIndicationRequestMessage* request =  
             dynamic_cast<const CIMIndicationRequestMessage*>(message);  
         providerModule = request->providerModule;  
         provider = request->provider;  
         break;  
     }     }
       catch (...)
     case CIM_ENABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE:  
     case CIM_MODIFY_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE:  
     case CIM_DISABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE:  
     case CIM_PROCESS_INDICATION_REQUEST_MESSAGE:  
     case CIM_HANDLE_INDICATION_REQUEST_MESSAGE:  
     case CIM_NOTIFY_PROVIDER_REGISTRATION_REQUEST_MESSAGE:  
     case CIM_NOTIFY_PROVIDER_TERMINATION_REQUEST_MESSAGE:  
         // These messages are not handled by the ProviderManagerService  
         PEGASUS_ASSERT(0);  
         break;  
   
     case CIM_DISABLE_MODULE_REQUEST_MESSAGE:  
     case CIM_ENABLE_MODULE_REQUEST_MESSAGE:  
     case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:  
         // These messages are handled specially by the ProviderManagerService  
         PEGASUS_ASSERT(0);  
         break;  
   
     case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:  
     {     {
         // Provider information is already in the message          // Ignore errors
         const CIMInitializeProviderRequestMessage* request =          PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             dynamic_cast<const CIMInitializeProviderRequestMessage*>(message);              "Unexpected exception in _unloadIdleProvidersHandler");
   
         const ProviderIdContainer container =  
             request->operationContext.get(ProviderIdContainer::NAME);  
         providerModule = container.getModule();  
         provider = container.getProvider();  
         break;  
     }  
   
     }     }
  
     PEGASUS_ASSERT(!providerModule.isUninitialized());      return(PEGASUS_THREAD_RETURN(0));
     PEGASUS_ASSERT(!provider.isUninitialized());  
   
     PEG_METHOD_EXIT();  
     return ProviderIdContainer(providerModule, provider);  
 } }
  
 // Updates the providerModule instance and the ProviderRegistrationManager // Updates the providerModule instance and the ProviderRegistrationManager
Line 802 
Line 827 
 void ProviderManagerService::indicationCallback( void ProviderManagerService::indicationCallback(
     CIMProcessIndicationRequestMessage* request)     CIMProcessIndicationRequestMessage* request)
 { {
           try
           {
                   AcceptLanguageListContainer cntr = request->operationContext.get(AcceptLanguageListContainer::NAME);
           }catch(const Exception &)
           {
                   request->operationContext.insert(AcceptLanguageListContainer(AcceptLanguages::EMPTY));
           }
   
     if (_indicationServiceQueueId == PEG_NOT_FOUND)     if (_indicationServiceQueueId == PEG_NOT_FOUND)
     {     {
         Array<Uint32> serviceIds;         Array<Uint32> serviceIds;


Legend:
Removed from v.1.47  
changed lines
  Added in v.1.67

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2