⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 providerregistrationprovider.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    // 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 + -