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

Diff for /pegasus/src/Pegasus/ProviderManager2/Attic/OOPProviderManagerRouter.cpp between version 1.25.2.6 and 1.28

version 1.25.2.6, 2006/09/19 18:06:47 version 1.28, 2006/04/19 19:39:25
Line 97 
Line 97 
 { {
 public: public:
     OutstandingRequestEntry(     OutstandingRequestEntry(
         String originalMessageId_,          String messageId_,
         CIMRequestMessage* requestMessage_,         CIMRequestMessage* requestMessage_,
         CIMResponseMessage*& responseMessage_,         CIMResponseMessage*& responseMessage_,
         Semaphore* responseReady_)         Semaphore* responseReady_)
         : originalMessageId(originalMessageId_),          : messageId(messageId_),
           requestMessage(requestMessage_),           requestMessage(requestMessage_),
           responseMessage(responseMessage_),           responseMessage(responseMessage_),
           responseReady(responseReady_)           responseReady(responseReady_)
     {     {
     }     }
  
     /**      String messageId;
         A unique value is substituted as the request messageId attribute to  
         allow responses to be definitively correllated with requests.  
         The original messageId value is stored here to avoid a race condition  
         between the processing of a response chunk and the resetting of the  
         original messageId in the request message.  
      */  
     String originalMessageId;  
     CIMRequestMessage* requestMessage;     CIMRequestMessage* requestMessage;
     CIMResponseMessage*& responseMessage;     CIMResponseMessage*& responseMessage;
     Semaphore* responseReady;     Semaphore* responseReady;
Line 135 
Line 128 
     ProviderAgentContainer(     ProviderAgentContainer(
         const String & moduleName,         const String & moduleName,
         const String & userName,         const String & userName,
         Uint16 userContext,  
         PEGASUS_INDICATION_CALLBACK_T indicationCallback,         PEGASUS_INDICATION_CALLBACK_T indicationCallback,
         PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,         PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,
         PEGASUS_PROVIDERMODULEFAIL_CALLBACK_T providerModuleFailCallback,  
         Boolean subscriptionInitComplete);         Boolean subscriptionInitComplete);
  
     ~ProviderAgentContainer();     ~ProviderAgentContainer();
Line 234 
Line 225 
     String _userName;     String _userName;
  
     /**     /**
         User Context setting of the provider module served by this Provider  
         Agent.  
      */  
     Uint16 _userContext;  
   
     /**  
         Callback function to which all generated indications are sent for         Callback function to which all generated indications are sent for
         processing.         processing.
      */      */
Line 251 
Line 236 
     PEGASUS_RESPONSE_CHUNK_CALLBACK_T _responseChunkCallback;     PEGASUS_RESPONSE_CHUNK_CALLBACK_T _responseChunkCallback;
  
     /**     /**
         Callback function to be called upon detection of failure of a  
         provider module.  
      */  
     PEGASUS_PROVIDERMODULEFAIL_CALLBACK_T _providerModuleFailCallback;  
   
     /**  
         Indicates whether the Provider Agent is active.         Indicates whether the Provider Agent is active.
      */      */
     Boolean _isInitialized;     Boolean _isInitialized;
Line 346 
Line 325 
 ProviderAgentContainer::ProviderAgentContainer( ProviderAgentContainer::ProviderAgentContainer(
     const String & moduleName,     const String & moduleName,
     const String & userName,     const String & userName,
     Uint16 userContext,  
     PEGASUS_INDICATION_CALLBACK_T indicationCallback,     PEGASUS_INDICATION_CALLBACK_T indicationCallback,
     PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,     PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,
     PEGASUS_PROVIDERMODULEFAIL_CALLBACK_T providerModuleFailCallback,  
     Boolean subscriptionInitComplete)     Boolean subscriptionInitComplete)
     : _moduleName(moduleName),     : _moduleName(moduleName),
       _userName(userName),       _userName(userName),
       _userContext(userContext),  
       _indicationCallback(indicationCallback),       _indicationCallback(indicationCallback),
       _responseChunkCallback(responseChunkCallback),       _responseChunkCallback(responseChunkCallback),
       _providerModuleFailCallback(providerModuleFailCallback),  
       _isInitialized(false),       _isInitialized(false),
       _subscriptionInitComplete(subscriptionInitComplete)       _subscriptionInitComplete(subscriptionInitComplete)
 { {
Line 545 
Line 520 
     }     }
 #elif defined (PEGASUS_OS_OS400) #elif defined (PEGASUS_OS_OS400)
  
     //Out of process provider support for OS400 goes here when needed.      //Out of provider support for OS400 goes here when needed.
  
 #else #else
  
Line 928 
Line 903 
         // connection         // connection
         //         //
         {         {
               //
               //  If not a clean shutdown, log a warning message in case module
               //  included indication providers
               //
               if (!cleanShutdown)
               {
                   Logger::put_l(
                       Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
                       "ProviderManager.OOPProviderManagerRouter."
                           "OOP_PROVIDER_MODULE_FAILURE_DETECTED",
                       "A failure was detected in provider module $0.  The"
                           " generation of indications by providers in this module"
                           " may be affected.  To ensure these providers are"
                           " serving active subscriptions, disable and then"
                           " re-enable this module using the cimprovider command.",
                       _moduleName);
               }
   
             AutoMutex tableLock(_outstandingRequestTableMutex);             AutoMutex tableLock(_outstandingRequestTableMutex);
  
             CIMResponseMessage* response =             CIMResponseMessage* response =
Line 938 
Line 931 
                  i != 0; i++)                  i != 0; i++)
             {             {
                 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,                 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
                     String("Completing messageId \"") + i.key() +                      String("Completing messageId \"") + i.value()->messageId +
                         "\" with a null response.");                         "\" with a null response.");
                 i.value()->responseMessage = response;                 i.value()->responseMessage = response;
                 i.value()->responseReady->signal();                 i.value()->responseReady->signal();
             }             }
  
             _outstandingRequestTable.clear();             _outstandingRequestTable.clear();
   
             //  
             //  If not a clean shutdown, call the provider module failure  
             //  callback  
             //  
             if (!cleanShutdown)  
             {  
                 //  
                 //  Call the provider module failure callback to  
                 //  communicate the failure to the Provider Manager Service  
                 //  Provider Manager Service will inform Indication Service  
                 //  
                 _providerModuleFailCallback (_moduleName, _userName,  
                     _userContext);  
             }  
         }         }
     }     }
     catch (...)     catch (...)
Line 1018 
Line 996 
         }         }
     } while (response == _REQUEST_NOT_PROCESSED);     } while (response == _REQUEST_NOT_PROCESSED);
  
     if (request->getType() == CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE)  
     {  
         _subscriptionInitComplete = true;  
     }  
   
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
     return response;     return response;
 } }
Line 1060 
Line 1033 
         //         //
         Semaphore waitSemaphore(0);         Semaphore waitSemaphore(0);
         OutstandingRequestEntry outstandingRequestEntry(         OutstandingRequestEntry outstandingRequestEntry(
             originalMessageId, request, response, &waitSemaphore);              uniqueMessageId, request, response, &waitSemaphore);
  
         //         //
         // Lock the Provider Agent Container while initializing the         // Lock the Provider Agent Container while initializing the
Line 1355 
Line 1328 
  
                 // Put the original message ID into the response                 // Put the original message ID into the response
                 response->messageId =                 response->messageId =
                     _outstandingRequestEntry->originalMessageId;                      _outstandingRequestEntry->requestMessage->messageId;
  
                 // Call the response chunk callback to process the chunk                 // Call the response chunk callback to process the chunk
                 _responseChunkCallback(                 _responseChunkCallback(
Line 1416 
Line 1389 
  
 OOPProviderManagerRouter::OOPProviderManagerRouter( OOPProviderManagerRouter::OOPProviderManagerRouter(
     PEGASUS_INDICATION_CALLBACK_T indicationCallback,     PEGASUS_INDICATION_CALLBACK_T indicationCallback,
     PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,      PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback)
     PEGASUS_PROVIDERMODULEFAIL_CALLBACK_T providerModuleFailCallback)  
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         "OOPProviderManagerRouter::OOPProviderManagerRouter");         "OOPProviderManagerRouter::OOPProviderManagerRouter");
  
     _indicationCallback = indicationCallback;     _indicationCallback = indicationCallback;
     _responseChunkCallback = responseChunkCallback;     _responseChunkCallback = responseChunkCallback;
     _providerModuleFailCallback = providerModuleFailCallback;  
     _subscriptionInitComplete = false;     _subscriptionInitComplete = false;
  
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
Line 1682 
Line 1653 
     }     }
     else     else
     {     {
         //  
         // Look up the Provider Agent for this module instance and requesting  
         // user  
         //  
         ProviderAgentContainer* pa = _lookupProviderAgent(providerModule,  
             request);  
         PEGASUS_ASSERT(pa != 0);  
   
         //  
         // Forward the request to the provider agent  
         //  
         response.reset(pa->processMessage(request));  
     }  
   
     response->syncAttributes(request);  
   
     PEG_METHOD_EXIT();  
     return response.release();  
 }  
   
 ProviderAgentContainer* OOPProviderManagerRouter::_lookupProviderAgent(  
     const CIMInstance& providerModule,  
     CIMRequestMessage* request)  
 {  
     // Retrieve the provider module name     // Retrieve the provider module name
     String moduleName;     String moduleName;
     CIMValue nameValue = providerModule.getProperty(     CIMValue nameValue = providerModule.getProperty(
Line 1728 
Line 1675 
  
     if (userContext == 0)     if (userContext == 0)
     {     {
         userContext = PEGASUS_DEFAULT_PROV_USERCTXT;              userContext = PG_PROVMODULE_USERCTXT_PRIVILEGED;
     }     }
  
     String userName;     String userName;
Line 1756 
Line 1703 
     }     }
     else if (userContext == PG_PROVMODULE_USERCTXT_DESIGNATED)     else if (userContext == PG_PROVMODULE_USERCTXT_DESIGNATED)
     {     {
         // Retrieve the provider module designated user property value              // Retrieve the provider module name
         providerModule.getProperty(providerModule.findProperty(         providerModule.getProperty(providerModule.findProperty(
             PEGASUS_PROPERTYNAME_MODULE_DESIGNATEDUSER)).getValue().             PEGASUS_PROPERTYNAME_MODULE_DESIGNATEDUSER)).getValue().
             get(userName);             get(userName);
Line 1778 
Line 1725 
     PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,     PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
         "User name = " + userName);         "User name = " + userName);
  
           // Look up the Provider Agent for this module and user
           ProviderAgentContainer* pa = _lookupProviderAgent(moduleName, userName);
           PEGASUS_ASSERT(pa != 0);
   
           //
           // Forward the request to the provider agent
           //
           response.reset(pa->processMessage(request));
       }
   
       response->syncAttributes(request);
   
       PEG_METHOD_EXIT();
       return response.release();
   }
   
   ProviderAgentContainer* OOPProviderManagerRouter::_lookupProviderAgent(
       const String& moduleName,
       const String& userName)
   {
     ProviderAgentContainer* pa = 0;     ProviderAgentContainer* pa = 0;
     String key = moduleName + ":" + userName;     String key = moduleName + ":" + userName;
  
Line 1785 
Line 1752 
     if (!_providerAgentTable.lookup(key, pa))     if (!_providerAgentTable.lookup(key, pa))
     {     {
         pa = new ProviderAgentContainer(         pa = new ProviderAgentContainer(
             moduleName, userName, userContext,              moduleName, userName, _indicationCallback, _responseChunkCallback,
             _indicationCallback, _responseChunkCallback,  
             _providerModuleFailCallback,  
             _subscriptionInitComplete);             _subscriptionInitComplete);
         _providerAgentTable.insert(key, pa);         _providerAgentTable.insert(key, pa);
     }     }


Legend:
Removed from v.1.25.2.6  
changed lines
  Added in v.1.28

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2