version 1.24.2.2, 2004/02/19 01:01:54
|
version 1.34, 2004/04/13 17:55:15
|
|
|
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
#include <Pegasus/Common/Destroyer.h> | #include <Pegasus/Common/Destroyer.h> |
#include <Pegasus/ProviderManager/OperationResponseHandler.h> |
#include <Pegasus/ProviderManager2/OperationResponseHandler.h> |
| |
#include <Pegasus/Config/ConfigManager.h> | #include <Pegasus/Config/ConfigManager.h> |
| |
|
|
| |
ProviderManagerContainer(const String & physicalName, const String & logicalName, const String & interfaceName) : _manager(0) | ProviderManagerContainer(const String & physicalName, const String & logicalName, const String & interfaceName) : _manager(0) |
{ | { |
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
_physicalName=ProviderManager::_resolvePhysicalName(physicalName); |
_physicalName = physicalName + String(".dll"); |
|
#elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC) |
|
_physicalName = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir")); |
|
_physicalName.append(String("/lib") + physicalName + String(".sl")); |
|
#elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC) |
|
_physicalName = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir")); |
|
_physicalName.append(String("/lib") + physicalName + String(".so")); |
|
#elif defined(PEGASUS_OS_OS400) |
|
_physicalName = physicalName; |
|
#else |
|
_physicalName = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir")); |
|
_physicalName.append(String("/lib") + physicalName + String(".so")); |
|
#endif |
|
| |
_logicalName = logicalName; | _logicalName = logicalName; |
| |
|
|
} | } |
| |
ProviderManagerService* ProviderManagerService::providerManagerService=NULL; | ProviderManagerService* ProviderManagerService::providerManagerService=NULL; |
|
CIMRepository* ProviderManagerService::_repository=NULL; |
| |
ProviderManagerService::ProviderManagerService(void) | ProviderManagerService::ProviderManagerService(void) |
: MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) | : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) |
|
|
providerManagerService=this; | providerManagerService=this; |
} | } |
| |
ProviderManagerService::ProviderManagerService(ProviderRegistrationManager * providerRegistrationManager) |
ProviderManagerService::ProviderManagerService( |
|
ProviderRegistrationManager * providerRegistrationManager, |
|
CIMRepository * repository) |
: MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) | : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) |
{ | { |
providerManagerService=this; | providerManagerService=this; |
|
_repository=repository; |
|
|
SetProviderRegistrationManager(providerRegistrationManager); | SetProviderRegistrationManager(providerRegistrationManager); |
| |
// ATTN: this section is a temporary solution to populate the list of enabled | // ATTN: this section is a temporary solution to populate the list of enabled |
|
|
| |
_incomingQueue.enqueue(request->op); | _incomingQueue.enqueue(request->op); |
| |
_thread_pool->allocate_and_awaken((void *)this, ProviderManagerService::handleCimOperation); |
while (!_thread_pool->allocate_and_awaken( |
|
(void *)this, ProviderManagerService::handleCimOperation)) |
|
{ |
|
pegasus_yield(); |
|
} |
} | } |
else | else |
{ | { |
|
|
| |
Message * response = 0; | Message * response = 0; |
String ifc; | String ifc; |
|
ProviderName providerName; |
| |
// get the responsible provider Manager | // get the responsible provider Manager |
ProviderManager * pm = locateProviderManager(message,ifc); |
ProviderManager * pm = locateProviderManager(message,ifc, providerName); |
if (pm) { | if (pm) { |
response = pm->processMessage(request); |
response = pm->processMessage(request,providerName); |
} | } |
| |
else for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) { | else for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) { |
|
|
dynamic_cast<CIMEnableModuleRequestMessage*>(const_cast<Message*>(message)); | dynamic_cast<CIMEnableModuleRequestMessage*>(const_cast<Message*>(message)); |
if (request->providerModule.getProperty(request->providerModule.findProperty | if (request->providerModule.getProperty(request->providerModule.findProperty |
("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) | ("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) |
response=pmc->getProviderManager()->processMessage(request); |
response=pmc->getProviderManager()->processMessage(request,providerName); |
} | } |
break; | break; |
case CIM_DISABLE_MODULE_REQUEST_MESSAGE: { | case CIM_DISABLE_MODULE_REQUEST_MESSAGE: { |
|
|
dynamic_cast<CIMDisableModuleRequestMessage*>(const_cast<Message*>(message)); | dynamic_cast<CIMDisableModuleRequestMessage*>(const_cast<Message*>(message)); |
if (request->providerModule.getProperty(request->providerModule.findProperty | if (request->providerModule.getProperty(request->providerModule.findProperty |
("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) | ("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) |
response=pmc->getProviderManager()->processMessage(request); |
response=pmc->getProviderManager()->processMessage(request,providerName); |
} | } |
break; | break; |
case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: { | case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: { |
Message *resp=pmc->getProviderManager()->processMessage(request); |
Message *resp=pmc->getProviderManager()->processMessage(request,providerName); |
if (resp) response=resp; } | if (resp) response=resp; } |
break; | break; |
default: | default: |
|
|
} | } |
| |
ProviderManager* ProviderManagerService::locateProviderManager(const Message *message, | ProviderManager* ProviderManagerService::locateProviderManager(const Message *message, |
String & it) |
String & it, ProviderName& providerName) |
{ | { |
CIMNamespaceName nameSpace; | CIMNamespaceName nameSpace; |
CIMName className; | CIMName className; |
|
CIMName method; |
| |
const CIMOperationRequestMessage * p = | const CIMOperationRequestMessage * p = |
dynamic_cast<const CIMOperationRequestMessage *>(message); | dynamic_cast<const CIMOperationRequestMessage *>(message); |
| |
if (p) { | if (p) { |
nameSpace=p->nameSpace; | nameSpace=p->nameSpace; |
|
|
if (p->providerType==ProviderType::ASSOCIATION) | if (p->providerType==ProviderType::ASSOCIATION) |
className=((CIMAssociatorsRequestMessage*)p)->assocClass; | className=((CIMAssociatorsRequestMessage*)p)->assocClass; |
else className=p->className; | else className=p->className; |
| |
ProviderName name( |
if (p->providerType==ProviderType::METHOD) |
CIMObjectPath(String::EMPTY, nameSpace, className).toString(), |
method=((CIMInvokeMethodRequestMessage*)p)->methodName; |
String::EMPTY, |
|
String::EMPTY, |
ProviderName name(nameSpace, |
String::EMPTY, |
className, |
p->providerType); |
p->providerType, |
|
method); |
|
|
// find provider manager | // find provider manager |
name = ProviderRegistrar().findProvider(name,false); | name = ProviderRegistrar().findProvider(name,false); |
|
providerName = name; |
it=name.getInterfaceName(); | it=name.getInterfaceName(); |
} | } |
| |
|
|
| |
void ProviderManagerService::unload_idle_providers(void) | void ProviderManagerService::unload_idle_providers(void) |
{ | { |
|
for(Uint32 i = 0, n = _providerManagers.size(); i < n; i++) |
|
{ |
|
ProviderManagerContainer *pmc=_providerManagers[i]; |
|
pmc->getProviderManager()->unload_idle_providers(); |
|
} |
} | } |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
|
|