version 1.47, 2005/02/05 23:00:30
|
version 1.55, 2005/11/22 19:33:26
|
|
|
// Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) | // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) |
// Seema Gupta (gseema@in.ibm.com) for PEP135 | // Seema Gupta (gseema@in.ibm.com) for PEP135 |
// Willis White (whiwill@us.ibm.com) | // Willis White (whiwill@us.ibm.com) |
|
// Josephine Eskaline Joyce (jojustin@in.ibm.com) for PEP#101 |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
| |
#include <Pegasus/Common/CIMMessage.h> | #include <Pegasus/Common/CIMMessage.h> |
#include <Pegasus/Common/OperationContext.h> | #include <Pegasus/Common/OperationContext.h> |
#include <Pegasus/Common/Destroyer.h> |
|
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Common/StatisticalData.h> | #include <Pegasus/Common/StatisticalData.h> |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
|
|
// | // |
DefaultProviderManager::DefaultProviderManager(void) | DefaultProviderManager::DefaultProviderManager(void) |
{ | { |
|
_subscriptionInitComplete = false; |
} | } |
| |
DefaultProviderManager::~DefaultProviderManager(void) | DefaultProviderManager::~DefaultProviderManager(void) |
|
|
response = handleDeleteSubscriptionRequest(request); | response = handleDeleteSubscriptionRequest(request); |
| |
break; | break; |
case CIM_ENABLE_INDICATIONS_REQUEST_MESSAGE: |
|
response = handleEnableIndicationsRequest(request); |
|
|
|
break; |
|
case CIM_DISABLE_INDICATIONS_REQUEST_MESSAGE: |
|
response = handleDisableIndicationsRequest(request); |
|
|
|
break; |
|
case CIM_EXPORT_INDICATION_REQUEST_MESSAGE: | case CIM_EXPORT_INDICATION_REQUEST_MESSAGE: |
response = handleExportIndicationRequest(request); | response = handleExportIndicationRequest(request); |
break; | break; |
|
|
response = handleInitializeProviderRequest(request); | response = handleInitializeProviderRequest(request); |
| |
break; | break; |
|
case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE: |
|
response = handleSubscriptionInitCompleteRequest (request); |
|
|
|
break; |
default: | default: |
response = handleUnsupportedRequest(request); | response = handleUnsupportedRequest(request); |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMInitializeProviderResponseMessage * response = | CIMInitializeProviderResponseMessage * response = |
new CIMInitializeProviderResponseMessage( |
dynamic_cast<CIMInitializeProviderResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
PEGASUS_ASSERT(response != 0); |
request->queueIds.copyAndPop()); |
|
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
| |
OperationResponseHandler handler(request, response); | OperationResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), |
name.getPhysicalName(), name.getLogicalName()); |
name.getLogicalName(), String::EMPTY); |
|
|
|
} | } |
catch(CIMException & e) | catch(CIMException & e) |
{ | { |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMGetInstanceResponseMessage * response = | CIMGetInstanceResponseMessage * response = |
new CIMGetInstanceResponseMessage( |
dynamic_cast<CIMGetInstanceResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
CIMInstance()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
|
|
// create a handler for this request | // create a handler for this request |
GetInstanceResponseHandler handler(request, response); | GetInstanceResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMEnumerateInstancesResponseMessage * response = | CIMEnumerateInstancesResponseMessage * response = |
new CIMEnumerateInstancesResponseMessage( |
dynamic_cast<CIMEnumerateInstancesResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
Array<CIMInstance>()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
EnumerateInstancesResponseHandler handler(request, response); | EnumerateInstancesResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(), |
OpProviderHolder ph = providerManager.getProvider( |
name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMEnumerateInstanceNamesResponseMessage * response = | CIMEnumerateInstanceNamesResponseMessage * response = |
new CIMEnumerateInstanceNamesResponseMessage( |
dynamic_cast<CIMEnumerateInstanceNamesResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
Array<CIMObjectPath>()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
//set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod());; |
|
|
|
// create a handler for this request | // create a handler for this request |
EnumerateInstanceNamesResponseHandler handler(request, response); | EnumerateInstanceNamesResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName()); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
| |
// create response message | // create response message |
CIMCreateInstanceResponseMessage * response = | CIMCreateInstanceResponseMessage * response = |
new CIMCreateInstanceResponseMessage( |
dynamic_cast<CIMCreateInstanceResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
CIMObjectPath()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
CreateInstanceResponseHandler handler(request, response); | CreateInstanceResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
| |
// create response message | // create response message |
CIMModifyInstanceResponseMessage * response = | CIMModifyInstanceResponseMessage * response = |
new CIMModifyInstanceResponseMessage( |
dynamic_cast<CIMModifyInstanceResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
ModifyInstanceResponseHandler handler(request, response); | ModifyInstanceResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
| |
// create response message | // create response message |
CIMDeleteInstanceResponseMessage * response = | CIMDeleteInstanceResponseMessage * response = |
new CIMDeleteInstanceResponseMessage( |
dynamic_cast<CIMDeleteInstanceResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
DeleteInstanceResponseHandler handler(request, response); | DeleteInstanceResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMExecQueryResponseMessage * response = | CIMExecQueryResponseMessage * response = |
new CIMExecQueryResponseMessage( |
dynamic_cast<CIMExecQueryResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
Array<CIMObject>()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
ExecQueryResponseHandler handler(request, response); | ExecQueryResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), |
name.getPhysicalName(), name.getLogicalName()); |
name.getLogicalName(), String::EMPTY); |
|
| |
if (dynamic_cast<CIMInstanceQueryProvider*>(ph.GetCIMProvider()) == 0) { | if (dynamic_cast<CIMInstanceQueryProvider*>(ph.GetCIMProvider()) == 0) { |
String errorString = " instance provider is registered supporting execQuery " | String errorString = " instance provider is registered supporting execQuery " |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMAssociatorsResponseMessage * response = | CIMAssociatorsResponseMessage * response = |
new CIMAssociatorsResponseMessage( |
dynamic_cast<CIMAssociatorsResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
Array<CIMObject>()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// create a handler for this request | // create a handler for this request |
AssociatorsResponseHandler handler(request, response); | AssociatorsResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMAssociatorNamesResponseMessage * response = | CIMAssociatorNamesResponseMessage * response = |
new CIMAssociatorNamesResponseMessage( |
dynamic_cast<CIMAssociatorNamesResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
Array<CIMObjectPath>()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
|
|
// create a handler for this request | // create a handler for this request |
AssociatorNamesResponseHandler handler(request, response); | AssociatorNamesResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMReferencesResponseMessage * response = | CIMReferencesResponseMessage * response = |
new CIMReferencesResponseMessage( |
dynamic_cast<CIMReferencesResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
Array<CIMObject>()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
ReferencesResponseHandler handler(request, response); | ReferencesResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMReferenceNamesResponseMessage * response = | CIMReferenceNamesResponseMessage * response = |
new CIMReferenceNamesResponseMessage( |
dynamic_cast<CIMReferenceNamesResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
PEGASUS_ASSERT(response != 0); |
request->queueIds.copyAndPop(), |
|
Array<CIMObjectPath>()); |
|
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
| |
// create a handler for this request | // create a handler for this request |
ReferenceNamesResponseHandler handler(request, response); | ReferenceNamesResponseHandler handler(request, response); |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
| |
// create response message | // create response message |
CIMGetPropertyResponseMessage * response = | CIMGetPropertyResponseMessage * response = |
new CIMGetPropertyResponseMessage( |
dynamic_cast<CIMGetPropertyResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
CIMValue()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
|
|
GetPropertyResponseHandler handler(request, response); | GetPropertyResponseHandler handler(request, response); |
| |
try | try |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
// create response message | // create response message |
//l10n |
|
CIMSetPropertyResponseMessage * response = | CIMSetPropertyResponseMessage * response = |
new CIMSetPropertyResponseMessage( |
dynamic_cast<CIMSetPropertyResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms( |
|
"ProviderManager.DefaultProviderManager.NOT_IMPLEMENTED", |
|
"not implemented")), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
|
|
SetPropertyResponseHandler handler(request, response); | SetPropertyResponseHandler handler(request, response); |
| |
try | try |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
STAT_COPYDISPATCHER |
|
|
return(response); | return(response); |
} | } |
| |
|
|
| |
// create response message | // create response message |
CIMInvokeMethodResponseMessage * response = | CIMInvokeMethodResponseMessage * response = |
new CIMInvokeMethodResponseMessage( |
dynamic_cast<CIMInvokeMethodResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
CIMValue(), |
|
Array<CIMParamValue>(), |
|
request->methodName); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// propagate message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// create a handler for this request | // create a handler for this request |
InvokeMethodResponseHandler handler(request, response); | InvokeMethodResponseHandler handler(request, response); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMCreateSubscriptionResponseMessage * response = | CIMCreateSubscriptionResponseMessage * response = |
new CIMCreateSubscriptionResponseMessage( |
dynamic_cast<CIMCreateSubscriptionResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
OperationResponseHandler handler(request, response); | OperationResponseHandler handler(request, response); |
| |
try | try |
|
|
req_providerModule.getProperty(req_providerModule.findProperty | req_providerModule.getProperty(req_providerModule.findProperty |
("InterfaceType")).getValue().toString(), | ("InterfaceType")).getValue().toString(), |
0); | 0); |
|
|
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
|
|
|
// |
|
// Save the provider instance from the request |
|
// |
|
ph.GetProvider ().setProviderInstance (req_provider); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
classNames, | classNames, |
propertyList, | propertyList, |
repeatNotificationPolicy); | repeatNotificationPolicy); |
|
|
|
// |
|
// Increment count of current subscriptions for this provider |
|
// |
|
if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ()) |
|
{ |
|
// |
|
// If there were no current subscriptions before the increment, |
|
// the first subscription has been created |
|
// Call the provider's enableIndications method |
|
// |
|
if (_subscriptionInitComplete) |
|
{ |
|
_callEnableIndications (req_provider, |
|
_indicationCallback, ph); |
|
} |
|
} |
} | } |
catch(CIMException & e) | catch(CIMException & e) |
{ | { |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMModifySubscriptionResponseMessage * response = | CIMModifySubscriptionResponseMessage * response = |
new CIMModifySubscriptionResponseMessage( |
dynamic_cast<CIMModifySubscriptionResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
OperationResponseHandler handler(request, response); | OperationResponseHandler handler(request, response); |
| |
try | try |
|
|
0); | 0); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMDeleteSubscriptionResponseMessage * response = | CIMDeleteSubscriptionResponseMessage * response = |
new CIMDeleteSubscriptionResponseMessage( |
dynamic_cast<CIMDeleteSubscriptionResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
|
|
OperationResponseHandler handler(request, response); | OperationResponseHandler handler(request, response); |
| |
try | try |
|
|
0); | 0); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
context, | context, |
subscriptionName, | subscriptionName, |
classNames); | classNames); |
} |
|
catch(CIMException & e) |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Exception: " + e.getMessage()); |
|
|
|
handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n |
|
} |
|
catch(Exception & e) |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Exception: " + e.getMessage()); |
|
|
|
handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Exception: Unknown"); |
|
|
|
handler.setStatus(CIM_ERR_FAILED, "Unknown Error"); |
|
} |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * DefaultProviderManager::handleEnableIndicationsRequest(const Message * message) |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager:: handleEnableIndicationsRequest"); |
|
|
|
CIMEnableIndicationsRequestMessage * request = |
|
dynamic_cast<CIMEnableIndicationsRequestMessage *>(const_cast<Message *>(message)); |
|
|
|
PEGASUS_ASSERT(request != 0); |
|
|
|
CIMEnableIndicationsResponseMessage * response = |
|
new CIMEnableIndicationsResponseMessage( |
|
request->messageId, |
|
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); |
|
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod(request->getHttpMethod()); |
|
| |
response->dest = request->queueIds.top(); |
// |
|
// Decrement count of current subscriptions for this provider |
CIMInstance req_provider, req_providerModule; |
// |
ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME); |
if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ()) |
|
|
req_provider = pidc.getProvider(); |
|
req_providerModule = pidc.getModule(); |
|
|
|
EnableIndicationsResponseHandler *handler = |
|
new EnableIndicationsResponseHandler( |
|
request, response, req_provider, _indicationCallback); |
|
|
|
|
|
|
|
try |
|
{ |
|
String physicalName=_resolvePhysicalName( req_providerModule.getProperty( |
|
req_providerModule.findProperty("Location")).getValue().toString()); |
|
|
|
ProviderName name(req_provider.getProperty(req_provider.findProperty("Name")).getValue ().toString (), |
|
physicalName, |
|
req_providerModule.getProperty(req_providerModule.findProperty |
|
("InterfaceType")).getValue().toString(), |
|
0); |
|
|
|
// get cached or load new provider module |
|
OpProviderHolder ph = |
|
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
|
|
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Calling provider.enableIndications: " + |
|
ph.GetProvider().getName()); |
|
|
|
pm_service_op_lock op_lock(&ph.GetProvider()); |
|
ph.GetProvider().protect(); |
|
|
|
ph.GetProvider().enableIndications(*handler); |
|
|
|
|
|
// if no exception, store the handler so it is persistent for as |
|
// long as the provider has indications enabled. |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Storing indication handler for " + ph.GetProvider().getName()); |
|
|
|
_insertEntry(ph.GetProvider(), handler); |
|
} |
|
catch(CIMException & e) |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Exception: " + e.getMessage()); |
|
|
|
response->cimException = CIMException(e); |
|
} |
|
catch(Exception & e) |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Exception: " + e.getMessage()); |
|
response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms( |
|
"ProviderManager.DefaultProviderManager.INTERNAL_ERROR", |
|
"Internal Error")); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Exception: Unknown"); |
|
response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms( |
|
"ProviderManager.DefaultProviderManager.UNKNOWN_ERROR", |
|
"Unknown Error")); |
|
} |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * DefaultProviderManager::handleDisableIndicationsRequest(const Message * message) |
|
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleDisableIndicationsRequest"); |
// |
|
// If there are no current subscriptions after the decrement, |
CIMDisableIndicationsRequestMessage * request = |
// the last subscription has been deleted |
dynamic_cast<CIMDisableIndicationsRequestMessage *>(const_cast<Message *>(message)); |
// Call the provider's disableIndications method |
|
// |
PEGASUS_ASSERT(request != 0); |
if (_subscriptionInitComplete) |
|
|
CIMDisableIndicationsResponseMessage * response = |
|
new CIMDisableIndicationsResponseMessage( |
|
request->messageId, |
|
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
OperationResponseHandler handler(request, response); |
|
|
|
CIMInstance req_provider, req_providerModule; |
|
ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME); |
|
|
|
req_provider = pidc.getProvider(); |
|
req_providerModule = pidc.getModule(); |
|
|
|
try |
|
{ | { |
String physicalName=_resolvePhysicalName( |
|
req_providerModule.getProperty( |
|
req_providerModule.findProperty("Location")).getValue().toString()); |
|
|
|
ProviderName name( |
|
req_provider.getProperty(req_provider.findProperty |
|
("Name")).getValue ().toString (), |
|
physicalName, |
|
req_providerModule.getProperty(req_providerModule.findProperty |
|
("InterfaceType")).getValue().toString(), |
|
0); |
|
// get cached or load new provider module |
|
OpProviderHolder ph = |
|
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
|
|
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Calling provider.disableIndications: " + | "Calling provider.disableIndications: " + |
ph.GetProvider().getName()); | ph.GetProvider().getName()); |
|
|
| |
ph.GetProvider().unprotect(); | ph.GetProvider().unprotect(); |
| |
|
// |
|
// |
|
// |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Removing and Destroying indication handler for " + | "Removing and Destroying indication handler for " + |
ph.GetProvider().getName()); | ph.GetProvider().getName()); |
| |
delete _removeEntry(_generateKey(ph.GetProvider())); | delete _removeEntry(_generateKey(ph.GetProvider())); |
} | } |
|
} |
|
} |
catch(CIMException & e) | catch(CIMException & e) |
{ | { |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Exception: " + e.getMessage()); | "Exception: " + e.getMessage()); |
| |
response->cimException = CIMException(e); |
handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); // l10n |
} | } |
catch(Exception & e) | catch(Exception & e) |
{ | { |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Exception: " + e.getMessage()); | "Exception: " + e.getMessage()); |
response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms( |
|
"ProviderManager.DefaultProviderManager.INTERNAL_ERROR", |
handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); // l10n |
"Internal Error")); |
|
} | } |
catch(...) | catch(...) |
{ | { |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Exception: Unknown"); | "Exception: Unknown"); |
response->cimException = CIMException(CIM_ERR_FAILED, MessageLoaderParms( |
|
"ProviderManager.DefaultProviderManager.UNKNOWN_ERROR", |
handler.setStatus(CIM_ERR_FAILED, "Unknown Error"); |
"Unknown Error")); |
|
} | } |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMExportIndicationResponseMessage * response = | CIMExportIndicationResponseMessage * response = |
new CIMExportIndicationResponseMessage( |
dynamic_cast<CIMExportIndicationResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
OperationResponseHandler handler(request, response); | OperationResponseHandler handler(request, response); |
| |
try | try |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
OpProviderHolder ph = |
OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), name.getLogicalName()); |
| |
STAT_GETSTARTTIME | STAT_GETSTARTTIME |
| |
|
|
| |
OperationContext context; | OperationContext context; |
| |
|
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
|
|
//L10N_TODO | //L10N_TODO |
//l10n | //l10n |
// ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This | // ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent. This |
|
|
String pName(_pInstances[i].getProperty( | String pName(_pInstances[i].getProperty( |
_pInstances[i].findProperty("Name")).getValue().toString()); | _pInstances[i].findProperty("Name")).getValue().toString()); |
| |
Sint16 ret_value = providerManager.disableProvider(physicalName,pName); |
Sint16 ret_value = providerManager.disableProvider(pName); |
| |
if (ret_value == 0) | if (ret_value == 0) |
{ | { |
|
|
} | } |
else if (ret_value == 1) // Success | else if (ret_value == 1) // Success |
{ | { |
// if It is an indication provider |
|
// remove the entry from the table since the |
|
// provider has been disabled |
|
if (_indicationProviders[i]) | if (_indicationProviders[i]) |
{ | { |
|
// |
|
// Reset the indication provider's count of current |
|
// subscriptions since it has been disabled |
|
// |
|
if (physicalName.size () > 0) |
|
{ |
|
OpProviderHolder ph = providerManager.getProvider( |
|
physicalName, pName); |
|
|
|
ph.GetProvider ().resetSubscriptions (); |
|
} |
|
|
|
// |
|
// If it is an indication provider |
|
// remove the entry from the table since the |
|
// provider has been disabled |
|
// |
delete _removeEntry(_generateKey(pName,physicalName)); | delete _removeEntry(_generateKey(pName,physicalName)); |
} | } |
} | } |
|
|
} | } |
| |
CIMDisableModuleResponseMessage * response = | CIMDisableModuleResponseMessage * response = |
new CIMDisableModuleResponseMessage( |
dynamic_cast<CIMDisableModuleResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
PEGASUS_ASSERT(response != 0); |
request->queueIds.copyAndPop(), |
|
operationalStatus); |
|
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
| |
// Set HTTP method in response from request |
response->operationalStatus = operationalStatus; |
response->setHttpMethod (request->getHttpMethod ()); |
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
|
|
operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK); | operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK); |
| |
CIMEnableModuleResponseMessage * response = | CIMEnableModuleResponseMessage * response = |
new CIMEnableModuleResponseMessage( |
dynamic_cast<CIMEnableModuleResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
PEGASUS_ASSERT(response != 0); |
request->queueIds.copyAndPop(), |
|
operationalStatus); |
|
|
|
// preserve message key |
|
response->setKey(request->getKey()); |
|
| |
// Set HTTP method in response from request |
response->operationalStatus = operationalStatus; |
response->setHttpMethod (request->getHttpMethod ()); |
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return(response); | return(response); |
|
|
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMStopAllProvidersResponseMessage * response = | CIMStopAllProvidersResponseMessage * response = |
new CIMStopAllProvidersResponseMessage( |
dynamic_cast<CIMStopAllProvidersResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// tell the provider manager to shutdown all the providers | // tell the provider manager to shutdown all the providers |
providerManager.shutdownAllProviders(); | providerManager.shutdownAllProviders(); |
|
// And remove all of the response handlers that might have not been |
|
// explicitly stopped. |
|
try { |
|
for (IndicationResponseTable::Iterator i = _responseTable.start(); i != 0; i++) |
|
{ |
|
EnableIndicationsResponseHandler *handler = i.value(); |
|
delete handler; |
|
} |
|
} catch (... ) { } |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); | return(response); |
} | } |
| |
|
Message * |
|
DefaultProviderManager::handleSubscriptionInitCompleteRequest |
|
(const Message * message) |
|
{ |
|
PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, |
|
"DefaultProviderManager::handleSubscriptionInitCompleteRequest"); |
|
|
|
CIMSubscriptionInitCompleteRequestMessage * request = |
|
dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *> |
|
(const_cast <Message *> (message)); |
|
|
|
PEGASUS_ASSERT (request != 0); |
|
|
|
CIMSubscriptionInitCompleteResponseMessage * response = |
|
dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *> |
|
(request->buildResponse ()); |
|
|
|
PEGASUS_ASSERT (response != 0); |
|
|
|
// |
|
// Set indicator |
|
// |
|
_subscriptionInitComplete = true; |
|
|
|
// |
|
// For each provider that has at least one subscription, call |
|
// provider's enableIndications method |
|
// |
|
Array <Provider *> enableProviders; |
|
enableProviders = providerManager.getIndicationProvidersToEnable (); |
|
|
|
Uint32 numProviders = enableProviders.size (); |
|
for (Uint32 i = 0; i < numProviders; i++) |
|
{ |
|
try |
|
{ |
|
CIMInstance provider; |
|
provider = enableProviders [i]->getProviderInstance (); |
|
|
|
// |
|
// Get cached or load new provider module |
|
// |
|
OpProviderHolder ph = providerManager.getProvider( |
|
enableProviders[i]->getModule()->getFileName(), |
|
enableProviders[i]->getName()); |
|
|
|
_callEnableIndications (provider, _indicationCallback, ph); |
|
} |
|
catch (CIMException & e) |
|
{ |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"CIMException: " + e.getMessage ()); |
|
} |
|
catch (Exception & e) |
|
{ |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"Exception: " + e.getMessage ()); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"Unknown error in handleSubscriptionInitCompleteRequest"); |
|
} |
|
} |
|
|
|
PEG_METHOD_EXIT (); |
|
return (response); |
|
} |
|
|
void DefaultProviderManager::_insertEntry ( | void DefaultProviderManager::_insertEntry ( |
const Provider & provider, | const Provider & provider, |
const EnableIndicationsResponseHandler *handler) | const EnableIndicationsResponseHandler *handler) |
|
|
providerManager.unloadIdleProviders(); | providerManager.unloadIdleProviders(); |
} | } |
| |
|
void DefaultProviderManager::_callEnableIndications |
|
(CIMInstance & req_provider, |
|
PEGASUS_INDICATION_CALLBACK _indicationCallback, |
|
OpProviderHolder & ph) |
|
{ |
|
PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, |
|
"DefaultProviderManager::_callEnableIndications"); |
|
|
|
try |
|
{ |
|
CIMRequestMessage * request = 0; |
|
CIMResponseMessage * response = 0; |
|
EnableIndicationsResponseHandler * enableHandler = |
|
new EnableIndicationsResponseHandler |
|
(request, response, req_provider, _indicationCallback); |
|
|
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Calling provider.enableIndications: " + |
|
ph.GetProvider ().getName ()); |
|
|
|
pm_service_op_lock op_lock (& ph.GetProvider ()); |
|
ph.GetProvider ().protect (); |
|
ph.GetProvider ().enableIndications (* enableHandler); |
|
|
|
// |
|
// Store the handler so it is persistent for as |
|
// long as the provider has indications enabled |
|
// |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Storing indication handler for " + |
|
ph.GetProvider ().getName ()); |
|
|
|
_insertEntry (ph.GetProvider (), enableHandler); |
|
} |
|
catch (CIMException & e) |
|
{ |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"CIMException: " + e.getMessage ()); |
|
|
|
Logger::put_l (Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING, |
|
"ProviderManager.Default.DefaultProviderManager." |
|
"ENABLE_INDICATIONS_FAILED", |
|
"Failed to enable indications for provider $0: $1.", |
|
ph.GetProvider ().getName (), e.getMessage ()); |
|
} |
|
catch (Exception & e) |
|
{ |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"Exception: " + e.getMessage ()); |
|
|
|
Logger::put_l (Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING, |
|
"ProviderManager.Default.DefaultProviderManager." |
|
"ENABLE_INDICATIONS_FAILED", |
|
"Failed to enable indications for provider $0: $1.", |
|
ph.GetProvider ().getName (), e.getMessage ()); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"Unexpected error in _callEnableIndications"); |
|
|
|
Logger::put_l (Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING, |
|
"ProviderManager.Default.DefaultProviderManager." |
|
"ENABLE_INDICATIONS_FAILED_UNKNOWN", |
|
"Failed to enable indications for provider $0.", |
|
ph.GetProvider ().getName ()); |
|
} |
|
|
|
PEG_METHOD_EXIT (); |
|
} |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |