version 1.7.2.1, 2004/02/19 01:01:54
|
version 1.9, 2004/02/04 22:58:21
|
|
|
// | // |
// Author: Chip Vincent (cvincent@us.ibm.com) | // Author: Chip Vincent (cvincent@us.ibm.com) |
// | // |
// Modified By: Adrian Schuur (schuur@de-ibm.com) |
// Modified By: |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#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> | #include <Pegasus/ProviderManager2/ProviderType.h> |
|
|
{ | { |
} | } |
| |
static const Uint16 _MODULE_STOPPING = 9; |
ProviderName ProviderRegistrar::findConsumerProvider(const String & destinationPath) |
static const Uint16 _MODULE_STOPPED = 10; |
|
|
|
static void checkBlocked(CIMInstance &pm) |
|
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "checkBlocked"); |
CIMInstance provider; |
|
CIMInstance providerModule; |
|
ProviderName temp; |
| |
Array<Uint16> operationalStatus; |
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); |
| |
Uint32 pos = pm.findProperty(CIMName ("OperationalStatus")); |
return temp; |
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. |
|
|
| |
// 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, Boolean test) |
ProviderName ProviderRegistrar::findProvider(const ProviderName & providerName) |
{ | { |
CIMObjectPath objectName = providerName.getObjectName(); | CIMObjectPath objectName = providerName.getObjectName(); |
Uint32 flags = providerName.getCapabilitiesMask(); | Uint32 flags = providerName.getCapabilitiesMask(); |
|
|
CIMInstance provider; | CIMInstance provider; |
CIMInstance providerModule; | CIMInstance providerModule; |
ProviderName temp; | ProviderName temp; |
|
Boolean hasNoQuery; |
| |
switch (flags) { | switch (flags) { |
case 2: //ProviderType::INSTANCE |
case ProviderType_INSTANCE: |
if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), | if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), |
provider,providerModule,0)) { | provider,providerModule,0)) { |
if (test) checkBlocked(providerModule); |
|
return ProviderName(providerName.getObjectName(), | return ProviderName(providerName.getObjectName(), |
provider.getProperty(provider.findProperty |
provider.getProperty(providerModule.findProperty |
("Name")).getValue ().toString (), | ("Name")).getValue ().toString (), |
providerModule.getProperty(providerModule.findProperty | providerModule.getProperty(providerModule.findProperty |
("Location")).getValue().toString(), | ("Location")).getValue().toString(), |
|
|
ProviderType::INSTANCE); | ProviderType::INSTANCE); |
} | } |
break; | break; |
case 5: //ProviderType::ASSOCIATION |
case ProviderType_ASSOCIATION: |
if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), | if (_prm->lookupInstanceProvider(objectName.getNameSpace(),objectName.getClassName(), |
provider,providerModule,1)) { | provider,providerModule,1)) { |
if (test) checkBlocked(providerModule); |
|
return ProviderName(providerName.getObjectName(), | return ProviderName(providerName.getObjectName(), |
provider.getProperty(provider.findProperty |
provider.getProperty(providerModule.findProperty |
("Name")).getValue ().toString (), | ("Name")).getValue ().toString (), |
providerModule.getProperty(providerModule.findProperty | providerModule.getProperty(providerModule.findProperty |
("Location")).getValue().toString(), | ("Location")).getValue().toString(), |
|
|
ProviderType::ASSOCIATION); | ProviderType::ASSOCIATION); |
} | } |
break; | 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: | default: |
temp = _lookupProvider(objectName); | temp = _lookupProvider(objectName); |
} | } |