📄 providermessagehandler.cpp
字号:
{ 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 + -