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

📄 providerregistrationmanager.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    PEG_METHOD_EXIT();}Boolean ProviderRegistrationManager::lookupInstanceProvider(    const CIMNamespaceName & nameSpace,    const CIMName & className,    CIMInstance & provider,    CIMInstance & providerModule,    Boolean is_assoc,    Boolean* has_no_query){    String providerName;    String providerModuleName;    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "ProviderRegistrationManager::lookupInstanceProvider");    ReadLock lock(_registrationTableLock);    ProviderRegistrationTable* providerCapability = 0;    ProviderRegistrationTable* _provider= 0;    ProviderRegistrationTable* _providerModule = 0;    //    // create the key by using nameSpace, className, and providerType    //    const CIMNamespaceName & nameSpaceKey=CIMNamespaceName(WildCardNamespaceNames::check(nameSpace));    String capabilityKey;    if (!is_assoc) {       if (has_no_query) {          *has_no_query=true;          capabilityKey = _generateKey(nameSpaceKey, className, INSTANCE_QUERY_PROVIDER);          if (!_registrationTable->table.lookup(                  capabilityKey, providerCapability))             capabilityKey = _generateKey(nameSpaceKey, className, INS_PROVIDER);          else *has_no_query=false;       }    else          capabilityKey = _generateKey(nameSpaceKey, className, INS_PROVIDER);    }    else {        capabilityKey = _generateKey(nameSpaceKey, className, ASSO_PROVIDER);    }    PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                     "\nnameSpace = " + nameSpace.getString() +                     "; className = " + className.getString() +                     "; capabilityKey = " + capabilityKey);    try    {        //        // get provider capability instance from the table        //        if (providerCapability==0 && !_registrationTable->table.lookup(                  capabilityKey, providerCapability))        {            Tracer::trace(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                CAPABILITY_NOT_REGISTERED);            PEG_METHOD_EXIT();            return false;        }        Array<CIMInstance> instances = providerCapability->getInstances();        Uint32 pos = instances[0].findProperty(CIMName(_PROPERTY_PROVIDERNAME));        if (pos == PEG_NOT_FOUND)        {            Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2,                PROVIDER_NAME_NOT_FOUND);            PEG_METHOD_EXIT();            return false;        }        //        // get provider name        //        instances[0].getProperty(pos).getValue().get(providerName);        //        // get provider module name        //        Uint32 pos2 = instances[0].findProperty            (CIMName (_PROPERTY_PROVIDERMODULENAME));        if (pos2 == PEG_NOT_FOUND)        {            Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2,                MODULE_NAME_NOT_FOUND);            PEG_METHOD_EXIT();            return false;        }        instances[0].getProperty(pos2).getValue().get(providerModuleName);        //        // create the key by using providerModuleName and providerName        //        String _providerKey = _generateKey(providerModuleName, providerName);        //        // create the key by using providerModuleName and MODULE_KEY        //        String _moduleKey = _generateKey(providerModuleName, MODULE_KEY);        //        // get provider instance from the table        //        if (!_registrationTable->table.lookup(_providerKey, _provider))        {            Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2,              PROVIDER_NOT_FOUND);            PEG_METHOD_EXIT();            return false;        }        Array<CIMInstance> providerInstances = _provider->getInstances();        provider = providerInstances[0];        //        // get provider module instance from the table        //        if (!_registrationTable->table.lookup(_moduleKey, _providerModule))        {            Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2,                MODULE_NOT_FOUND);            PEG_METHOD_EXIT();            return false;        }        Array<CIMInstance> providerModuleInstances = _providerModule->getInstances();        providerModule = providerModuleInstances[0];    }    catch(CIMException & exception)    {        Tracer::traceCIMException(TRC_PROVIDERMANAGER, Tracer::LEVEL4, exception);        PEG_METHOD_EXIT();        return (false);    }    PEG_METHOD_EXIT();    return (true);}Boolean ProviderRegistrationManager::lookupMethodProvider(    const CIMNamespaceName & nameSpace,    const CIMName & className,    const CIMName & method,    CIMInstance & provider,    CIMInstance & providerModule){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "ProviderRegistrationManager::lookupMethodProvider");    ReadLock lock(_registrationTableLock);    String providerName;    String providerModuleName;    Array<CIMInstance> instances;    ProviderRegistrationTable* providerCapability = 0;    ProviderRegistrationTable* _provider= 0;    ProviderRegistrationTable* _providerModule = 0;  try  {    const CIMNamespaceName & nameSpaceKey=CIMNamespaceName(WildCardNamespaceNames::check(nameSpace));    //    // check if the provider was registered to support all methods    // create the key by using nameSpace, className, allMethods, and providerType    //    String capabilityKey = _generateKey(nameSpaceKey, className, "{}", MET_PROVIDER);    if (_registrationTable->table.lookup(capabilityKey, providerCapability))    {        // provider was registered to support all the methods        instances = providerCapability->getInstances();         //        // get provider name        //        Uint32 pos = instances[0].findProperty(CIMName(_PROPERTY_PROVIDERNAME));            if (pos == PEG_NOT_FOUND)            {            PEG_METHOD_EXIT();            // l10n            // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,            // PROVIDER_NAME_NOT_FOUND);            throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                MessageLoaderParms(PROVIDER_NAME_NOT_FOUND_KEY,                    PROVIDER_NAME_NOT_FOUND));            }        instances[0].getProperty(pos).getValue().get(providerName);        //        // get provider module name        //        Uint32 pos2 = instances[0].findProperty            (CIMName (_PROPERTY_PROVIDERMODULENAME));        if (pos2 == PEG_NOT_FOUND)        {            PEG_METHOD_EXIT();            // l10n                // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,            // MODULE_NAME_NOT_FOUND);                throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                    MessageLoaderParms(MODULE_NAME_NOT_FOUND_KEY,                        MODULE_NAME_NOT_FOUND));        }        instances[0].getProperty(pos2).getValue().get(providerModuleName);    }    else    {        //        // provider was not registered to support all the methods        // create the key by using nameSpace, className, method, and providerType        //        capabilityKey = _generateKey(nameSpaceKey, className, method.getString(),            MET_PROVIDER);        if (_registrationTable->table.lookup(capabilityKey, providerCapability))        {            //            // provider was registerted to support the method            //            instances = providerCapability->getInstances();            //            // get provider name            //            Uint32 pos = instances[0].findProperty                (CIMName (_PROPERTY_PROVIDERNAME));            if (pos == PEG_NOT_FOUND)            {                PEG_METHOD_EXIT();                // l10n                        // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,                // PROVIDER_NAME_NOT_FOUND);                throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                    MessageLoaderParms(PROVIDER_NAME_NOT_FOUND_KEY,                        PROVIDER_NAME_NOT_FOUND));            }            instances[0].getProperty(pos).getValue().get(providerName);            //            // get provider module name            //            Uint32 pos2 = instances[0].findProperty                (CIMName (_PROPERTY_PROVIDERMODULENAME));            if (pos2 == PEG_NOT_FOUND)            {                PEG_METHOD_EXIT();                // l10n                        // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,                // MODULE_NAME_NOT_FOUND);                throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                    MessageLoaderParms(MODULE_NAME_NOT_FOUND_KEY,                        MODULE_NAME_NOT_FOUND));            }            instances[0].getProperty(pos2).getValue().get(providerModuleName);        }        else        {            PEG_METHOD_EXIT();            // l10n            // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, CAPABILITY_NOT_REGISTERED);            throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                                          MessageLoaderParms(CAPABILITY_NOT_REGISTERED_KEY,                                                             CAPABILITY_NOT_REGISTERED));        }    }    //    // create the key by using providerModuleName and providerName    //    String _providerKey = _generateKey(providerModuleName, providerName);    //    // create the key by using providerModuleName and MODULE_KEY    //    String _moduleKey = _generateKey(providerModuleName, MODULE_KEY);    //    // get provider instance from the table    //    if (!_registrationTable->table.lookup(_providerKey, _provider))    {        PEG_METHOD_EXIT();        // l10n        // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, PROVIDER_NOT_FOUND);        throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                                      MessageLoaderParms(PROVIDER_NOT_FOUND_KEY,                                                         PROVIDER_NOT_FOUND));    }    Array<CIMInstance> providerInstances = _provider->getInstances();    provider = providerInstances[0];    //    // get provider module instance from the table    //    if (!_registrationTable->table.lookup(_moduleKey, _providerModule))    {        PEG_METHOD_EXIT();        // l10n        // throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, MODULE_NOT_FOUND);        throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,                                      MessageLoaderParms(MODULE_NOT_FOUND_KEY,                                                         MODULE_NOT_FOUND));    }    Array<CIMInstance> providerModuleInstances = _providerModule->getInstances();    providerModule = providerModuleInstances[0];  }  catch(const CIMException &)  {    PEG_METHOD_EXIT();    return (false);  }    PEG_METHOD_EXIT();    return (true);}// Lookup the association providers associated with a Class. Note that this// function returns an array but that should never happen until we reach// the point where we are registering multiple providers for the same// classBoolean ProviderRegistrationManager::lookupAssociationProvider(    const CIMNamespaceName & nameSpace,    const CIMName & assocClassName,    Array<CIMInstance>& providers,    Array<CIMInstance>& providerModules){    CIMInstance pInstance;    CIMInstance pmInstance;    String providerName;    if (lookupInstanceProvider(        nameSpace, assocClassName, pInstance, pmInstance, true))    {        // get the provider name        Uint32 pos = pInstance.findProperty(CIMName ("Name"));        if ( pos != PEG_NOT_FOUND )        {            pInstance.getProperty(pos).getValue().get(providerName);            PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                         "providerName = " + providerName + " found.");            providers.append(pInstance);            providerModules.append(pmInstance);        }    }    return (providers.size() > 0);}Boolean ProviderRegistrationManager::getIndicationProviders(    const CIMNamespaceName & nameSpace,    const CIMName & className,    const CIMPropertyList & requiredPropertyList,    Array<CIMInstance> & provider,    Array<CIMInstance> & providerModule){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "ProviderRegistrationManager::getIndicationProviders");    ReadLock lock(_registrationTableLock);

⌨️ 快捷键说明

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