version 1.6, 2003/10/30 23:14:15
|
version 1.10, 2004/02/20 00:56:00
|
|
|
// | // |
// Author: Chip Vincent (cvincent@us.ibm.com) | // Author: Chip Vincent (cvincent@us.ibm.com) |
// | // |
// Modified By: |
// Modified By: Adrian Schuur (schuur@de-ibm.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Common/Pair.h> | #include <Pegasus/Common/Pair.h> |
|
#include <Pegasus/Common/Tracer.h> |
|
#include <Pegasus/Common/Logger.h> |
|
#include <Pegasus/Common/MessageLoader.h> //l10n |
| |
#include <Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h> | #include <Pegasus/Server/ProviderRegistrationManager/ProviderRegistrationManager.h> |
|
#include <Pegasus/ProviderManager2/ProviderType.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
{ | { |
} | } |
| |
|
ProviderName ProviderRegistrar::findConsumerProvider(const String & destinationPath) |
|
{ |
|
CIMInstance provider; |
|
CIMInstance providerModule; |
|
ProviderName temp; |
|
|
|
if (_prm->lookupIndicationConsumer(destinationPath,provider,providerModule)) |
|
return ProviderName(temp.getObjectName(), |
|
provider.getProperty(providerModule.findProperty |
|
("Name")).getValue ().toString (), |
|
providerModule.getProperty(providerModule.findProperty |
|
("Location")).getValue().toString(), |
|
providerModule.getProperty(providerModule.findProperty |
|
("InterfaceType")).getValue().toString(), |
|
0); |
|
|
|
return temp; |
|
} |
|
|
|
static const Uint16 _MODULE_STOPPING = 9; |
|
static const Uint16 _MODULE_STOPPED = 10; |
|
|
|
static void checkBlocked(CIMInstance &pm) |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "checkBlocked"); |
|
|
|
Array<Uint16> operationalStatus; |
|
|
|
Uint32 pos = pm.findProperty(CIMName ("OperationalStatus")); |
|
if(pos == PEG_NOT_FOUND) { |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"OperationalStatus not found."); |
|
PEG_METHOD_EXIT(); |
|
//l10n |
|
//throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, "provider lookup failed."); |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms( |
|
"ProviderManager.ProviderManagerService.PROVIDER_LOOKUP_FAILED", |
|
"provider lookup failed.")); |
|
} |
|
|
|
pm.getProperty(pos).getValue().get(operationalStatus); |
|
for(Uint32 i = 0; i < operationalStatus.size(); i++) { |
|
if(operationalStatus[i] == _MODULE_STOPPED || |
|
operationalStatus[i] == _MODULE_STOPPING) { |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Provider blocked."); |
|
PEG_METHOD_EXIT(); |
|
//l10n |
|
//throw PEGASUS_CIM_EXCEPTION(CIM_ERR_ACCESS_DENIED, "provider blocked."); |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED, MessageLoaderParms( |
|
"ProviderManager.ProviderManagerService.PROVIDER_BLOCKED", |
|
"provider blocked.")); |
|
} |
|
} |
|
} |
|
|
// need at least the object and the one capability. | // need at least the object and the one capability. |
// for example, | // for example, |
// "//localhost/root/cimv2:CIM_ComputerSystem", INSTANCE | // "//localhost/root/cimv2:CIM_ComputerSystem", INSTANCE |
|
|
| |
// the method will return the logical and physical provider names associated with the object and capability. | // the method will return the logical and physical provider names associated with the object and capability. |
| |
ProviderName ProviderRegistrar::findProvider(const ProviderName & providerName) |
ProviderName ProviderRegistrar::findProvider(const ProviderName & providerName, Boolean test) |
{ | { |
CIMObjectPath objectName = providerName.getObjectName(); | CIMObjectPath objectName = providerName.getObjectName(); |
Uint32 flags = providerName.getCapabilitiesMask(); | Uint32 flags = providerName.getCapabilitiesMask(); |
|
|
throw Exception("Invalid argument."); | throw Exception("Invalid argument."); |
} | } |
| |
ProviderName temp = _lookupProvider(objectName); |
CIMInstance provider; |
|
CIMInstance providerModule; |
|
ProviderName temp; |
|
Boolean hasNoQuery; |
|
|
|
switch (flags) { |
|
case ProviderType_INSTANCE: |
|
if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), |
|
provider,providerModule,0)) { |
|
if (test) checkBlocked(providerModule); |
|
return ProviderName(providerName.getObjectName(), |
|
provider.getProperty(provider.findProperty |
|
("Name")).getValue ().toString (), |
|
providerModule.getProperty(providerModule.findProperty |
|
("Location")).getValue().toString(), |
|
providerModule.getProperty(providerModule.findProperty |
|
("InterfaceType")).getValue().toString(), |
|
ProviderType::INSTANCE); |
|
} |
|
break; |
|
case ProviderType_ASSOCIATION: |
|
if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), |
|
provider,providerModule,1)) { |
|
if (test) checkBlocked(providerModule); |
|
return ProviderName(providerName.getObjectName(), |
|
provider.getProperty(provider.findProperty |
|
("Name")).getValue ().toString (), |
|
providerModule.getProperty(providerModule.findProperty |
|
("Location")).getValue().toString(), |
|
providerModule.getProperty(providerModule.findProperty |
|
("InterfaceType")).getValue().toString(), |
|
ProviderType::ASSOCIATION); |
|
} |
|
break; |
|
case ProviderType_QUERY: |
|
if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), |
|
provider,providerModule,0,&hasNoQuery)) { |
|
return ProviderName(providerName.getObjectName(), |
|
provider.getProperty(providerModule.findProperty |
|
("Name")).getValue ().toString (), |
|
providerModule.getProperty(providerModule.findProperty |
|
("Location")).getValue().toString(), |
|
providerModule.getProperty(providerModule.findProperty |
|
("InterfaceType")).getValue().toString(), |
|
ProviderType::INSTANCE); |
|
} |
|
break; |
|
default: |
|
temp = _lookupProvider(objectName); |
|
} |
| |
return(temp); | return(temp); |
} | } |