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

Diff for /pegasus/src/Pegasus/ProviderManager2/Attic/BasicProviderManagerRouter.cpp between version 1.5 and 1.30

version 1.5, 2004/06/04 02:23:58 version 1.30, 2006/03/08 23:14:30
Line 1 
Line 1 
 //%2003////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // 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.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec 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 26 
Line 32 
 // Author: Chip Vincent (cvincent@us.ibm.com) // Author: Chip Vincent (cvincent@us.ibm.com)
 //         Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) //         Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
 // //
 // Modified By:  // Modified By: Seema Gupta(gseema@in.ibm.com) for PEP135
   //              Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com)
   //              Carol Ann Krug Graves, Hewlett-Packard Company
   //                  (carolann_graves@hp.com)
   //              Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for Bug#2619, #2685,#3354
   //              John Alex, IBM (johnalex@us.ibm.com) - Bug#2290
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "BasicProviderManagerRouter.h" #include "BasicProviderManagerRouter.h"
  
 #include <Pegasus/Common/Config.h> #include <Pegasus/Common/Config.h>
   #include <Pegasus/Common/OperationContextInternal.h>
 #include <Pegasus/Common/CIMMessage.h> #include <Pegasus/Common/CIMMessage.h>
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
   #include <Pegasus/Common/Logger.h>
   #include <Pegasus/Common/FileSystem.h>
   #include <Pegasus/Config/ConfigManager.h>
 #include <Pegasus/ProviderManager2/OperationResponseHandler.h> #include <Pegasus/ProviderManager2/OperationResponseHandler.h>
 #include <Pegasus/ProviderManager2/ProviderManagerModule.h> #include <Pegasus/ProviderManager2/ProviderManagerModule.h>
 #include <Pegasus/ProviderManager2/ProviderManager.h> #include <Pegasus/ProviderManager2/ProviderManager.h>
  
 // ProviderManager library names.  Should these be defined elsewhere? // ProviderManager library names.  Should these be defined elsewhere?
 #if defined(PEGASUS_OS_OS400) #if defined(PEGASUS_OS_OS400)
 # define LIBRARY_NAME_DEFAULTPM "QSYS/QYCMDFTPVM"  # define LIBRARY_NAME_DEFAULTPM "QSYS/QYCMPMDE00"
 # define LIBRARY_NAME_CMPIPM    "QSYS/QYCMCMPIPM" # define LIBRARY_NAME_CMPIPM    "QSYS/QYCMCMPIPM"
 # define LIBRARY_NAME_JMPIPM    "QSYS/QYCMJMPIPM" # define LIBRARY_NAME_JMPIPM    "QSYS/QYCMJMPIPM"
 #else #else
Line 71 
Line 86 
         const String& physicalName,         const String& physicalName,
         const String& logicalName,         const String& logicalName,
         const String& interfaceName,         const String& interfaceName,
         PEGASUS_INDICATION_CALLBACK indicationCallback)          PEGASUS_INDICATION_CALLBACK_T indicationCallback,
           PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,
           Boolean subscriptionInitComplete)
     : _manager(0)     : _manager(0)
     {     {
         _physicalName = ProviderManager::_resolvePhysicalName(physicalName);  #if defined (PEGASUS_OS_VMS)
           _physicalName = ConfigManager::getInstance()->getCurrentValue("providerDir") +
               String("/") + FileSystem::buildLibraryFileName(physicalName) + String(".exe");
   #elif defined (PEGASUS_OS_OS400)
           _physicalName = physicalName;
   #else
           _physicalName = ConfigManager::getHomedPath(PEGASUS_DEST_LIB_DIR) +
               String("/") + FileSystem::buildLibraryFileName(physicalName);
   #endif
  
         _logicalName = logicalName;         _logicalName = logicalName;
         _interfaceName = interfaceName;         _interfaceName = interfaceName;
  
         _module = ProviderManagerModule(_physicalName);         _module = ProviderManagerModule(_physicalName);
         _module.load();          Boolean moduleLoaded = _module.load();
  
           if (moduleLoaded)
           {
         _manager = _module.getProviderManager(_logicalName);         _manager = _module.getProviderManager(_logicalName);
         PEGASUS_ASSERT(_manager != 0);          }
           else
           {
               PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
                   "ProviderManagerModule load failed.");
           }
   
           if (_manager == 0)
           {
               PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
                   "Failed to load ProviderManager \"" + _physicalName + "\".");
   
               Logger::put_l(
                   Logger::ERROR_LOG, System::CIMSERVER, Logger::SEVERE,
                   "ProviderManager.BasicProviderManagerRouter."
                       "PROVIDERMANAGER_LOAD_FAILED",
                   "Failed to load the Provider Manager for interface type \"$0\""
                       " from library \"$1\".",
                   _interfaceName, _physicalName);
   
               throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms(
                   "ProviderManager.BasicProviderManagerRouter."
                       "PROVIDERMANAGER_LOAD_FAILED",
                   "Failed to load the Provider Manager for interface type \"$0\""
                       " from library \"$1\".",
                   _interfaceName, _physicalName));
           }
  
         _manager->setIndicationCallback(indicationCallback);         _manager->setIndicationCallback(indicationCallback);
           _manager->setResponseChunkCallback(responseChunkCallback);
   
           _manager->setSubscriptionInitComplete (subscriptionInitComplete);
     }     }
  
     ~ProviderManagerContainer()     ~ProviderManagerContainer()
     {     {
           delete _manager;
         _module.unload();         _module.unload();
     }     }
  
Line 142 
Line 199 
 // END TEMP SECTION // END TEMP SECTION
  
  
 PEGASUS_INDICATION_CALLBACK BasicProviderManagerRouter::_indicationCallback = 0;  PEGASUS_INDICATION_CALLBACK_T
       BasicProviderManagerRouter::_indicationCallback = 0;
  
 // Private, unimplemented constructor  PEGASUS_RESPONSE_CHUNK_CALLBACK_T
 BasicProviderManagerRouter::BasicProviderManagerRouter()      BasicProviderManagerRouter::_responseChunkCallback = 0;
 {  
 }  
  
 BasicProviderManagerRouter::BasicProviderManagerRouter( BasicProviderManagerRouter::BasicProviderManagerRouter(
     PEGASUS_INDICATION_CALLBACK indicationCallback)      PEGASUS_INDICATION_CALLBACK_T indicationCallback,
       PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback)
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         "BasicProviderManagerRouter::BasicProviderManagerRouter");         "BasicProviderManagerRouter::BasicProviderManagerRouter");
  
     _indicationCallback = indicationCallback;     _indicationCallback = indicationCallback;
       _responseChunkCallback = responseChunkCallback;
       _subscriptionInitComplete = false;
  
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
Line 164 
Line 223 
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         "BasicProviderManagerRouter::~BasicProviderManagerRouter");         "BasicProviderManagerRouter::~BasicProviderManagerRouter");
       /* Clean up the provider managers */
       for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++)
       {
            ProviderManagerContainer* pmc=_providerManagerTable[i];
            delete pmc;
       }
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
  
Line 176 
Line 241 
     PEGASUS_ASSERT(request != 0);     PEGASUS_ASSERT(request != 0);
  
     Message* response = 0;     Message* response = 0;
       Boolean remoteNameSpaceRequest=false;
  
     //     //
     // Retrieve the ProviderManager routing information     // Retrieve the ProviderManager routing information
Line 191 
Line 257 
         ProviderIdContainer pidc = (ProviderIdContainer)         ProviderIdContainer pidc = (ProviderIdContainer)
             request->operationContext.get(ProviderIdContainer::NAME);             request->operationContext.get(ProviderIdContainer::NAME);
         providerModule = pidc.getModule();         providerModule = pidc.getModule();
           remoteNameSpaceRequest=pidc.isRemoteNameSpace();
     }     }
     else if (dynamic_cast<CIMIndicationRequestMessage*>(request) != 0)     else if (dynamic_cast<CIMIndicationRequestMessage*>(request) != 0)
     {     {
         // Provider information is in CIMIndicationRequestMessage         // Provider information is in CIMIndicationRequestMessage
         CIMIndicationRequestMessage* indReq =         CIMIndicationRequestMessage* indReq =
             dynamic_cast<CIMIndicationRequestMessage*>(request);             dynamic_cast<CIMIndicationRequestMessage*>(request);
         providerModule = indReq->providerModule;          ProviderIdContainer pidc = indReq->operationContext.get(ProviderIdContainer::NAME);
           providerModule = pidc.getModule();
     }     }
     else if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)     else if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)
     {     {
Line 213 
Line 281 
             dynamic_cast<CIMDisableModuleRequestMessage*>(request);             dynamic_cast<CIMDisableModuleRequestMessage*>(request);
         providerModule = dmReq->providerModule;         providerModule = dmReq->providerModule;
     }     }
     else if (request->getType() == CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE)      else 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))
     {     {
         // This operation is not provider-specific         // This operation is not provider-specific
     }     }
Line 221 
Line 292 
     {     {
         // Error: Unrecognized message type.         // Error: Unrecognized message type.
         PEGASUS_ASSERT(0);         PEGASUS_ASSERT(0);
         CIMResponseMessage* resp = new CIMResponseMessage(          CIMResponseMessage* resp = request->buildResponse();
             0, request->messageId, CIMException(),          resp->cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
             request->queueIds.copyAndPop());              "Unknown message type.");
         resp->synch_response(request);  
         OperationResponseHandler handler(request, resp);  
         handler.setStatus(CIM_ERR_FAILED, "Unknown message type.");  
         response = resp;         response = resp;
     }     }
  
Line 234 
Line 302 
     // Forward the request to the appropriate ProviderManager(s)     // Forward the request to the appropriate ProviderManager(s)
     //     //
  
     if (request->getType() == CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE)      if ((request->getType() == CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE) ||
           (request->getType() ==
            CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE))
     {     {
         // Send CIMStopAllProvidersRequestMessage to all ProviderManagers          _subscriptionInitComplete = true;
   
           // Send CIMStopAllProvidersRequestMessage or
           // CIMSubscriptionInitCompleteRequestMessage to all ProviderManagers
         ReadLock tableLock(_providerManagerTableLock);         ReadLock tableLock(_providerManagerTableLock);
         for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++)         for (Uint32 i = 0, n = _providerManagerTable.size(); i < n; i++)
         {         {
Line 248 
Line 321 
             }             }
         }         }
  
         response = new CIMStopAllProvidersResponseMessage(          response = request->buildResponse();
             request->messageId,      }
             CIMException(),      else if(request->getType() == CIM_NOTIFY_CONFIG_CHANGE_REQUEST_MESSAGE)
             request->queueIds.copyAndPop());      {
           // Do not need to forward this request to in-process provider
           // managers
           response = request->buildResponse();
     }     }
     else     else
     {     {
Line 261 
Line 337 
             providerModule.findProperty("InterfaceType")).getValue();             providerModule.findProperty("InterfaceType")).getValue();
         itValue.get(interfaceType);         itValue.get(interfaceType);
  
           ProviderManager* pm = 0;
           Boolean gotError = false;
           try
           {
         // Look up the appropriate ProviderManager by InterfaceType         // Look up the appropriate ProviderManager by InterfaceType
         ProviderManager* pm = _lookupProviderManager(interfaceType);              pm = _lookupProviderManager(interfaceType);
           }
           catch (const CIMException& e)
           {
               CIMResponseMessage* cimResponse = request->buildResponse();
               cimResponse->cimException = e;
               response = cimResponse;
               gotError = true;
           }
   
           if (remoteNameSpaceRequest && !pm->supportsRemoteNameSpaces())
           {
               CIMResponseMessage* resp = request->buildResponse();
               resp->cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
                   "Remote Namespace operations not supported for interface type "
                       + interfaceType);
               response = resp;
               gotError = true;
           }
   
           if (!gotError)
           {
         response = pm->processMessage(request);         response = pm->processMessage(request);
     }     }
       }
  
     // preserve message key     // preserve message key
     response->setKey(request->getKey());  
   
     // set HTTP method in response from request     // set HTTP method in response from request
     response->setHttpMethod(request->getHttpMethod());      // set closeConnect
      ((CIMResponseMessage *)response)->syncAttributes(request);
  
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
     return response;     return response;
Line 312 
Line 413 
         // another temporary solution for converting a generic file name into         // another temporary solution for converting a generic file name into
         // a file name useable by each platform.         // a file name useable by each platform.
  
 #if defined(ENABLE_DEFAULT_PROVIDER_MANAGER)  #if defined(PEGASUS_ENABLE_DEFAULT_PROVIDER_MANAGER)
         if (interfaceType == "C++Default")         if (interfaceType == "C++Default")
         {         {
             ProviderManagerContainer* pmc = new ProviderManagerContainer(             ProviderManagerContainer* pmc = new ProviderManagerContainer(
                 LIBRARY_NAME_DEFAULTPM, "DEFAULT", "C++Default",                  LIBRARY_NAME_DEFAULTPM,
                 _indicationCallback);                  "DEFAULT",
                   "C++Default",
                   _indicationCallback,
                   _responseChunkCallback,
                   _subscriptionInitComplete);
             _providerManagerTable.append(pmc);             _providerManagerTable.append(pmc);
             return pmc->getProviderManager();             return pmc->getProviderManager();
         }         }
 #endif #endif
  
 #if defined(ENABLE_CMPI_PROVIDER_MANAGER)  #if defined(PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER)
         if (interfaceType == "CMPI")         if (interfaceType == "CMPI")
         {         {
             ProviderManagerContainer* pmc = new ProviderManagerContainer(             ProviderManagerContainer* pmc = new ProviderManagerContainer(
                 LIBRARY_NAME_CMPIPM, "CMPI", "CMPI", _indicationCallback);                  LIBRARY_NAME_CMPIPM,
                   "CMPI",
                   "CMPI",
                   _indicationCallback,
                   _responseChunkCallback,
                   _subscriptionInitComplete);
             _providerManagerTable.append(pmc);             _providerManagerTable.append(pmc);
             return pmc->getProviderManager();             return pmc->getProviderManager();
         }         }
 #endif #endif
  
 #if defined(ENABLE_JMPI_PROVIDER_MANAGER)  #if defined(PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER)
         if (interfaceType == "JMPI")          if (  interfaceType == "JMPI"
              || interfaceType == "JMPIExperimental"
              )
         {         {
             ProviderManagerContainer* pmc = new ProviderManagerContainer(             ProviderManagerContainer* pmc = new ProviderManagerContainer(
                 LIBRARY_NAME_JMPIPM, "JMPI", "JMPI", _indicationCallback);                  LIBRARY_NAME_JMPIPM,
                   interfaceType,
                   interfaceType,
                   _indicationCallback,
                   _responseChunkCallback,
                   _subscriptionInitComplete);
             _providerManagerTable.append(pmc);             _providerManagerTable.append(pmc);
             return pmc->getProviderManager();             return pmc->getProviderManager();
         }         }


Legend:
Removed from v.1.5  
changed lines
  Added in v.1.30

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2