version 1.8, 2005/03/23 18:10:12
|
version 1.11.8.5, 2006/03/17 21:40:51
|
|
|
//%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 <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
|
#include <Pegasus/Provider/CIMOMHandle.h> |
#include <Pegasus/ProviderManager2/ProviderManagerService.h> |
|
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
/********************************************************** |
|
* Define CIMOMHandleContext class |
|
**********************************************************/ |
|
class CIMOMHandleContext : public NormalizerContext |
|
{ |
|
public: |
|
CIMOMHandleContext() {} |
|
virtual ~CIMOMHandleContext() {} |
|
|
|
virtual CIMClass getClass( |
|
const CIMNamespaceName& nameSpace, |
|
const CIMName& name); |
|
|
|
virtual Array<CIMName> enumerateClassNames( |
|
const CIMNamespaceName& nameSpace, const CIMName& className, |
|
bool deepInheritance); |
|
|
|
virtual AutoPtr<NormalizerContext> clone(); |
|
|
|
protected: |
|
CIMOMHandleContext(CIMOMHandle & hndl) : handle(hndl) {} |
|
private: |
|
CIMOMHandleContext(const CIMOMHandleContext &); |
|
operator=(const CIMOMHandleContext &); |
|
CIMOMHandle handle; |
|
OperationContext emptyContext; |
|
}; |
|
|
|
CIMClass CIMOMHandleContext::getClass( |
|
const CIMNamespaceName& nameSpace, |
|
const CIMName& name) |
|
{ |
|
// Get the whole class definition |
|
return handle.getClass(emptyContext, nameSpace, name, false, true, true, |
|
CIMPropertyList()); |
|
} |
|
|
|
Array<CIMName> CIMOMHandleContext::enumerateClassNames( |
|
const CIMNamespaceName& nameSpace, const CIMName& className, |
|
bool deepInheritance) |
|
{ |
|
return handle.enumerateClassNames(emptyContext, nameSpace, className, |
|
deepInheritance); |
|
} |
|
|
|
AutoPtr<NormalizerContext> CIMOMHandleContext::clone() |
|
{ |
|
AutoPtr<NormalizerContext> tmpPtr(new CIMOMHandleContext(handle)); |
|
return tmpPtr; |
|
} |
|
|
|
/********************************************************** |
|
* End CIMOMHandleContext class |
|
**********************************************************/ |
|
|
// | // |
// OperationResponseHandler | // OperationResponseHandler |
// | // |
| |
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 |
|
|
request->operationContext.get(CachedClassDefinitionContainer::NAME); | request->operationContext.get(CachedClassDefinitionContainer::NAME); |
| |
cimClass = container.getClass(); | cimClass = container.getClass(); |
|
|
} | } |
catch(Exception &) | catch(Exception &) |
{ | { |
|
|
// for this operation. | // for this operation. |
} | } |
| |
_normalizer = |
AutoPtr<NormalizerContext> tmpContext(new CIMOMHandleContext()); |
ObjectNormalizer( |
ObjectNormalizer tmpNormalizer( |
cimClass, | cimClass, |
request->includeQualifiers, | request->includeQualifiers, |
request->includeClassOrigin); |
request->includeClassOrigin, |
|
request->nameSpace, |
|
tmpContext); |
|
_normalizer = tmpNormalizer; |
#endif | #endif |
} | } |
| |
|
|
throw CIMException(CIM_ERR_FAILED, message); | throw CIMException(CIM_ERR_FAILED, message); |
} | } |
| |
|
if(SimpleInstanceResponseHandler::size() != 0) |
|
{ |
|
MessageLoaderParms message( |
|
"Server.OperationResponseHandler.TOO_MANY_OBJECTS_DELIVERED", |
|
"Too many objects delivered."); |
|
|
|
throw CIMException(CIM_ERR_FAILED, message); |
|
} |
|
|
#ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION | #ifdef PEGASUS_ENABLE_OBJECT_NORMALIZATION |
// The normalizer expects an object path embedded in instances even | // The normalizer expects an object path embedded in instances even |
// though it is not required by this operation. Use the requested | // though it is not required by this operation. Use the requested |
|
|
#endif | #endif |
} | } |
| |
|
void GetInstanceResponseHandler::complete(void) |
|
{ |
|
if(SimpleInstanceResponseHandler::size() == 0) |
|
{ |
|
MessageLoaderParms message( |
|
"Server.OperationResponseHandler.TOO_FEW_OBJECTS_DELIVERED", |
|
"Too few objects delivered."); |
|
|
|
throw CIMException(CIM_ERR_FAILED, message); |
|
} |
|
|
|
SimpleInstanceResponseHandler::complete(); |
|
} |
|
|
String GetInstanceResponseHandler::getClass(void) const | String GetInstanceResponseHandler::getClass(void) const |
{ | { |
return(String("GetInstanceResponseHandler")); | return(String("GetInstanceResponseHandler")); |
|
|
| |
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 |
|
|
// for this operation. | // for this operation. |
} | } |
| |
_normalizer = |
AutoPtr<NormalizerContext> tmpContext(new CIMOMHandleContext()); |
ObjectNormalizer( |
ObjectNormalizer tmpNormalizer( |
cimClass, | cimClass, |
request->includeQualifiers, | request->includeQualifiers, |
request->includeClassOrigin); |
request->includeClassOrigin, |
|
request->nameSpace, |
|
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 |
|
|
// for this operation. | // for this operation. |
} | } |
| |
_normalizer = |
AutoPtr<NormalizerContext> tmpContext(new CIMOMHandleContext()); |
ObjectNormalizer( |
ObjectNormalizer tmpNormalizer( |
cimClass, | cimClass, |
false, | false, |
false); |
false, |
|
request->nameSpace, |
|
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) |
{ | { |
} | } |
| |
|
|
throw CIMException(CIM_ERR_FAILED, message); | throw CIMException(CIM_ERR_FAILED, message); |
} | } |
| |
|
if(SimpleObjectPathResponseHandler::size() != 0) |
|
{ |
|
MessageLoaderParms message( |
|
"Server.OperationResponseHandler.TOO_MANY_OBJECTS_DELIVERED", |
|
"Too many objects delivered."); |
|
|
|
throw CIMException(CIM_ERR_FAILED, message); |
|
} |
|
|
SimpleObjectPathResponseHandler::deliver(cimObjectPath); | SimpleObjectPathResponseHandler::deliver(cimObjectPath); |
} | } |
| |
|
void CreateInstanceResponseHandler::complete(void) |
|
{ |
|
if(SimpleObjectPathResponseHandler::size() == 0) |
|
{ |
|
MessageLoaderParms message( |
|
"Server.OperationResponseHandler.TOO_FEW_OBJECTS_DELIVERED", |
|
"Too few objects delivered."); |
|
|
|
throw CIMException(CIM_ERR_FAILED, message); |
|
} |
|
|
|
SimpleObjectPathResponseHandler::complete(); |
|
} |
|
|
String CreateInstanceResponseHandler::getClass(void) const | String CreateInstanceResponseHandler::getClass(void) const |
{ | { |
return(String("CreateInstanceResponseHandler")); | return(String("CreateInstanceResponseHandler")); |
|
|
| |
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; |
|
|
} | } |
| |
// l10n | // l10n |
ContentLanguages contentLangs; |
ContentLanguageList contentLangs; |
| |
try | try |
{ | { |