version 1.79, 2007/03/16 17:16:56
|
version 1.80, 2007/08/21 20:10:22
|
|
|
case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE: | case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE: |
case CIM_EXPORT_INDICATION_REQUEST_MESSAGE: | case CIM_EXPORT_INDICATION_REQUEST_MESSAGE: |
{ | { |
|
ProviderIdContainer providerId = |
|
request->operationContext.get(ProviderIdContainer::NAME); |
|
|
// resolve provider name | // resolve provider name |
ProviderName name = _resolveProviderName( |
ProviderName name = _resolveProviderName(providerId); |
request->operationContext.get(ProviderIdContainer::NAME)); |
|
| |
// get cached or load new provider module | // get cached or load new provider module |
ProviderOperationCounter poc( | ProviderOperationCounter poc( |
_getProvider(name.getPhysicalName(), name.getLogicalName())); |
_getProvider( |
|
name.getPhysicalName(), |
|
name.getModuleName(), |
|
name.getLogicalName())); |
| |
response = poc.GetProvider().processMessage(request); | response = poc.GetProvider().processMessage(request); |
break; | break; |
|
|
#if 0 | #if 0 |
case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE: | case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE: |
{ | { |
|
ProviderIdContainer providerId = |
|
request->operationContext.get(ProviderIdContainer::NAME); |
|
|
// resolve provider name | // resolve provider name |
ProviderName name = _resolveProviderName( |
ProviderName name = _resolveProviderName(providerId); |
request->operationContext.get(ProviderIdContainer::NAME)); |
|
| |
// get cached or load new provider module | // get cached or load new provider module |
ProviderOperationCounter poc( | ProviderOperationCounter poc( |
_getProvider(name.getPhysicalName(), name.getLogicalName())); |
_getProvider( |
|
name.getPhysicalName(), |
|
name.getModuleName(), |
|
name.getLogicalName())); |
| |
break; | break; |
} | } |
|
|
providerInstances[i].findProperty("Name")). | providerInstances[i].findProperty("Name")). |
getValue().get(pName); | getValue().get(pName); |
| |
Sint16 ret_value = _disableProvider(pName); |
Sint16 ret_value = _disableProvider(moduleName, pName); |
| |
if (ret_value == 0) | if (ret_value == 0) |
{ | { |
|
|
{ | { |
String providerName; | String providerName; |
String fileName; | String fileName; |
String interfaceName; |
String moduleName; |
CIMValue genericValue; | CIMValue genericValue; |
| |
|
genericValue = providerId.getModule().getProperty( |
|
providerId.getModule().findProperty("Name")).getValue(); |
|
genericValue.get(moduleName); |
|
|
genericValue = providerId.getProvider().getProperty( | genericValue = providerId.getProvider().getProperty( |
providerId.getProvider().findProperty("Name")).getValue(); | providerId.getProvider().findProperty("Name")).getValue(); |
genericValue.get(providerName); | genericValue.get(providerName); |
|
|
providerId.getModule().findProperty("Location")).getValue(); | providerId.getModule().findProperty("Location")).getValue(); |
genericValue.get(fileName); | genericValue.get(fileName); |
| |
// ATTN: This attribute is probably not required |
|
genericValue = providerId.getModule().getProperty( |
|
providerId.getModule().findProperty("InterfaceType")).getValue(); |
|
genericValue.get(interfaceName); |
|
|
|
String resolvedFileName = _resolvePhysicalName(fileName); | String resolvedFileName = _resolvePhysicalName(fileName); |
| |
if (resolvedFileName == String::EMPTY) | if (resolvedFileName == String::EMPTY) |
|
|
FileSystem::buildLibraryFileName(fileName), moduleName)); | FileSystem::buildLibraryFileName(fileName), moduleName)); |
} | } |
| |
return ProviderName(providerName, resolvedFileName, interfaceName, 0); |
return ProviderName(moduleName, providerName, resolvedFileName); |
} | } |
| |
ProviderOperationCounter DefaultProviderManager::_getProvider( | ProviderOperationCounter DefaultProviderManager::_getProvider( |
const String& moduleFileName, | const String& moduleFileName, |
|
const String& moduleName, |
const String& providerName) | const String& providerName) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, | PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
"DefaultProviderManager::_getProvider"); | "DefaultProviderManager::_getProvider"); |
| |
ProviderMessageHandler* pr = _lookupProvider(providerName); |
ProviderMessageHandler* pr = _lookupProvider(moduleName, providerName); |
| |
if (!pr->status.isInitialized()) | if (!pr->status.isInitialized()) |
{ | { |
|
|
} | } |
| |
ProviderMessageHandler* DefaultProviderManager::_lookupProvider( | ProviderMessageHandler* DefaultProviderManager::_lookupProvider( |
|
const String& moduleName, |
const String& providerName) | const String& providerName) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, | PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
|
// lock the providerTable mutex | // lock the providerTable mutex |
AutoMutex lock(_providerTableMutex); | AutoMutex lock(_providerTableMutex); |
| |
|
// Construct the lookup key. We need a compound key to differentiate |
|
// providers with the same name from different modules. The size field is |
|
// added to handle the unlikely case when moduleName+providerName |
|
// produce identical strings but define different providers. |
|
char buffer[12]; |
|
sprintf(buffer, "%u:", providerName.size()); |
|
const String key = buffer + moduleName + ":" + providerName; |
|
|
// look up provider in cache | // look up provider in cache |
ProviderMessageHandler* pr = 0; | ProviderMessageHandler* pr = 0; |
if (_providers.lookup(providerName, pr)) |
if (_providers.lookup(key, pr)) |
{ | { |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Found Provider " + providerName + " in Provider Manager Cache"); | "Found Provider " + providerName + " in Provider Manager Cache"); |
|
|
_subscriptionInitComplete); | _subscriptionInitComplete); |
| |
// insert provider in provider table | // insert provider in provider table |
_providers.insert(providerName, pr); |
_providers.insert(key, pr); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Created provider " + pr->getName()); | "Created provider " + pr->getName()); |
|
|
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
} | } |
| |
Sint16 DefaultProviderManager::_disableProvider(const String& providerName) |
Sint16 DefaultProviderManager::_disableProvider( |
|
const String& moduleName, |
|
const String& providerName) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, | PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
"DefaultProviderManager::_disableProvider"); | "DefaultProviderManager::_disableProvider"); |
| |
ProviderMessageHandler* pr = _lookupProvider(providerName); |
ProviderMessageHandler* pr = _lookupProvider(moduleName, providerName); |
if (!pr->status.isInitialized()) | if (!pr->status.isInitialized()) |
{ | { |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, | PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |