version 1.25, 2004/02/04 22:58:21
|
version 1.30, 2004/03/23 15:51:32
|
|
|
// 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) | // Adrian Schuur, IBM (schuur@de.ibm.com) |
|
// Dan Gorey, djgorey@us.ibm.com |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#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> |
| |
|
|
// get the responsible provider Manager | // get the responsible provider Manager |
ProviderManager * pm = locateProviderManager(message,ifc); | ProviderManager * pm = locateProviderManager(message,ifc); |
if(pm) { | if(pm) { |
response = pm->processMessage(request); |
response = pm->processMessage(request,providerManagerName); |
} | } |
else |
|
{ |
else for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) { |
if (request->getType()==CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE) { |
|
for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) { |
|
ProviderManagerContainer *pmc=_providerManagers[i]; | ProviderManagerContainer *pmc=_providerManagers[i]; |
// ---- next instruction is disabled because of a bug |
switch (message->getType()) { |
// response=pmc->getProviderManager()->processMessage(request); |
case CIM_ENABLE_MODULE_REQUEST_MESSAGE: { |
// ---- this block is an workaround |
CIMEnableModuleRequestMessage * request = |
CIMStopAllProvidersResponseMessage * resp = |
dynamic_cast<CIMEnableModuleRequestMessage*>(const_cast<Message*>(message)); |
new CIMStopAllProvidersResponseMessage( |
if (request->providerModule.getProperty(request->providerModule.findProperty |
request->messageId, |
("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) |
CIMException(), |
response=pmc->getProviderManager()->processMessage(request,providerManagerName); |
((CIMStopAllProvidersRequestMessage*)request)->queueIds.copyAndPop()); |
|
resp->setKey(request->getKey()); |
|
resp->setHttpMethod (request->getHttpMethod ()); |
|
response=resp; |
|
break; |
|
// ---- end of workaround |
|
} | } |
|
break; |
|
case CIM_DISABLE_MODULE_REQUEST_MESSAGE: { |
|
CIMDisableModuleRequestMessage * request = |
|
dynamic_cast<CIMDisableModuleRequestMessage*>(const_cast<Message*>(message)); |
|
if (request->providerModule.getProperty(request->providerModule.findProperty |
|
("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) |
|
response=pmc->getProviderManager()->processMessage(request,providerManagerName); |
} | } |
else { |
break; |
|
case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: { |
|
Message *resp=pmc->getProviderManager()->processMessage(request,providerManagerName); |
|
if (resp) response=resp; } |
|
break; |
|
default: |
CIMRequestMessage * req = | CIMRequestMessage * req = |
dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message)); | dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message)); |
CIMResponseMessage *resp=new CIMResponseMessage(0,req->messageId,CIMException(), | CIMResponseMessage *resp=new CIMResponseMessage(0,req->messageId,CIMException(), |
|
|
response=resp; | response=resp; |
resp->synch_response(req); | resp->synch_response(req); |
OperationResponseHandler handler(req, resp); | OperationResponseHandler handler(req, resp); |
handler.setStatus(CIM_ERR_FAILED, "Unknown error."); |
handler.setStatus(CIM_ERR_FAILED, "Unknown messagetype."); |
} | } |
} | } |
| |
|
|
{ | { |
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); |
name = ProviderRegistrar().findProvider(name,false); |
|
providerManagerName = name; |
it=name.getInterfaceName(); | it=name.getInterfaceName(); |
} | } |
| |
|
|
it=m->providerModule.getProperty (m->providerModule.findProperty | it=m->providerModule.getProperty (m->providerModule.findProperty |
("InterfaceType")).getValue ().toString (); | ("InterfaceType")).getValue ().toString (); |
} | } |
/* else { |
|
const CIMConsumeIndicationRequestMessage * p = |
else switch (message->getType()) { |
dynamic_cast<const CIMConsumeIndicationRequestMessage *>(message); |
case CIM_DISABLE_MODULE_REQUEST_MESSAGE: |
if (p) { |
case CIM_ENABLE_MODULE_REQUEST_MESSAGE: |
CIMConsumeIndicationRequestMessage *m=(CIMConsumeIndicationRequestMessage*)message; |
case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: |
it=m->consumer_module.getProperty (m->consumer_module.findProperty |
return NULL; |
("InterfaceType")).getValue ().toString (); |
default: |
} */ |
|
else { // remaining functions are sent to default provider |
|
// cout<<"--- ProviderManagerService::locateProviderManager(): unknown message type: "<< |
|
// message->getType()<<endl; |
|
it="C++Default"; | it="C++Default"; |
// return NULL; |
|
} | } |
// } |
|
} | } |
| |
// find provider manager for provider interface | // find provider manager for provider interface |