version 1.1, 2006/08/29 17:48:56
|
version 1.2, 2006/09/01 17:51:30
|
|
|
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
// auto variable to protect provider during operations |
|
class pm_service_op_lock |
|
{ |
|
public: |
|
pm_service_op_lock(ProviderStatus *providerStatus) |
|
: _providerStatus(providerStatus) |
|
{ |
|
_providerStatus->protect(); |
|
} |
|
|
|
~pm_service_op_lock() |
|
{ |
|
_providerStatus->unprotect(); |
|
} |
|
|
|
private: |
|
pm_service_op_lock(); |
|
pm_service_op_lock(const pm_service_op_lock&); |
|
pm_service_op_lock& operator=(const pm_service_op_lock&); |
|
|
|
ProviderStatus* _providerStatus; |
|
}; |
|
|
|
class op_counter |
|
{ |
|
public: |
|
op_counter(AtomicInt* counter) |
|
: _counter(counter) |
|
{ |
|
(*_counter)++; |
|
} |
|
|
|
~op_counter() |
|
{ |
|
(*_counter)--; |
|
} |
|
|
|
private: |
|
op_counter(); |
|
op_counter(const op_counter&); |
|
op_counter& operator=(const op_counter&); |
|
|
|
AtomicInt* _counter; |
|
}; |
|
|
|
template<class T> | template<class T> |
inline T* getProviderInterface(CIMProvider* provider) | inline T* getProviderInterface(CIMProvider* provider) |
{ | { |
|
|
void ProviderMessageHandler::terminate() | void ProviderMessageHandler::terminate() |
{ | { |
_disableIndications(); | _disableIndications(); |
|
|
|
try |
|
{ |
_provider->terminate(); | _provider->terminate(); |
} | } |
|
catch (...) |
|
{ |
|
PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2, |
|
"Caught exception from provider " + _name + |
|
" terminate() method."); |
|
} |
|
} |
| |
void ProviderMessageHandler::subscriptionInitComplete() | void ProviderMessageHandler::subscriptionInitComplete() |
{ | { |
|
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, | PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
"ProviderMessageHandler::processMessage()"); | "ProviderMessageHandler::processMessage()"); |
| |
op_counter ops(&status._currentOperations); |
|
|
|
CIMResponseMessage* response = 0; | CIMResponseMessage* response = 0; |
| |
// pass the request message to a handler method based on message type | // pass the request message to a handler method based on message type |
|
|
| |
try | try |
{ | { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, |
|
Logger::TRACE, |
"ProviderMessageHandler::_handleGetInstanceRequest - " | "ProviderMessageHandler::_handleGetInstanceRequest - " |
"Host name: $0 Name space: $1 Class name: $2", | "Host name: $0 Name space: $1 Class name: $2", |
System::getHostName(), | System::getHostName(), |
request->nameSpace.getString(), | request->nameSpace.getString(), |
request->instanceName.getClassName().getString()); |
request->instanceName.getClassName().getString())); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( | CIMObjectPath objectPath( |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceQueryProvider* provider = | CIMInstanceQueryProvider* provider = |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMAssociationProvider* provider = | CIMAssociationProvider* provider = |
getProviderInterface<CIMAssociationProvider>(_provider); | getProviderInterface<CIMAssociationProvider>(_provider); |
| |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMAssociationProvider* provider = | CIMAssociationProvider* provider = |
getProviderInterface<CIMAssociationProvider>(_provider); | getProviderInterface<CIMAssociationProvider>(_provider); |
| |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMAssociationProvider* provider = | CIMAssociationProvider* provider = |
getProviderInterface<CIMAssociationProvider>(_provider); | getProviderInterface<CIMAssociationProvider>(_provider); |
| |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMAssociationProvider* provider = | CIMAssociationProvider* provider = |
getProviderInterface<CIMAssociationProvider>(_provider); | getProviderInterface<CIMAssociationProvider>(_provider); |
| |
|
|
| |
try | try |
{ | { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, |
|
Logger::TRACE, |
"ProviderMessageHandler::_handleGetPropertyRequest - " | "ProviderMessageHandler::_handleGetPropertyRequest - " |
"Host name: $0 Name space: $1 Class name: $2 Property: $3", | "Host name: $0 Name space: $1 Class name: $2 Property: $3", |
System::getHostName(), | System::getHostName(), |
request->nameSpace.getString(), | request->nameSpace.getString(), |
request->instanceName.getClassName().getString(), | request->instanceName.getClassName().getString(), |
request->propertyName.getString()); |
request->propertyName.getString())); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( | CIMObjectPath objectPath( |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
try | try |
{ | { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, |
|
Logger::TRACE, |
"ProviderMessageHandler::_handleSetPropertyRequest - " | "ProviderMessageHandler::_handleSetPropertyRequest - " |
"Host name: $0 Name space: $1 Class name: $2 Property: $3", | "Host name: $0 Name space: $1 Class name: $2 Property: $3", |
System::getHostName(), | System::getHostName(), |
request->nameSpace.getString(), | request->nameSpace.getString(), |
request->instanceName.getClassName().getString(), | request->instanceName.getClassName().getString(), |
request->propertyName.getString()); |
request->propertyName.getString())); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( | CIMObjectPath objectPath( |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
CIMInstanceProvider* provider = | CIMInstanceProvider* provider = |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMMethodProvider* provider = | CIMMethodProvider* provider = |
getProviderInterface<CIMMethodProvider>(_provider); | getProviderInterface<CIMMethodProvider>(_provider); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMIndicationProvider* provider = | CIMIndicationProvider* provider = |
getProviderInterface<CIMIndicationProvider>(_provider); | getProviderInterface<CIMIndicationProvider>(_provider); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMIndicationProvider* provider = | CIMIndicationProvider* provider = |
getProviderInterface<CIMIndicationProvider>(_provider); | getProviderInterface<CIMIndicationProvider>(_provider); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMIndicationProvider* provider = | CIMIndicationProvider* provider = |
getProviderInterface<CIMIndicationProvider>(_provider); | getProviderInterface<CIMIndicationProvider>(_provider); |
| |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMIndicationConsumerProvider* provider = | CIMIndicationConsumerProvider* provider = |
getProviderInterface<CIMIndicationConsumerProvider>(_provider); | getProviderInterface<CIMIndicationConsumerProvider>(_provider); |
| |
|
|
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Calling provider.enableIndications: " + _name); | "Calling provider.enableIndications: " + _name); |
| |
pm_service_op_lock op_lock(&status); |
status.setIndicationsEnabled(true); |
|
|
status.protect(); |
|
|
|
status._indicationsEnabled = true; |
|
| |
CIMIndicationProvider* provider = | CIMIndicationProvider* provider = |
getProviderInterface<CIMIndicationProvider>(_provider); | getProviderInterface<CIMIndicationProvider>(_provider); |
|
|
| |
_indicationResponseHandler = indicationResponseHandler; | _indicationResponseHandler = indicationResponseHandler; |
} | } |
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.", |
|
_name, e.getMessage()); |
|
} |
|
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, | PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
|
| |
try | try |
{ | { |
if (status._indicationsEnabled) |
if (status.getIndicationsEnabled()) |
{ | { |
pm_service_op_lock op_lock(&status); |
|
|
|
CIMIndicationProvider* provider = | CIMIndicationProvider* provider = |
getProviderInterface<CIMIndicationProvider>(_provider); | getProviderInterface<CIMIndicationProvider>(_provider); |
| |
|
try |
|
{ |
provider->disableIndications(); | provider->disableIndications(); |
|
} |
|
catch (...) |
|
{ |
|
PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2, |
|
"Caught exception from provider " + _name + |
|
" terminate() method."); |
|
} |
| |
status._indicationsEnabled = false; |
status.setIndicationsEnabled(false); |
|
|
status.unprotect(); |
|
| |
status.resetSubscriptions(); | status.resetSubscriptions(); |
| |