version 1.11.8.1, 2005/12/30 22:01:03
|
version 1.16, 2006/07/21 18:44:08
|
|
|
//%2005//////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development | // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. | // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. | // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; | // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// EMC Corporation; VERITAS Software Corporation; The Open Group. | // EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
// Modified By: | // Modified By: |
// Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase2 | // Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase2 |
|
// Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include "OperationResponseHandler.h" | #include "OperationResponseHandler.h" |
|
#include "CIMOMHandleContext.h" |
| |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
|
#include <Pegasus/Common/AutoPtr.h> |
#include <Pegasus/ProviderManager2/ProviderManagerService.h> |
#include <Pegasus/Provider/CIMOMHandle.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
| |
OperationResponseHandler::OperationResponseHandler( | OperationResponseHandler::OperationResponseHandler( |
CIMRequestMessage *request, | CIMRequestMessage *request, |
CIMResponseMessage *response) |
CIMResponseMessage *response, |
|
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
: _request(request), | : _request(request), |
_response(response), | _response(response), |
|
_responseChunkCallback(responseChunkCallback), |
_responseObjectTotal(0), | _responseObjectTotal(0), |
_responseMessageTotal(0), | _responseMessageTotal(0), |
_responseObjectThreshold(0) | _responseObjectThreshold(0) |
|
|
#define PEGASUS_RESPONSE_OBJECT_COUNT_THRESHOLD ~0 | #define PEGASUS_RESPONSE_OBJECT_COUNT_THRESHOLD ~0 |
#endif | #endif |
| |
if (!request || (request->requestIsOOP == true)) |
if (!request) |
{ | { |
_responseObjectThreshold = ~0; | _responseObjectThreshold = ~0; |
} | } |
|
|
| |
void OperationResponseHandler::setStatus( | void OperationResponseHandler::setStatus( |
const Uint32 code, | const Uint32 code, |
const ContentLanguages & langs, |
const ContentLanguageList & langs, |
const String & message) | const String & message) |
{ | { |
_response->cimException = | _response->cimException = |
|
|
| |
if (isComplete == false) | if (isComplete == false) |
{ | { |
ProviderManagerService::handleCimResponse(*_request, *_response); |
_responseChunkCallback(_request, _response); |
} | } |
| |
// put caller's allocated response back in place. Note that _response | // put caller's allocated response back in place. Note that _response |
|
|
| |
GetInstanceResponseHandler::GetInstanceResponseHandler( | GetInstanceResponseHandler::GetInstanceResponseHandler( |
CIMGetInstanceRequestMessage * request, | CIMGetInstanceRequestMessage * request, |
CIMGetInstanceResponseMessage * response) |
CIMGetInstanceResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
#ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION | #ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION |
// Attempt to get the cached class definition used to validate results of this | // Attempt to get the cached class definition used to validate results of this |
|
|
// operation. | // operation. |
CIMClass cimClass; | CIMClass cimClass; |
| |
CIMRepository * repository = 0; |
if(request->operationContext.contains(CachedClassDefinitionContainer::NAME)) |
|
|
try |
|
{ | { |
CachedClassDefinitionContainer container = | CachedClassDefinitionContainer container = |
request->operationContext.get(CachedClassDefinitionContainer::NAME); |
request->operationContext.get( |
|
CachedClassDefinitionContainer::NAME); |
| |
cimClass = container.getClass(); | cimClass = container.getClass(); |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
RepositoryContainer repContainer = |
|
request->operationContext.get(RepositoryContainer::NAME); |
|
repository = repContainer.getRepository(); |
|
#endif //PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
} |
|
catch(Exception &) |
|
{ |
|
// Do nothing. Container is missing, which implies normalization is disabled |
|
// for this operation. |
|
} | } |
| |
_normalizer = |
AutoPtr<NormalizerContext> tmpContext(new CIMOMHandleContext()); |
ObjectNormalizer( |
ObjectNormalizer tmpNormalizer( |
cimClass, | cimClass, |
request->includeQualifiers, | request->includeQualifiers, |
request->includeClassOrigin, | request->includeClassOrigin, |
request->nameSpace, | request->nameSpace, |
repository); |
tmpContext); |
|
_normalizer = tmpNormalizer; |
#endif | #endif |
} | } |
| |
|
|
| |
EnumerateInstancesResponseHandler::EnumerateInstancesResponseHandler( | EnumerateInstancesResponseHandler::EnumerateInstancesResponseHandler( |
CIMEnumerateInstancesRequestMessage * request, | CIMEnumerateInstancesRequestMessage * request, |
CIMEnumerateInstancesResponseMessage * response) |
CIMEnumerateInstancesResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
#ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION | #ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION |
// Attempt to get the cached class definition used to validate results of this | // Attempt to get the cached class definition used to validate results of this |
// operation. If it does not exist, then this feature is disabled for this | // operation. If it does not exist, then this feature is disabled for this |
// operation. | // operation. |
CIMClass cimClass; | CIMClass cimClass; |
CIMRepository * repository = 0; |
|
| |
try |
if(request->operationContext.contains(CachedClassDefinitionContainer::NAME)) |
{ | { |
CachedClassDefinitionContainer container = | CachedClassDefinitionContainer container = |
request->operationContext.get(CachedClassDefinitionContainer::NAME); |
request->operationContext.get( |
|
CachedClassDefinitionContainer::NAME); |
cimClass = container.getClass(); | cimClass = container.getClass(); |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
RepositoryContainer repContainer = |
|
request->operationContext.get(RepositoryContainer::NAME); |
|
repository = repContainer.getRepository(); |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
} |
|
catch(Exception &) |
|
{ |
|
// Do nothing. Container is missing, which implies normalization is disabled |
|
// for this operation. |
|
} | } |
| |
_normalizer = |
AutoPtr<NormalizerContext> tmpContext(new CIMOMHandleContext()); |
ObjectNormalizer( |
ObjectNormalizer tmpNormalizer( |
cimClass, | cimClass, |
request->includeQualifiers, | request->includeQualifiers, |
request->includeClassOrigin, | request->includeClassOrigin, |
request->nameSpace, | request->nameSpace, |
repository); |
tmpContext); |
|
_normalizer = tmpNormalizer; |
#endif | #endif |
} | } |
| |
|
|
| |
EnumerateInstanceNamesResponseHandler::EnumerateInstanceNamesResponseHandler( | EnumerateInstanceNamesResponseHandler::EnumerateInstanceNamesResponseHandler( |
CIMEnumerateInstanceNamesRequestMessage * request, | CIMEnumerateInstanceNamesRequestMessage * request, |
CIMEnumerateInstanceNamesResponseMessage * response) |
CIMEnumerateInstanceNamesResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
#ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION | #ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION |
// Attempt to get the cached class definition used to validate results of this | // Attempt to get the cached class definition used to validate results of this |
// operation. If it does not exist, then this feature is disabled for this | // operation. If it does not exist, then this feature is disabled for this |
// operation. | // operation. |
CIMClass cimClass; | CIMClass cimClass; |
CIMRepository * repository = 0; |
|
| |
try |
if(request->operationContext.contains(CachedClassDefinitionContainer::NAME)) |
{ | { |
CachedClassDefinitionContainer container = | CachedClassDefinitionContainer container = |
request->operationContext.get(CachedClassDefinitionContainer::NAME); |
request->operationContext.get( |
|
CachedClassDefinitionContainer::NAME); |
| |
cimClass = container.getClass(); | cimClass = container.getClass(); |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
RepositoryContainer repContainer = |
|
request->operationContext.get(RepositoryContainer::NAME); |
|
repository = repContainer.getRepository(); |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
} |
|
catch(Exception &) |
|
{ |
|
// Do nothing. Container is missing, which implies normalization is disabled |
|
// for this operation. |
|
} | } |
| |
_normalizer = |
AutoPtr<NormalizerContext> tmpContext(new CIMOMHandleContext()); |
ObjectNormalizer( |
ObjectNormalizer tmpNormalizer( |
cimClass, | cimClass, |
false, | false, |
false, | false, |
request->nameSpace, | request->nameSpace, |
repository); |
tmpContext); |
|
_normalizer = tmpNormalizer; |
#endif | #endif |
} | } |
| |
|
|
| |
CreateInstanceResponseHandler::CreateInstanceResponseHandler( | CreateInstanceResponseHandler::CreateInstanceResponseHandler( |
CIMCreateInstanceRequestMessage * request, | CIMCreateInstanceRequestMessage * request, |
CIMCreateInstanceResponseMessage * response) |
CIMCreateInstanceResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
ModifyInstanceResponseHandler::ModifyInstanceResponseHandler( | ModifyInstanceResponseHandler::ModifyInstanceResponseHandler( |
CIMModifyInstanceRequestMessage * request, | CIMModifyInstanceRequestMessage * request, |
CIMModifyInstanceResponseMessage * response) |
CIMModifyInstanceResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
DeleteInstanceResponseHandler::DeleteInstanceResponseHandler( | DeleteInstanceResponseHandler::DeleteInstanceResponseHandler( |
CIMDeleteInstanceRequestMessage * request, | CIMDeleteInstanceRequestMessage * request, |
CIMDeleteInstanceResponseMessage * response) |
CIMDeleteInstanceResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
GetPropertyResponseHandler::GetPropertyResponseHandler( | GetPropertyResponseHandler::GetPropertyResponseHandler( |
CIMGetPropertyRequestMessage * request, | CIMGetPropertyRequestMessage * request, |
CIMGetPropertyResponseMessage * response) |
CIMGetPropertyResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
SetPropertyResponseHandler::SetPropertyResponseHandler( | SetPropertyResponseHandler::SetPropertyResponseHandler( |
CIMSetPropertyRequestMessage * request, | CIMSetPropertyRequestMessage * request, |
CIMSetPropertyResponseMessage * response) |
CIMSetPropertyResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
ExecQueryResponseHandler::ExecQueryResponseHandler( | ExecQueryResponseHandler::ExecQueryResponseHandler( |
CIMExecQueryRequestMessage * request, | CIMExecQueryRequestMessage * request, |
CIMExecQueryResponseMessage * response) |
CIMExecQueryResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
AssociatorsResponseHandler::AssociatorsResponseHandler( | AssociatorsResponseHandler::AssociatorsResponseHandler( |
CIMAssociatorsRequestMessage * request, | CIMAssociatorsRequestMessage * request, |
CIMAssociatorsResponseMessage * response) |
CIMAssociatorsResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
AssociatorNamesResponseHandler::AssociatorNamesResponseHandler( | AssociatorNamesResponseHandler::AssociatorNamesResponseHandler( |
CIMAssociatorNamesRequestMessage * request, | CIMAssociatorNamesRequestMessage * request, |
CIMAssociatorNamesResponseMessage * response) |
CIMAssociatorNamesResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
ReferencesResponseHandler::ReferencesResponseHandler( | ReferencesResponseHandler::ReferencesResponseHandler( |
CIMReferencesRequestMessage * request, | CIMReferencesRequestMessage * request, |
CIMReferencesResponseMessage * response) |
CIMReferencesResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
ReferenceNamesResponseHandler::ReferenceNamesResponseHandler( | ReferenceNamesResponseHandler::ReferenceNamesResponseHandler( |
CIMReferenceNamesRequestMessage * request, | CIMReferenceNamesRequestMessage * request, |
CIMReferenceNamesResponseMessage * response) |
CIMReferenceNamesResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
| |
InvokeMethodResponseHandler::InvokeMethodResponseHandler( | InvokeMethodResponseHandler::InvokeMethodResponseHandler( |
CIMInvokeMethodRequestMessage * request, | CIMInvokeMethodRequestMessage * request, |
CIMInvokeMethodResponseMessage * response) |
CIMInvokeMethodResponseMessage* response, |
: OperationResponseHandler(request, response) |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback) |
{ | { |
} | } |
| |
|
|
// EnableIndicationsResponseHandler | // EnableIndicationsResponseHandler |
// | // |
| |
typedef void (*PEGASUS_INDICATION_CALLBACK)(CIMProcessIndicationRequestMessage*); |
|
|
|
EnableIndicationsResponseHandler::EnableIndicationsResponseHandler( | EnableIndicationsResponseHandler::EnableIndicationsResponseHandler( |
CIMRequestMessage * request, | CIMRequestMessage * request, |
CIMResponseMessage * response, | CIMResponseMessage * response, |
CIMInstance & provider, | CIMInstance & provider, |
PEGASUS_INDICATION_CALLBACK indicationCallback) |
PEGASUS_INDICATION_CALLBACK_T indicationCallback, |
: OperationResponseHandler(request, response), |
PEGASUS_RESPONSE_CHUNK_CALLBACK_T responseChunkCallback) |
|
: OperationResponseHandler(request, response, responseChunkCallback), |
_indicationCallback(indicationCallback) | _indicationCallback(indicationCallback) |
{ | { |
_provider = provider; | _provider = provider; |
|
|
// Get list of subscription instance names from context | // Get list of subscription instance names from context |
Array<CIMObjectPath> subscriptionInstanceNames; | Array<CIMObjectPath> subscriptionInstanceNames; |
| |
try |
if(context.contains(SubscriptionInstanceNamesContainer::NAME)) |
{ | { |
SubscriptionInstanceNamesContainer container = | SubscriptionInstanceNamesContainer container = |
context.get(SubscriptionInstanceNamesContainer::NAME); | context.get(SubscriptionInstanceNamesContainer::NAME); |
| |
subscriptionInstanceNames = container.getInstanceNames(); | subscriptionInstanceNames = container.getInstanceNames(); |
} | } |
catch(Exception &) |
else |
{ | { |
subscriptionInstanceNames.clear(); | subscriptionInstanceNames.clear(); |
} | } |
| |
// l10n | // l10n |
ContentLanguages contentLangs; |
ContentLanguageList contentLangs; |
| |
try |
if(context.contains(ContentLanguageListContainer::NAME)) |
{ | { |
// Get the Content-Language for this indication. The provider | // Get the Content-Language for this indication. The provider |
// does not have to add specify a language for the indication. | // does not have to add specify a language for the indication. |
|
|
| |
contentLangs = langContainer.getLanguages(); | contentLangs = langContainer.getLanguages(); |
} | } |
catch(Exception &) |
else |
{ | { |
// The provider did not explicitly set a Content-Language for | // The provider did not explicitly set a Content-Language for |
// the indication. Fall back to the lang set in this object. | // the indication. Fall back to the lang set in this object. |
|
|
| |
request->operationContext = context; | request->operationContext = context; |
| |
try |
if(request->operationContext.contains(ContentLanguageListContainer::NAME)) |
{ | { |
request->operationContext.set(ContentLanguageListContainer(contentLangs)); | request->operationContext.set(ContentLanguageListContainer(contentLangs)); |
} | } |
catch(Exception &) |
else |
{ | { |
request->operationContext.insert(ContentLanguageListContainer(contentLangs)); | request->operationContext.insert(ContentLanguageListContainer(contentLangs)); |
} | } |