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

📄 cimoperationrequestdispatcher.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 5 页
字号:
*/ProviderInfo CIMOperationRequestDispatcher::_lookupInstanceProvider(   const CIMNamespaceName& nameSpace,   const CIMName& className){    PEG_METHOD_ENTER(        TRC_DISPATCHER,        "CIMOperationRequestDispatcher::_lookupInstanceProvider");    ProviderInfo providerInfo(className);    String providerName;    String serviceName;    MessageQueueService* router =       _routing_table.get_routing(           className,           nameSpace,           DynamicRoutingTable::INSTANCE,           0,           providerName,           serviceName);    if (router)    {       PEG_TRACE_STRING(           TRC_DISPATCHER,           Tracer::LEVEL4,           "providerName = " + providerName + " found.");       providerInfo.serviceName = serviceName;       providerInfo.controlProviderName = providerName;       PEG_METHOD_EXIT();       return providerInfo;    }    CIMInstance pInstance;    CIMInstance pmInstance;    Boolean hasNoQuery = true;    Boolean hasProvider =        _providerRegistrationManager->lookupInstanceProvider(            nameSpace,            className,            pInstance,            pmInstance,            false,            &hasNoQuery);    if (hasProvider)    {        providerInfo.serviceName = PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP;        providerInfo.hasProvider = true;        providerInfo.hasNoQuery = hasNoQuery;#ifdef PEGASUS_ENABLE_REMOTE_CMPI        String remoteInformation;        Boolean isRemote =            _repository->isRemoteNameSpace(nameSpace, remoteInformation);        if (isRemote)        {            providerInfo.providerIdContainer.reset(new ProviderIdContainer(                pmInstance, pInstance, isRemote, remoteInformation));        }        else        {            providerInfo.providerIdContainer.reset(                new ProviderIdContainer(pmInstance, pInstance));        }#else        providerInfo.providerIdContainer.reset(            new ProviderIdContainer(pmInstance, pInstance));#endif        Uint32 pos = PEG_NOT_FOUND;#ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION        if (_enableNormalization)        {            // normalization is enabled for all providers unless they            // have an old interface version or are explicity excluded by            // the excludeModulesFromNormalization configuration option.            // check interface type and version            String interfaceType;            String interfaceVersion;            // get the provder interface type            if ((pos = pmInstance.findProperty("InterfaceType")) !=                    PEG_NOT_FOUND)            {                pmInstance.getProperty(pos).getValue().get(interfaceType);            }            // get the provder interface version            if ((pos = pmInstance.findProperty("InterfaceVersion")) !=                    PEG_NOT_FOUND)            {                pmInstance.getProperty(pos).getValue().get(interfaceVersion);            }            // compare the interface type and vesion            if (String::equalNoCase(interfaceType, "C++Default"))            {                // version must be greater than 2.5.0                if (String::compare(interfaceVersion, "2.5.0") >= 0)                {                    providerInfo.hasProviderNormalization = true;                }            }            else if (String::equalNoCase(interfaceType, "CMPI"))            {                // version must be greater than 2.0.0                if (String::compare(interfaceVersion, "2.0.0") >= 0)                {                    providerInfo.hasProviderNormalization = true;                }            }            else if (String::equalNoCase(interfaceType, "JMPI"))            {                // version must be greater than 1.0.0                if (String::compare(interfaceVersion, "1.0.0") >= 0)                {                    providerInfo.hasProviderNormalization = true;                }            }            // check for module exclusion            String moduleName;            // get the provder module name            if ((pos = pmInstance.findProperty("Name")) != PEG_NOT_FOUND)            {                pmInstance.getProperty(pos).getValue().get(moduleName);            }            // check if module name is on the excludeModulesFromNormalization            // list            for (Uint32 i = 0, n = _excludeModulesFromNormalization.size();                 i < n; i++)            {                if (String::equalNoCase(                        moduleName, _excludeModulesFromNormalization[i]))                {                    providerInfo.hasProviderNormalization = false;                    break;                }            }            PEG_TRACE_STRING(                TRC_DISPATCHER,                Tracer::LEVEL4,                "Normalization for provider module " + moduleName + " is " +                    (providerInfo.hasProviderNormalization ?                        "enabled" : "disabled") +                    ".");        }#endif        /*        // get the provder name        if ((pos = pInstance.findProperty("Name")) != PEG_NOT_FOUND)        {            pInstance.getProperty(pos).getValue().get(providerName);            PEG_TRACE_STRING(                TRC_DISPATCHER,                Tracer::LEVEL4,                "Provider for class " + className.getString() + " provider " +                    providerName + " found.");            PEG_METHOD_EXIT();            return providerInfo;        }        */        return providerInfo;    }    PEG_TRACE_STRING(        TRC_DISPATCHER,        Tracer::LEVEL4,        "Provider for " + className.getString() + " not found.");    PEG_METHOD_EXIT();    return providerInfo;}/* _lookupNewInstanceProvider - Looks up the internal and/or instance provider    for the defined namespace and class and returns the serviceName and    control provider name if a provider is found.    @return true if a service, control provider, or instance provider is found    for the defined class and namespace.    This should be combined with the lookupInstanceProvider code eventually but    the goal now was to simplify the handlers.*/ProviderInfo CIMOperationRequestDispatcher::_lookupNewInstanceProvider(    const CIMNamespaceName& nameSpace,    const CIMName& className){    PEG_METHOD_ENTER(        TRC_DISPATCHER,        "CIMOperationRequestDispatcher::_lookupNewInstanceProvider");    ProviderInfo providerInfo(className);    String serviceName;    String controlProviderName;    // Check for class provided by an internal provider    Boolean hasControlProvider =        _lookupInternalProvider(            nameSpace,            className,            serviceName,            controlProviderName);    if (hasControlProvider)    {        providerInfo.serviceName = serviceName;        providerInfo.controlProviderName = controlProviderName;        providerInfo.hasProvider = true;    }    else    {        // get provider for class        providerInfo =            _lookupInstanceProvider(                nameSpace,                className);    }    PEG_TRACE_STRING(        TRC_DISPATCHER,        Tracer::LEVEL4,        "Lookup Provider = " + providerInfo.serviceName +            " provider " + providerInfo.controlProviderName + " found."            + " return = " + (providerInfo.hasProvider ? "true" : "false"));    PEG_LOGGER_TRACE((        Logger::STANDARD_LOG,        System::CIMSERVER,        Logger::TRACE,        "CIMOperationRequestDispatcher::_lookupNewInstanceProvider - "            "Namespace: $0  Class Name: $1  Service Name: $2  "            "Provider Name: $3",        nameSpace.getString(),        className.getString(),        providerInfo.serviceName,        providerInfo.controlProviderName));    PEG_METHOD_EXIT();    return providerInfo;}String CIMOperationRequestDispatcher::_lookupMethodProvider(    const CIMNamespaceName& nameSpace,    const CIMName& className,    const CIMName& methodName,    ProviderIdContainer** providerIdContainer){    PEG_METHOD_ENTER(TRC_DISPATCHER,        "CIMOperationRequestDispatcher::_lookupMethodProvider");    CIMInstance pInstance;    CIMInstance pmInstance;    String providerName;    String serviceName;    MessageQueueService* router =        _routing_table.get_routing(className,            nameSpace,            DynamicRoutingTable::METHOD,            0,            providerName,            serviceName);    if (router)    {        PEG_TRACE_STRING(TRC_DISPATCHER, Tracer::LEVEL4,            "providerName = " + providerName + " found.");        PEG_METHOD_EXIT();        return providerName;    }    if (_providerRegistrationManager->lookupMethodProvider(            nameSpace, className, methodName, pInstance, pmInstance))    {        ProviderIdContainer* providercontainer;#ifdef PEGASUS_ENABLE_REMOTE_CMPI        String remoteInformation;        Boolean isRemote = false;        isRemote = _repository->isRemoteNameSpace(nameSpace, remoteInformation);        if (isRemote)             providercontainer = new ProviderIdContainer(                pmInstance, pInstance, isRemote, remoteInformation);        else            providercontainer = new ProviderIdContainer(pmInstance, pInstance);#else        providercontainer = new ProviderIdContainer(pmInstance, pInstance);#endif        (*providerIdContainer) = providercontainer;        // get the provder name        Uint32 pos = pInstance.findProperty(CIMName ("Name"));        if (pos != PEG_NOT_FOUND)        {            pInstance.getProperty(pos).getValue().get(providerName);            PEG_METHOD_EXIT();            return providerName;        }        else        {            PEG_METHOD_EXIT();            return String::EMPTY;        }    }    else    {        PEG_METHOD_EXIT();        return String::EMPTY;    }}/* _lookupAllAssociation Providers for Class    Returns all of the association providers that exist    for the defined class name.  Used the referencenames    function to get list of classes for which providers    required and then looks up the providers for each    class    @param nameSpace    @param objectName    @param - referenced parameter that is modified in this funciton.  This    is the count of actual providers found, not the count of classes.  This    differs from the count of classes in that the providerInfo list is all    classes including those that would go to the repository.    @returns List of ProviderInfo    @exception - Exceptions From the Repository*/Array<ProviderInfo>    CIMOperationRequestDispatcher::_lookupAllAssociationProviders(        const CIMNamespaceName& nameSpace,        const CIMObjectPath& objectName,        const CIMName& assocClass,        const String& role,        Uint32& providerCount){    PEG_METHOD_ENTER(TRC_DISPATCHER,        "CIMOperationRequestDispatcher::_lookupAllAssociationProviders");  

⌨️ 快捷键说明

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