📄 cimoperationrequestdispatcher.cpp
字号:
*/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 + -