⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basicprovidermanagerrouter.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// 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// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include "BasicProviderManagerRouter.h"#include <Pegasus/Common/Config.h>#include <Pegasus/Common/OperationContextInternal.h>#include <Pegasus/Common/CIMMessage.h>#include <Pegasus/Common/Tracer.h>#include <Pegasus/Common/Logger.h>#include <Pegasus/Common/FileSystem.h>#include <Pegasus/Config/ConfigManager.h>#include <Pegasus/ProviderManagerService/ProviderManagerModule.h>#include <Pegasus/ProviderManager2/ProviderManager.h>// ProviderManager library names.  Should these be defined elsewhere?#if defined(PEGASUS_OS_OS400)# define LIBRARY_NAME_DEFAULTPM "QSYS/QYCMPMDE00"# define LIBRARY_NAME_CMPIPM    "QSYS/QYCMCMPIPM"# define LIBRARY_NAME_JMPIPM    "QSYS/QYCMJMPIPM"#else# define LIBRARY_NAME_CMPIPM    "CMPIProviderManager"# define LIBRARY_NAME_JMPIPM    "JMPIProviderManager"#endifPEGASUS_NAMESPACE_BEGINclass ProviderManagerContainer{public:    ProviderManagerContainer(        const String& physicalName,        const String& logicalName,        const String& interfaceName,        PEGASUS_INDICATION_CALLBACK_T indicationCallback,        PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,        Boolean subscriptionInitComplete)    : _manager(0)    {#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;        _interfaceName = interfaceName;        _module.reset(new ProviderManagerModule(_physicalName));        Boolean moduleLoaded = _module->load();        if (moduleLoaded)        {            _manager = _module->getProviderManager(_logicalName);        }        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->setResponseChunkCallback(responseChunkCallback);        _manager->setSubscriptionInitComplete (subscriptionInitComplete);    }    ProviderManagerContainer(        const String& interfaceName,        PEGASUS_INDICATION_CALLBACK_T indicationCallback,        PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,        Boolean subscriptionInitComplete,        ProviderManager* manager)        :        _interfaceName(interfaceName),        _manager(manager),        _module(0)    {        _manager->setIndicationCallback(indicationCallback);        _manager->setResponseChunkCallback(responseChunkCallback);        _manager->setSubscriptionInitComplete(subscriptionInitComplete);    }    ~ProviderManagerContainer()    {        delete _manager;        if (_module.get())            _module->unload();    }    ProviderManager* getProviderManager()    {        return _manager;    }    const String& getInterfaceName() const    {        return _interfaceName;    }private:    ProviderManagerContainer();    ProviderManagerContainer& operator=(const ProviderManagerContainer&);    ProviderManagerContainer(const ProviderManagerContainer&);    String _physicalName;    String _logicalName;    String _interfaceName;    ProviderManager* _manager;    AutoPtr<ProviderManagerModule> _module;};PEGASUS_INDICATION_CALLBACK_T    BasicProviderManagerRouter::_indicationCallback = 0;PEGASUS_RESPONSE_CHUNK_CALLBACK_T    BasicProviderManagerRouter::_responseChunkCallback = 0;ProviderManager*    (*BasicProviderManagerRouter::_createDefaultProviderManagerCallback)() = 0;BasicProviderManagerRouter::BasicProviderManagerRouter(    PEGASUS_INDICATION_CALLBACK_T indicationCallback,    PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback,    ProviderManager* (*createDefaultProviderManagerCallback)()){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "BasicProviderManagerRouter::BasicProviderManagerRouter");    _indicationCallback = indicationCallback;    _responseChunkCallback = responseChunkCallback;    _subscriptionInitComplete = false;    _createDefaultProviderManagerCallback =        createDefaultProviderManagerCallback;    PEG_METHOD_EXIT();}BasicProviderManagerRouter::~BasicProviderManagerRouter(){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "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();}Message* BasicProviderManagerRouter::processMessage(Message * message){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "BasicProviderManagerRouter::processMessage");    CIMRequestMessage* request = dynamic_cast<CIMRequestMessage *>(message);    PEGASUS_ASSERT(request != 0);    Message* response = 0;    Boolean remoteNameSpaceRequest=false;    //    // Retrieve the ProviderManager routing information    //    CIMInstance providerModule;    if ((dynamic_cast<CIMOperationRequestMessage*>(request) != 0) ||        (request->getType() == CIM_EXPORT_INDICATION_REQUEST_MESSAGE) ||        (request->getType() == CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE))    {        // Provider information is in OperationContext        ProviderIdContainer pidc = (ProviderIdContainer)            request->operationContext.get(ProviderIdContainer::NAME);        providerModule = pidc.getModule();        remoteNameSpaceRequest=pidc.isRemoteNameSpace();    }    else if (dynamic_cast<CIMIndicationRequestMessage*>(request) != 0)    {        // Provider information is in CIMIndicationRequestMessage        CIMIndicationRequestMessage* indReq =            dynamic_cast<CIMIndicationRequestMessage*>(request);        ProviderIdContainer pidc =            indReq->operationContext.get(ProviderIdContainer::NAME);        providerModule = pidc.getModule();    }    else if (request->getType() == CIM_ENABLE_MODULE_REQUEST_MESSAGE)    {        // Provider information is in CIMEnableModuleRequestMessage        CIMEnableModuleRequestMessage* emReq =            dynamic_cast<CIMEnableModuleRequestMessage*>(request);        providerModule = emReq->providerModule;    }    else if (request->getType() == CIM_DISABLE_MODULE_REQUEST_MESSAGE)    {        // Provider information is in CIMDisableModuleRequestMessage        CIMDisableModuleRequestMessage* dmReq =            dynamic_cast<CIMDisableModuleRequestMessage*>(request);        providerModule = dmReq->providerModule;    }    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))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -