version 1.18, 2003/10/30 23:31:27
|
version 1.19, 2003/10/31 14:43:40
|
|
|
// Mike Day, IBM (mdday@us.ibm.com) | // Mike Day, IBM (mdday@us.ibm.com) |
// Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators. | // Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators. |
// Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) | // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) |
|
// Adrian Schuur, IBM (schuur@de.ibm.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
return(*this); | return(*this); |
} | } |
| |
ProviderManager & getProviderManager(void) |
ProviderManager *getProviderManager(void) |
{ | { |
return(*_manager); |
return _manager; |
} | } |
| |
const String & getPhysicalName(void) const | const String & getPhysicalName(void) const |
|
|
| |
}; | }; |
| |
static Array<ProviderManagerContainer> _providerManagers; |
static Array<ProviderManagerContainer*> _providerManagers; |
// END TEMP SECTION | // END TEMP SECTION |
| |
inline Boolean _isSupportedRequestType(const Message * message) | inline Boolean _isSupportedRequestType(const Message * message) |
|
|
return(false); | return(false); |
} | } |
| |
|
ProviderManagerService* ProviderManagerService::providerManagerService=NULL; |
|
|
ProviderManagerService::ProviderManagerService(void) | ProviderManagerService::ProviderManagerService(void) |
: MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) | : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) |
{ | { |
|
providerManagerService=this; |
} | } |
| |
ProviderManagerService::ProviderManagerService(ProviderRegistrationManager * providerRegistrationManager) | ProviderManagerService::ProviderManagerService(ProviderRegistrationManager * providerRegistrationManager) |
: MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) | : MessageQueueService(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP) |
{ | { |
|
providerManagerService=this; |
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 |
|
|
| |
#if defined(ENABLE_DEFAULT_PROVIDER_MANAGER) | #if defined(ENABLE_DEFAULT_PROVIDER_MANAGER) |
#if defined(PEGASUS_OS_OS400) | #if defined(PEGASUS_OS_OS400) |
_providerManagers.append(ProviderManagerContainer("QSYS/QYCMDFTPVM", "DEFAULT", "C++Default")); |
_providerManagers.append( |
|
new ProviderManagerContainer("QSYS/QYCMDFTPVM", "DEFAULT", "C++Default")); |
#else | #else |
_providerManagers.append(ProviderManagerContainer("DefaultProviderManager", "DEFAULT", "C++Default")); |
_providerManagers.append( |
|
new ProviderManagerContainer("DefaultProviderManager", "DEFAULT", "C++Default")); |
#endif | #endif |
#endif | #endif |
| |
#if defined(ENABLE_CMPI_PROVIDER_MANAGER) | #if defined(ENABLE_CMPI_PROVIDER_MANAGER) |
#if defined(PEGASUS_OS_OS400) | #if defined(PEGASUS_OS_OS400) |
_providerManagers.append(ProviderManagerContainer("QSYS/QYCMCMPIPM", "CMPI", "CMPI")); |
_providerManagers.append( |
|
new ProviderManagerContainer("QSYS/QYCMCMPIPM", "CMPI", "CMPI")); |
#else | #else |
_providerManagers.append(ProviderManagerContainer("CMPIProviderManager", "CMPI", "CMPI")); |
_providerManagers.append( |
|
new ProviderManagerContainer("CMPIProviderManager", "CMPI", "CMPI")); |
#endif | #endif |
#endif | #endif |
// END TEMP SECTION | // END TEMP SECTION |
|
|
| |
ProviderManagerService::~ProviderManagerService(void) | ProviderManagerService::~ProviderManagerService(void) |
{ | { |
|
providerManagerService=NULL; |
} | } |
| |
Boolean ProviderManagerService::messageOK(const Message * message) | Boolean ProviderManagerService::messageOK(const Message * message) |
|
|
| |
Message * response = 0; | Message * response = 0; |
| |
// get namespace and class name from message |
// get the responsible provider Manager |
String nameSpace; |
ProviderManager *pm=locateProviderManager(message); |
String className; |
if (pm) { |
|
response = pm->processMessage(request); |
switch(message->getType()) |
|
{ |
|
case CIM_GET_CLASS_REQUEST_MESSAGE: |
|
{ |
|
const CIMGetClassRequestMessage * p = dynamic_cast<const CIMGetClassRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
|
|
nameSpace = p->nameSpace.getString(); |
|
className = p->className.getString(); |
|
} | } |
|
else { |
break; |
// no provider manager found ... |
case CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE: |
|
{ |
|
const CIMEnumerateClassesRequestMessage * p = dynamic_cast<const CIMEnumerateClassesRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
|
|
nameSpace = p->nameSpace.getString(); |
|
className = p->className.getString(); |
|
} | } |
| |
break; |
// preserve message key |
case CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE: |
response->setKey(request->getKey()); |
{ |
|
const CIMEnumerateClassNamesRequestMessage * p = dynamic_cast<const CIMEnumerateClassNamesRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
| |
nameSpace = p->nameSpace.getString(); |
// set HTTP method in response from request |
className = p->className.getString(); |
response->setHttpMethod(request->getHttpMethod()); |
} |
|
| |
break; |
AsyncLegacyOperationResult * async_result = |
case CIM_CREATE_CLASS_REQUEST_MESSAGE: |
new AsyncLegacyOperationResult( |
{ |
async->getKey(), |
const CIMCreateClassRequestMessage * p = dynamic_cast<const CIMCreateClassRequestMessage *>(message); |
async->getRouting(), |
|
op, |
|
response); |
| |
PEGASUS_ASSERT(p != 0); |
_complete_op_node(op, ASYNC_OPSTATE_COMPLETE, 0, 0); |
| |
nameSpace = p->nameSpace.getString(); |
PEG_METHOD_EXIT(); |
//className = p->className.getString(); |
|
} | } |
| |
break; |
ProviderManager* ProviderManagerService::locateProviderManager(const Message *message) |
case CIM_MODIFY_CLASS_REQUEST_MESSAGE: |
|
{ | { |
const CIMModifyClassRequestMessage * p = dynamic_cast<const CIMModifyClassRequestMessage *>(message); |
String nameSpace; |
|
String className; |
PEGASUS_ASSERT(p != 0); |
Uint32 type=ProviderType::INSTANCE; |
|
|
nameSpace = p->nameSpace.getString(); |
|
//className = p->className.getString(); |
|
} |
|
| |
break; |
switch(message->getType()) |
case CIM_DELETE_CLASS_REQUEST_MESSAGE: |
|
{ | { |
const CIMDeleteClassRequestMessage * p = dynamic_cast<const CIMDeleteClassRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
|
|
nameSpace = p->nameSpace.getString(); |
|
className = p->className.getString(); |
|
} |
|
|
|
break; |
|
case CIM_GET_INSTANCE_REQUEST_MESSAGE: | case CIM_GET_INSTANCE_REQUEST_MESSAGE: |
{ | { |
const CIMGetInstanceRequestMessage * p = dynamic_cast<const CIMGetInstanceRequestMessage *>(message); | const CIMGetInstanceRequestMessage * p = dynamic_cast<const CIMGetInstanceRequestMessage *>(message); |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->instanceName.getClassName(); |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->newInstance.getClassName(); |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->modifiedInstance.getClassName(); |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->instanceName.getClassName(); |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->assocClass.getString(); |
|
type=ProviderType::ASSOCIATION; |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->assocClass.getString(); |
|
std::cout<<"--- className: "<<className<<std::endl; |
|
type=ProviderType::ASSOCIATION; |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->resultClass.getString(); |
|
type=ProviderType::ASSOCIATION; |
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
className = p->resultClass.getString(); |
} |
type=ProviderType::ASSOCIATION; |
|
|
break; |
|
case CIM_GET_PROPERTY_REQUEST_MESSAGE: |
|
{ |
|
const CIMGetPropertyRequestMessage * p = dynamic_cast<const CIMGetPropertyRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
|
|
nameSpace = p->nameSpace.getString(); |
|
//className = p->className.getString(); |
|
} |
|
|
|
break; |
|
case CIM_SET_PROPERTY_REQUEST_MESSAGE: |
|
{ |
|
const CIMSetPropertyRequestMessage * p = dynamic_cast<const CIMSetPropertyRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
|
|
nameSpace = p->nameSpace.getString(); |
|
//className = p->className.getString(); |
|
} | } |
| |
break; | break; |
|
|
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
| |
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
//className = p->className.getString(); |
type=ProviderType::METHOD; |
} | } |
| |
break; | break; |
/* |
|
case CIM_ENABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE: |
|
{ |
|
const CIMEnableIndicationsSubscriptionRequestMessage * p = dynamic_cast<const CIMEnableIndicationsRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
| |
nameSpace = p->nameSpace.getString(); |
case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE: |
className = p->className.getString(); |
|
} |
|
|
|
break; |
|
case CIM_MODIFY_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE: |
|
{ |
|
const CIMModifyIndicationsRequestMessage * p = dynamic_cast<const CIMModifyIndicationsRequestMessage *>(message); |
|
|
|
PEGASUS_ASSERT(p != 0); |
|
|
|
nameSpace = p->nameSpace.getString(); |
|
className = p->className.getString(); |
|
} |
|
|
|
break; |
|
case CIM_DISABLE_INDICATION_SUBSCRIPTION_REQUEST_MESSAGE: |
|
{ | { |
const CIMGetClassRequestMessage * p = dynamic_cast<const CIMGetClassRequestMessage *>(message); |
const CIMCreateSubscriptionRequestMessage * p = dynamic_cast<const CIMCreateSubscriptionRequestMessage *>(message); |
| |
PEGASUS_ASSERT(p != 0); | PEGASUS_ASSERT(p != 0); |
|
|
nameSpace = p->nameSpace.getString(); | nameSpace = p->nameSpace.getString(); |
className = p->className.getString(); |
std::cout<<"--- nameSpace: "<<nameSpace<<std::endl; |
|
className = p->classNames[0].getString(); |
|
std::cout<<"--- className: "<<className<<std::endl; |
|
type=ProviderType::INDICATION; |
} | } |
| |
break; | break; |
*/ |
|
default: | default: |
|
asm("int $3"); |
break; | break; |
} | } |
| |
|
|
String::EMPTY, | String::EMPTY, |
String::EMPTY, | String::EMPTY, |
String::EMPTY, | String::EMPTY, |
0); |
type); |
|
|
|
std::cout<<"--- name: "<<name.toString()<<std::endl; |
| |
// find provider manager | // find provider manager |
name = ProviderRegistrar().findProvider(name); | name = ProviderRegistrar().findProvider(name); |
| |
|
std::cout<<"--- name.getInterfaceName(): "<<name.getInterfaceName()<<std::endl; |
|
|
// find provider manager for provider interface | // find provider manager for provider interface |
for(Uint32 i = 0, n = _providerManagers.size(); i < n; i++) | for(Uint32 i = 0, n = _providerManagers.size(); i < n; i++) |
{ | { |
// DEBUG |
if (String::equalNoCase(name.getInterfaceName(), _providerManagers[i]->getInterfaceName())) { |
CString s1 = name.getInterfaceName().getCString(); |
ProviderManagerContainer *pmc=_providerManagers[i]; |
const char * p1 = s1; |
return pmc->getProviderManager(); |
|
|
CString s2 = _providerManagers[i].getInterfaceName().getCString(); |
|
const char * p2 = s2; |
|
|
|
if(String::equalNoCase(name.getInterfaceName(), _providerManagers[i].getInterfaceName())) |
|
{ |
|
try |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"ProviderManagerService::handleCimRequest() passing control to provider manager."); |
|
|
|
// forward request |
|
response = _providerManagers[i].getProviderManager().processMessage(request); |
|
} |
|
catch(...) |
|
{ |
|
// ATTN: create response with error message |
|
} | } |
|
|
break; |
|
} | } |
} |
return NULL; |
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
|
|
AsyncLegacyOperationResult * async_result = |
|
new AsyncLegacyOperationResult( |
|
async->getKey(), |
|
async->getRouting(), |
|
op, |
|
response); |
|
|
|
_complete_op_node(op, ASYNC_OPSTATE_COMPLETE, 0, 0); |
|
|
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void ProviderManagerService::unload_idle_providers(void) | void ProviderManagerService::unload_idle_providers(void) |