version 1.107, 2008/08/29 09:22:32
|
version 1.117, 2010/10/29 05:29:51
|
|
|
//%2006//////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Licensed to The Open Group (TOG) under one or more contributor license |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
// this work for additional information regarding copyright ownership. |
// IBM Corp.; EMC Corporation, The Open Group. |
// Each contributor licenses this file to you under the OpenPegasus Open |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// Source License; you may not use this file except in compliance with the |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// License. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// |
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
// Permission is hereby granted, free of charge, to any person obtaining a |
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// copy of this software and associated documentation files (the "Software"), |
// EMC Corporation; Symantec Corporation; The Open Group. |
// to deal in the Software without restriction, including without limitation |
// |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// and/or sell copies of the Software, and to permit persons to whom the |
// of this software and associated documentation files (the "Software"), to |
// Software is furnished to do so, subject to the following conditions: |
// deal in the Software without restriction, including without limitation the |
// |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// The above copyright notice and this permission notice shall be included |
// sell copies of the Software, and to permit persons to whom the Software is |
// in all copies or substantial portions of the Software. |
// furnished to do so, subject to the following conditions: |
// |
// |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
// | // |
//============================================================================== |
////////////////////////////////////////////////////////////////////////// |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include "ProviderRegistrationProvider.h" | #include "ProviderRegistrationProvider.h" |
|
|
#include <Pegasus/Common/MessageLoader.h> //l10n | #include <Pegasus/Common/MessageLoader.h> //l10n |
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Common/CIMNameUnchecked.h> |
#include <Pegasus/Common/CIMNameCast.h> |
| |
#include <Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h> | #include <Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h> |
| |
|
|
/** | /** |
The name of the CapabilityID property for provider capabilities class | The name of the CapabilityID property for provider capabilities class |
*/ | */ |
static const CIMName _PROPERTY_CAPABILITYID = CIMName ("CapabilityID"); |
static const CIMName _PROPERTY_CAPABILITYID = CIMNameCast("CapabilityID"); |
| |
/** | /** |
stopping provider method | stopping provider method |
*/ | */ |
static const CIMName _STOP_PROVIDER = CIMName ("Stop"); |
static const CIMName _STOP_PROVIDER = CIMNameCast("Stop"); |
| |
/** | /** |
starting provider method | starting provider method |
*/ | */ |
static const CIMName _START_PROVIDER = CIMName ("Start"); |
static const CIMName _START_PROVIDER = CIMNameCast("Start"); |
|
|
|
/** |
|
setting provider module group method |
|
*/ |
|
static const CIMName _SET_MODULEGROUPNAME = CIMNameCast("SetModuleGroupName"); |
|
|
|
/** |
|
input param for setModuleGroupName name method |
|
*/ |
|
static const CIMName _PARAM_MODULEGROUPNAME = CIMNameCast("ModuleGroupName"); |
|
|
| |
ProviderRegistrationProvider::ProviderRegistrationProvider( | ProviderRegistrationProvider::ProviderRegistrationProvider( |
ProviderRegistrationManager * providerRegistrationManager) | ProviderRegistrationManager * providerRegistrationManager) |
|
|
" PG_ProviderModule class.")); | " PG_ProviderModule class.")); |
} | } |
| |
|
Uint32 bitnessIndx = instanceObject.findProperty( |
|
PEGASUS_PROPERTYNAME_MODULE_BITNESS); |
|
|
|
if (bitnessIndx != PEG_NOT_FOUND) |
|
{ |
|
CIMValue value = instanceObject.getProperty(bitnessIndx).getValue(); |
|
if (!value.isNull()) |
|
{ |
|
if (value.getType() != CIMTYPE_UINT16) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_TYPE_MISMATCH, |
|
PEGASUS_PROPERTYNAME_MODULE_BITNESS.getString()); |
|
} |
|
Uint16 bitness; |
|
value.get(bitness); |
|
if(bitness != PG_PROVMODULE_BITNESS_DEFAULT |
|
#ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT |
|
&& bitness != PG_PROVMODULE_BITNESS_32 |
|
&& bitness != PG_PROVMODULE_BITNESS_64 |
|
#endif |
|
) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, |
|
PEGASUS_PROPERTYNAME_MODULE_BITNESS.getString()); |
|
} |
|
} |
|
} |
|
|
if (instanceObject.findProperty(_PROPERTY_VERSION) == PEG_NOT_FOUND) | if (instanceObject.findProperty(_PROPERTY_VERSION) == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
|
} | } |
} | } |
| |
|
|
// if _PROPERTY_PROVIDERMODULE_NAME key not found | // if _PROPERTY_PROVIDERMODULE_NAME key not found |
if( !moduleFound) | if( !moduleFound) |
{ | { |
|
|
// enable module | // enable module |
ret_value = _enableModule(objectReference, moduleName, al); | ret_value = _enableModule(objectReference, moduleName, al); |
} | } |
|
else if (methodName.equal(_SET_MODULEGROUPNAME)) |
|
{ |
|
String paramName; |
|
if (!inParameters.size() || |
|
((paramName = inParameters[0].getParameterName()) |
|
!= _PARAM_MODULEGROUPNAME)) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_PARAMETER, paramName); |
|
} |
|
// set group |
|
String moduleGroupName; |
|
inParameters[0].getValue().get(moduleGroupName); |
|
ret_value = _setModuleGroupName( |
|
objectReference, moduleName, moduleGroupName, al); |
|
} |
else | else |
{ | { |
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_METHOD_NOT_AVAILABLE, | throw PEGASUS_CIM_EXCEPTION(CIM_ERR_METHOD_NOT_AVAILABLE, |
|
|
handler.complete(); | handler.complete(); |
} | } |
| |
|
Sint16 ProviderRegistrationProvider::_setModuleGroupName( |
|
const CIMObjectPath & moduleRef, |
|
const String & moduleName, |
|
const String & moduleGroupName, |
|
const AcceptLanguageList & al) |
|
{ |
|
Sint32 disableRC = _disableModule (moduleRef, moduleName, false, al); |
|
|
|
if (disableRC == -1) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ControlProviders.ProviderRegistrationProvider." |
|
"ProviderRegistrationProvider." |
|
"DISABLE_PROVIDER_FAILED", |
|
"disable the provider failed.")); |
|
} |
|
|
|
if (disableRC == -2) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ControlProviders.ProviderRegistrationProvider." |
|
"ProviderRegistrationProvider." |
|
"DISABLE_PROVIDER_FAILED_PROVIDER_BUSY", |
|
"disable the provider failed: Provider is busy.")); |
|
} |
|
|
|
String errorMsg; |
|
|
|
if (!_providerRegistrationManager->setProviderModuleGroupName( |
|
moduleName, moduleGroupName, errorMsg)) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ControlProviders.ProviderRegistrationProvider." |
|
"ProviderRegistrationProvider." |
|
"SET_PROVIDERMODULEGROUPNAME_FAILED", |
|
"Failed to set the ModuleGroupName: $0.", |
|
errorMsg)); |
|
} |
|
|
|
// Enable the module only if it was previously enabled. |
|
if (disableRC == 0) |
|
{ |
|
try |
|
{ |
|
_enableModule(moduleRef, moduleName, al); |
|
} |
|
catch(const Exception &e) |
|
{ |
|
PEG_TRACE((TRC_CONTROLPROVIDER,Tracer::LEVEL1, |
|
"Exception caught while enabling the provider module %s : %s", |
|
(const char*)moduleName.getCString(), |
|
(const char*)e.getMessage().getCString())); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE(( |
|
TRC_CONTROLPROVIDER, |
|
Tracer::LEVEL1, |
|
"Unknown error occurred while" |
|
" enabling the provider modules %s.", |
|
(const char*)moduleName.getCString())); |
|
} |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
|
// get provider manager service | // get provider manager service |
MessageQueueService * ProviderRegistrationProvider::_getProviderManagerService() | MessageQueueService * ProviderRegistrationProvider::_getProviderManagerService() |
{ | { |
|
|
new AsyncLegacyOperationStart ( | new AsyncLegacyOperationStart ( |
NULL, | NULL, |
_queueId, | _queueId, |
disable_req, |
disable_req); |
_queueId); |
|
| |
AsyncReply * asyncReply = | AsyncReply * asyncReply = |
_controller->ClientSendWait(_queueId, asyncRequest); | _controller->ClientSendWait(_queueId, asyncRequest); |
|
|
new AsyncLegacyOperationStart ( | new AsyncLegacyOperationStart ( |
NULL, | NULL, |
_queueId, | _queueId, |
enable_req, |
enable_req); |
_queueId); |
|
| |
AsyncReply * asyncReply = | AsyncReply * asyncReply = |
_controller->ClientSendWait(_queueId, asyncRequest); | _controller->ClientSendWait(_queueId, asyncRequest); |
|
|
AsyncLegacyOperationStart asyncRequest( | AsyncLegacyOperationStart asyncRequest( |
NULL, | NULL, |
_queueId, | _queueId, |
termination_req, |
termination_req); |
_queueId); |
|
| |
AutoPtr <AsyncReply> asyncReply( | AutoPtr <AsyncReply> asyncReply( |
_controller->ClientSendWait(_queueId, &asyncRequest)); | _controller->ClientSendWait(_queueId, &asyncRequest)); |
|
|
new AsyncLegacyOperationStart ( | new AsyncLegacyOperationStart ( |
NULL, | NULL, |
_queueId, | _queueId, |
enable_req, |
enable_req); |
_queueId); |
|
| |
AsyncReply * asyncReply = | AsyncReply * asyncReply = |
_controller->ClientSendWait(_queueId, asyncRequest); | _controller->ClientSendWait(_queueId, asyncRequest); |
|
|
CIMObjectPath reference(referenceStr); | CIMObjectPath reference(referenceStr); |
| |
Array<CIMParamValue> inParams; | Array<CIMParamValue> inParams; |
Array<CIMParamValue> outParams; |
|
| |
try | try |
{ | { |
AutoMutex mtx(_updateMtx); |
CIMInvokeMethodRequestMessage* request = |
_cimomHandle.invokeMethod( |
new CIMInvokeMethodRequestMessage( |
context, |
XmlWriter::getNextMessageId(), |
PEGASUS_NAMESPACENAME_INTEROP, | PEGASUS_NAMESPACENAME_INTEROP, |
reference, |
referenceStr, |
CIMNameUnchecked("updateCache"), |
"updateCache", |
inParams, | inParams, |
outParams); |
QueueIdStack(_controller->getQueueId())); |
|
|
|
request->operationContext = context; |
|
|
|
AsyncModuleOperationStart* moduleControllerRequest = |
|
new AsyncModuleOperationStart( |
|
0, |
|
_controller->getQueueId(), |
|
PEGASUS_MODULENAME_INTEROPPROVIDER, |
|
request); |
|
|
|
_controller->SendForget(moduleControllerRequest); |
} | } |
catch(const Exception &e) | catch(const Exception &e) |
{ | { |