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

📄 providermessagehandler.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    {        temp.append(request->classNames[i].getString());        if (i < (n - 1))        {            temp.append(", ");        }    }    PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,        Logger::TRACE,        "ProviderMessageHandler::_handleCreateSubscriptionRequest - "            "Host name: $0  Name space: $1  Class name(s): $2",        System::getHostName(),        request->nameSpace.getString(),        temp));    //    //  Save the provider instance from the request    //    ProviderIdContainer pidc = (ProviderIdContainer)        request->operationContext.get(ProviderIdContainer::NAME);    status.setProviderInstance(pidc.getProvider());    // convert arguments    Array<CIMObjectPath> classNames;    for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)    {        CIMObjectPath className(            System::getHostName(),            request->nameSpace,            request->classNames[i]);        classNames.append(className);    }    OperationContext providerContext(        _createProviderOperationContext(request->operationContext));    providerContext.insert(request->operationContext.get(        SubscriptionInstanceContainer::NAME));    providerContext.insert(request->operationContext.get(        SubscriptionFilterConditionContainer::NAME));    providerContext.insert(request->operationContext.get(        SubscriptionFilterQueryContainer::NAME));    AutoPThreadSecurity threadLevelSecurity(providerContext);    CIMIndicationProvider* provider =        getProviderInterface<CIMIndicationProvider>(_provider);    PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,        "Calling provider.createSubscription: " + _name);    StatProviderTimeMeasurement providerTime(response.get());    HANDLE_PROVIDER_EXCEPTION(        provider->createSubscription(            providerContext,            request->subscriptionInstance.getPath(),            classNames,            request->propertyList,            request->repeatNotificationPolicy),        handler)    //    //  Increment count of current subscriptions for this provider    //    if (status.testIfZeroAndIncrementSubscriptions())    {        PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,            "First accepted subscription");        //        //  If there were no current subscriptions before the increment,        //  the first subscription has been created        //  Call the provider's enableIndications method        //        if (_subscriptionInitComplete)        {            _enableIndications();        }    }    PEG_METHOD_EXIT();    return response.release();}CIMResponseMessage* ProviderMessageHandler::_handleModifySubscriptionRequest(    CIMRequestMessage* message){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "ProviderMessageHandler::_handleModifySubscriptionRequest");    CIMModifySubscriptionRequestMessage* request =        dynamic_cast<CIMModifySubscriptionRequestMessage*>(message);    PEGASUS_ASSERT(request != 0);    AutoPtr<CIMModifySubscriptionResponseMessage> response(        dynamic_cast<CIMModifySubscriptionResponseMessage*>(            request->buildResponse()));    PEGASUS_ASSERT(response.get() != 0);    OperationResponseHandler handler(        request, response.get(), _responseChunkCallback);    String temp;    for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)    {        temp.append(request->classNames[i].getString());        if (i < (n - 1))        {            temp.append(", ");        }    }    PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,        Logger::TRACE,        "ProviderMessageHandler::_handleCreateSubscriptionRequest - "            "Host name: $0  Name space: $1  Class name(s): $2",        System::getHostName(),        request->nameSpace.getString(),        temp));    // convert arguments    Array<CIMObjectPath> classNames;    for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)    {        CIMObjectPath className(            System::getHostName(),            request->nameSpace,            request->classNames[i]);        classNames.append(className);    }    OperationContext providerContext(        _createProviderOperationContext(request->operationContext));    providerContext.insert(request->operationContext.get(        SubscriptionInstanceContainer::NAME));    providerContext.insert(request->operationContext.get(        SubscriptionFilterConditionContainer::NAME));    providerContext.insert(request->operationContext.get(        SubscriptionFilterQueryContainer::NAME));    AutoPThreadSecurity threadLevelSecurity(providerContext);    CIMIndicationProvider* provider =        getProviderInterface<CIMIndicationProvider>(_provider);    PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,        "Calling provider.modifySubscription: " + _name);    StatProviderTimeMeasurement providerTime(response.get());    HANDLE_PROVIDER_EXCEPTION(        provider->modifySubscription(            providerContext,            request->subscriptionInstance.getPath(),            classNames,            request->propertyList,            request->repeatNotificationPolicy),        handler)    PEG_METHOD_EXIT();    return response.release();}CIMResponseMessage* ProviderMessageHandler::_handleDeleteSubscriptionRequest(    CIMRequestMessage* message){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "ProviderMessageHandler::_handleDeleteSubscriptionRequest");    CIMDeleteSubscriptionRequestMessage* request =        dynamic_cast<CIMDeleteSubscriptionRequestMessage*>(message);    PEGASUS_ASSERT(request != 0);    AutoPtr<CIMDeleteSubscriptionResponseMessage> response(        dynamic_cast<CIMDeleteSubscriptionResponseMessage*>(            request->buildResponse()));    PEGASUS_ASSERT(response.get() != 0);    OperationResponseHandler handler(        request, response.get(), _responseChunkCallback);    String temp;    for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)    {        temp.append(request->classNames[i].getString());        if (i < (n - 1))        {            temp.append(", ");        }    }    PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER,        Logger::TRACE,        "ProviderMessageHandler::_handleDeleteSubscriptionRequest - "            "Host name: $0  Name space: $1  Class name(s): $2",        System::getHostName(),        request->nameSpace.getString(),        temp));    Array<CIMObjectPath> classNames;    for (Uint32 i = 0, n = request->classNames.size(); i < n; i++)    {        CIMObjectPath className(            System::getHostName(),            request->nameSpace,            request->classNames[i]);        classNames.append(className);    }    OperationContext providerContext(        _createProviderOperationContext(request->operationContext));    providerContext.insert(request->operationContext.get(        SubscriptionInstanceContainer::NAME));    AutoPThreadSecurity threadLevelSecurity(providerContext);    CIMIndicationProvider* provider =        getProviderInterface<CIMIndicationProvider>(_provider);    PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,        "Calling provider.deleteSubscription: " + _name);    StatProviderTimeMeasurement providerTime(response.get());    HANDLE_PROVIDER_EXCEPTION(        provider->deleteSubscription(            providerContext,            request->subscriptionInstance.getPath(),            classNames),        handler)    //    //  Decrement count of current subscriptions for this provider    //    if (status.decrementSubscriptionsAndTestIfZero())    {        //        //  If there are no current subscriptions after the decrement,        //  the last subscription has been deleted        //  Call the provider's disableIndications method        //        if (_subscriptionInitComplete)        {            _disableIndications();        }    }    PEG_METHOD_EXIT();    return response.release();}CIMResponseMessage* ProviderMessageHandler::_handleExportIndicationRequest(    CIMRequestMessage* message){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "ProviderMessageHandler::_handleExportIndicationRequest");    CIMExportIndicationRequestMessage* request =        dynamic_cast<CIMExportIndicationRequestMessage*>(message);    PEGASUS_ASSERT(request != 0);    AutoPtr<CIMExportIndicationResponseMessage> response(        dynamic_cast<CIMExportIndicationResponseMessage*>(            request->buildResponse()));    PEGASUS_ASSERT(response.get() != 0);    OperationResponseHandler handler(        request, response.get(), _responseChunkCallback);    // NOTE: Accept-Languages do not need to be set in the consume msg.    OperationContext providerContext;    providerContext.insert(request->operationContext.get(        IdentityContainer::NAME));//L10N_TODO// ATTN-CEC 06/04/03 NOTE: I can't find where the consume msg is sent.  This// does not appear to be hooked up.  When it is added, need to// make sure that Content-Language is set in the consume msg.    providerContext.insert(request->operationContext.get(        ContentLanguageListContainer::NAME));    AutoPThreadSecurity threadLevelSecurity(providerContext);    CIMIndicationConsumerProvider* provider =        getProviderInterface<CIMIndicationConsumerProvider>(_provider);    PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,        "Calling provider.consumeIndication: " + _name);    StatProviderTimeMeasurement providerTime(response.get());    HANDLE_PROVIDER_EXCEPTION(        provider->consumeIndication(            providerContext,            request->destinationPath,            request->indicationInstance),        handler)    PEG_METHOD_EXIT();    return response.release();}void ProviderMessageHandler::_enableIndications(){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "DefaultProviderManager::_enableIndications");    try    {        EnableIndicationsResponseHandler* indicationResponseHandler =            new EnableIndicationsResponseHandler(                0,    // request                0,    // response                status.getProviderInstance(),                _indicationCallback,                _responseChunkCallback);        _indicationResponseHandler = indicationResponseHandler;        status.setIndicationsEnabled(true);        CIMIndicationProvider* provider =            getProviderInterface<CIMIndicationProvider>(_provider);        PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,            "Calling provider.enableIndications: " + _name);        provider->enableIndications(*indicationResponseHandler);    }    catch (Exception& e)    {        PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,            "Exception: " + 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(...)    {        PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,            "Unexpected error in _enableIndications");        Logger::put_l(Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,            "ProviderManager.Default.DefaultProviderManager."                "ENABLE_INDICATIONS_FAILED_UNKNOWN",            "Failed to enable indications for provider $0.",            _name);    }    PEG_METHOD_EXIT();}void ProviderMessageHandler::_disableIndications(){    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,        "DefaultProviderManager::_disableIndications");    try    {        if (status.getIndicationsEnabled())        {            CIMIndicationProvider* provider =                getProviderInterface<CIMIndicationProvider>(_provider);            PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                "Calling provider.disableIndications: " + _name);            try            {                provider->disableIndications();            }            catch (...)            {                PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,                    "Caught exception from provider " + _name +                        " disableIndications() method.");            }            status.setIndicationsEnabled(false);            status.resetSubscriptions();            PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,                "Destroying indication response handler for " + _name);            delete _indicationResponseHandler;            _indicationResponseHandler = 0;        }    }    catch(...)    {        PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3,            "Error occured disabling indications in provider " + _name);    }}PEGASUS_NAMESPACE_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -