📄 providerregistrationprovider.cpp
字号:
// if _PROPERTY_PROVIDERMODULE_NAME key not found if( !moduleFound) { //l10n 485 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,MessageLoaderParms( "ControlProviders.ProviderRegistrationProvider.ProviderRegistrationProvider.NAME_KEY_NOT_FOUND", "key Name was not found")); } handler.processing(); Sint16 ret_value; try { if(methodName.equal(_STOP_PROVIDER)) { // disable module ret_value = _disableModule(objectReference, moduleName, false, al); } else if(methodName.equal(_START_PROVIDER)) { // enable module ret_value = _enableModule(objectReference, moduleName, al); } else { throw PEGASUS_CIM_EXCEPTION(CIM_ERR_METHOD_NOT_AVAILABLE, String::EMPTY); } } catch(const CIMException&) { throw; } CIMValue retValue(ret_value); handler.deliver(retValue); handler.complete();}// get provider manager serviceMessageQueueService * ProviderRegistrationProvider::_getProviderManagerService(){ MessageQueue * queue = MessageQueue::lookup(PEGASUS_QUEUENAME_PROVIDERMANAGER_CPP); MessageQueueService * _service = dynamic_cast<MessageQueueService *>(queue); return(_service);}ProviderRegistrationProvider & ProviderRegistrationProvider::operator=(const ProviderRegistrationProvider & handle){ if(this == &handle) { return(*this); } return(*this);}Array<Uint16> ProviderRegistrationProvider::_sendDisableMessageToProviderManager( CIMDisableModuleRequestMessage * disable_req){ MessageQueueService * _service = _getProviderManagerService(); Uint32 _queueId = _service->getQueueId(); // create request envelope AsyncLegacyOperationStart * asyncRequest = new AsyncLegacyOperationStart ( NULL, _queueId, disable_req, _queueId); AsyncReply * asyncReply = _controller->ClientSendWait(_queueId, asyncRequest); CIMDisableModuleResponseMessage * response = reinterpret_cast<CIMDisableModuleResponseMessage *>( (dynamic_cast<AsyncLegacyOperationResult *>(asyncReply))->get_result()); if (response->cimException.getCode() != CIM_ERR_SUCCESS) { CIMException e = response->cimException; delete asyncRequest; delete asyncReply; delete response; throw e; } Array<Uint16> operationalStatus = response->operationalStatus; delete asyncRequest; delete asyncReply; delete response; return(operationalStatus);}Array<Uint16> ProviderRegistrationProvider::_sendEnableMessageToProviderManager( CIMEnableModuleRequestMessage * enable_req){ MessageQueueService * _service = _getProviderManagerService(); Uint32 _queueId = _service->getQueueId(); // create request envelope AsyncLegacyOperationStart * asyncRequest = new AsyncLegacyOperationStart ( NULL, _queueId, enable_req, _queueId); AsyncReply * asyncReply = _controller->ClientSendWait(_queueId, asyncRequest); CIMEnableModuleResponseMessage * response = reinterpret_cast<CIMEnableModuleResponseMessage *>( (dynamic_cast<AsyncLegacyOperationResult *>(asyncReply))->get_result()); if (response->cimException.getCode() != CIM_ERR_SUCCESS) { CIMException e = response->cimException; delete asyncRequest; delete asyncReply; delete response; throw (e); } Array<Uint16> operationalStatus = response->operationalStatus; delete asyncRequest; delete asyncReply; delete response; return(operationalStatus);}// send termination message to subscription servicevoid ProviderRegistrationProvider::_sendTerminationMessageToSubscription( const CIMObjectPath & ref, const String & moduleName, const Boolean disableProviderOnly, const AcceptLanguageList & al){ CIMInstance instance; String _moduleName; Array<CIMInstance> instances; if (!disableProviderOnly) { CIMObjectPath reference("", PEGASUS_NAMESPACENAME_INTEROP, PEGASUS_CLASSNAME_PROVIDER, ref.getKeyBindings()); Array<CIMObjectPath> instanceNames = _providerRegistrationManager->enumerateInstanceNamesForClass( reference); // find all the instances which have same module name as moduleName for (Uint32 i = 0, n=instanceNames.size(); i < n; i++) { // // get provider module name from reference // Array<CIMKeyBinding> keys = instanceNames[i].getKeyBindings(); for(Uint32 j=0; j < keys.size(); j++) { if(keys[j].getName().equal (_PROPERTY_PROVIDERMODULENAME)) { _moduleName = keys[j].getValue(); } } if (String::equalNoCase(moduleName, _moduleName)) { reference.setKeyBindings(keys); instance = _providerRegistrationManager->getInstance(reference); // // if the provider is indication provider // if (_isIndicationProvider(moduleName, instance)) { instances.append(instance); } } } } else { instance = _providerRegistrationManager->getInstance(ref); // // if the provider is indication provider // if (_isIndicationProvider(moduleName, instance)) { instances.append(instance); } } // // get indication server queueId // MessageQueueService * _service = _getIndicationService(); if (_service != NULL) { Uint32 _queueId = _service->getQueueId(); CIMNotifyProviderTerminationRequestMessage * termination_req = new CIMNotifyProviderTerminationRequestMessage( XmlWriter::getNextMessageId (), instances, QueueIdStack(_service->getQueueId()));// l10n termination_req->operationContext.set(AcceptLanguageListContainer(al)); // create request envelope AsyncLegacyOperationStart asyncRequest( NULL, _queueId, termination_req, _queueId); AutoPtr <AsyncReply> asyncReply( _controller->ClientSendWait(_queueId, &asyncRequest)); AutoPtr <CIMNotifyProviderTerminationResponseMessage> response (reinterpret_cast <CIMNotifyProviderTerminationResponseMessage *> ((dynamic_cast <AsyncLegacyOperationResult *> (asyncReply.get ()))->get_result ())); if (response->cimException.getCode () != CIM_ERR_SUCCESS) { CIMException e = response->cimException; throw e; } }}// get indication serviceMessageQueueService * ProviderRegistrationProvider::_getIndicationService(){ MessageQueue * queue = MessageQueue::lookup( PEGASUS_QUEUENAME_INDICATIONSERVICE); MessageQueueService * _service = dynamic_cast<MessageQueueService *>(queue); return(_service);}// disable provider module, return 0 if module is disabled successfully,// return 1 if module is already disabled, return -2 if module can not be// disabled since there are pending requests, otherwise, return -1Sint16 ProviderRegistrationProvider::_disableModule( const CIMObjectPath & objectReference, const String & moduleName, Boolean disableProviderOnly, const AcceptLanguageList & al){ // // get module status // Array<Uint16> _OperationalStatus = _providerRegistrationManager->getProviderModuleStatus( moduleName); for (Uint32 i = 0; i<_OperationalStatus.size(); i++) { // retValue equals 1 if module is already disabled if (_OperationalStatus[i] == CIM_MSE_OPSTATUS_VALUE_STOPPED || _OperationalStatus[i] == CIM_MSE_OPSTATUS_VALUE_STOPPING) { return (1); } } CIMInstance instance; Array<CIMInstance> instances; CIMInstance mInstance; String _moduleName; CIMObjectPath providerRef; Boolean indProvider = false; Array<Boolean> indicationProviders; // disable a provider module or delete a provider module if (!disableProviderOnly) { providerRef = CIMObjectPath(objectReference.getHost(), objectReference.getNameSpace(), PEGASUS_CLASSNAME_PROVIDER, objectReference.getKeyBindings()); // get module instance mInstance = _providerRegistrationManager->getInstance(objectReference); } else // disable a provider { // get module instance Array <CIMKeyBinding> moduleKeyBindings; moduleKeyBindings.append (CIMKeyBinding (_PROPERTY_PROVIDERMODULE_NAME, moduleName, CIMKeyBinding::STRING)); CIMObjectPath moduleRef(objectReference.getHost(), objectReference.getNameSpace(), PEGASUS_CLASSNAME_PROVIDERMODULE, moduleKeyBindings); mInstance = _providerRegistrationManager->getInstance(moduleRef); } if (!disableProviderOnly) { // get all provider instances which have same module name as // moduleName Array<CIMObjectPath> instanceNames = _providerRegistrationManager->enumerateInstanceNamesForClass( providerRef); for(Uint32 i = 0, n=instanceNames.size(); i < n; i++) { // // get provider module name from reference // Array<CIMKeyBinding> keys = instanceNames[i].getKeyBindings(); for(Uint32 j=0; j < keys.size(); j++) { if(keys[j].getName().equal (_PROPERTY_PROVIDERMODULENAME)) { _moduleName = keys[j].getValue(); } } if (String::equalNoCase(_moduleName, moduleName)) { providerRef.setKeyBindings(keys); instance = _providerRegistrationManager->getInstance (providerRef); if (_isIndicationProvider(moduleName, instance)) { indProvider = true; indicationProviders.append(true); } else { indicationProviders.append(false); } instances.append(instance); } } } else { instance = _providerRegistrationManager->getInstance(objectReference); if (_isIndicationProvider(moduleName, instance)) { indProvider = true; indicationProviders.append(true); } else { indicationProviders.append(false); } instances.append(instance); } // // get provider manager service //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -