version 1.51, 2004/10/17 20:40:12
|
version 1.52, 2004/11/05 15:44:06
|
|
|
// Seema Gupta (gseema@in.ibm.com) for PEP135 | // Seema Gupta (gseema@in.ibm.com) for PEP135 |
// Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1 | // Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1 |
// Willis White (whiwill@us.ibm.com) PEP 127 and 128 | // Willis White (whiwill@us.ibm.com) PEP 127 and 128 |
|
// Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase2 |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
#include <cctype> | #include <cctype> |
#include <cstdio> | #include <cstdio> |
|
#include <Pegasus/Common/HTTPConnection.h> |
#include <Pegasus/Common/XmlParser.h> | #include <Pegasus/Common/XmlParser.h> |
#include <Pegasus/Common/XmlReader.h> | #include <Pegasus/Common/XmlReader.h> |
#include <Pegasus/Common/XmlWriter.h> | #include <Pegasus/Common/XmlWriter.h> |
|
|
| |
} | } |
| |
void CIMOperationResponseEncoder::sendResponse |
void |
(Uint32 queueId, Array<Sint8>& message, Boolean isLast, Uint32 messageIndex, |
CIMOperationResponseEncoder::sendResponse(CIMResponseMessage* response, |
const CIMException* cimException) |
const String &name, |
|
Boolean isImplicit, |
|
Array<Sint8> *bodygiven) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
static String funcname = "CIMOperationResponseEncoder::sendResponse: "; |
"CIMOperationResponseEncoder::sendResponse()"); |
PEG_METHOD_ENTER(TRC_DISPATCHER, String(funcname + "for class " + name).getCString()); |
MessageQueue* queue = MessageQueue::lookup(queueId); |
|
| |
if (queue) |
if (! response) |
{ | { |
CIMException cimExceptionDescription; |
PEG_METHOD_EXIT(); |
if (cimException && cimException->getCode() != CIM_ERR_SUCCESS) |
return; |
{ |
|
String msg = XmlWriter::encodeURICharacters |
|
(TraceableCIMException(*cimException).getDescription()); |
|
cimExceptionDescription = CIMException(cimException->getCode(), msg); |
|
} | } |
AutoPtr<HTTPMessage> httpMessage(new HTTPMessage |
|
(message, 0, &cimExceptionDescription)); |
|
httpMessage->setComplete(isLast); |
|
httpMessage->setIndex(messageIndex); |
|
Tracer::traceBuffer(TRC_XML_IO, Tracer::LEVEL2, |
|
httpMessage->message.getData(), httpMessage->message.size()); |
|
| |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
Uint32 queueId = response->queueIds.top(); |
"CIMOperationResponseEncoder::SendResponse - QueueId: $0 XML content: $1", |
response->queueIds.pop(); |
queueId, |
|
String(httpMessage->message.getData(),httpMessage->message.size())); |
|
| |
queue->enqueue(httpMessage.release()); |
MessageQueue* queue = MessageQueue::lookup(queueId); |
| |
#ifdef PEGASUS_CCOVER |
if (!queue) |
cov_write(); |
|
#endif |
|
} |
|
else |
|
{ | { |
Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2, | Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2, |
"Invalid queueId = %i, response not sent.", queueId); |
"ERROR: non-existent queueId = %u, response not sent.", queueId); |
|
PEG_METHOD_EXIT(); |
|
return; |
} | } |
| |
|
HTTPConnection *httpQueue = dynamic_cast<HTTPConnection *>(queue); |
|
|
|
if (! httpQueue) |
|
{ |
|
Tracer::trace(TRC_DISCARDED_DATA, Tracer::LEVEL2, |
|
"ERROR: Unknown queue type. queueId = %u, response not sent.", |
|
queueId); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
|
return; |
} | } |
| |
// Code is duplicated in CIMOperationRequestDecoder |
Boolean isChunkRequest = httpQueue->isChunkRequested(); |
void CIMOperationResponseEncoder::sendIMethodError( |
HttpMethod httpMethod = response->getHttpMethod(); |
Uint32 queueId, |
String &messageId = response->messageId; |
|
CIMException &cimException = response->cimException; |
|
Array<Sint8> message; |
|
const OperationContext::Container &container = |
|
response->operationContext.get(ContentLanguageListContainer::NAME); |
|
const ContentLanguageListContainer &listContainer = |
|
*dynamic_cast<const ContentLanguageListContainer *>(&container); |
|
ContentLanguages language = listContainer.getLanguages(); |
|
CIMName cimName(name); |
|
Uint32 messageIndex = response->getIndex(); |
|
Boolean isFirst = messageIndex == 0 ? true : false; |
|
Boolean isLast = response->isComplete(); |
|
Uint64 serverTime = response->totServerTime; |
|
Array<Sint8> bodylocal; |
|
Array<Sint8> &body = bodygiven ? *bodygiven : bodylocal; |
|
|
|
Array<Sint8> (*formatResponse)(const CIMName& iMethodName, |
|
const String& messageId, |
HttpMethod httpMethod, | HttpMethod httpMethod, |
|
const ContentLanguages &httpContentLanguages, |
|
const Array<Sint8>& body, |
|
Uint64 serverResponseTime, |
|
Boolean isFirst, |
|
Boolean isLast); |
|
|
|
Array<Sint8> (*formatError)(const CIMName& methodName, |
const String& messageId, | const String& messageId, |
const String& iMethodName, |
HttpMethod httpMethod, |
const CIMException& cimException, |
const CIMException& cimException); |
Uint32 messageIndex) |
|
|
if (isImplicit == false) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
formatResponse = XmlWriter::formatSimpleMethodRspMessage; |
"CIMOperationResponseEncoder::sendIMethodError()"); |
formatError = XmlWriter::formatSimpleMethodErrorRspMessage; |
|
} |
|
else |
|
{ |
|
formatResponse = XmlWriter::formatSimpleIMethodRspMessage; |
|
formatError = XmlWriter::formatSimpleIMethodErrorRspMessage; |
|
} |
| |
Array<Sint8> message; |
if (cimException.getCode() != CIM_ERR_SUCCESS) |
message = XmlWriter::formatSimpleIMethodErrorRspMessage( |
{ |
iMethodName, |
STAT_SERVEREND_ERROR |
messageId, |
|
httpMethod, |
|
cimException); |
|
| |
sendResponse(queueId, message, true, messageIndex, &cimException); |
if (httpQueue->cimException.getCode() == CIM_ERR_SUCCESS) |
|
{ |
| |
PEG_METHOD_EXIT(); |
if (isChunkRequest == false) |
} |
message = formatError(name, messageId, httpMethod, cimException); |
| |
void CIMOperationResponseEncoder::sendIMethodError( |
// uri encode the error (for the http header) only when it is |
CIMResponseMessage* response, |
// non-chunking or the first error with chunking |
const String& cimMethodName) |
if (isChunkRequest == false || (isChunkRequest == true && isFirst == true)) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
String msg = TraceableCIMException(cimException).getDescription(); |
"CIMOperationResponseEncoder::sendIMethodError()"); |
String uriEncodedMsg = XmlWriter::encodeURICharacters(msg); |
|
cimException = CIMException(cimException.getCode(), uriEncodedMsg); |
|
} |
| |
Uint32 queueId = response->queueIds.top(); |
} // if first error in response stream |
response->queueIds.pop(); |
|
| |
sendIMethodError( |
// never put the error in chunked response (because it will end up in |
queueId, |
// the trailer), so just use the non-error response formatter so send |
response->getHttpMethod(), |
// more data |
response->messageId, |
|
cimMethodName, |
|
response->cimException, |
|
response->getIndex()); |
|
| |
PEG_METHOD_EXIT(); |
if (isChunkRequest == true) |
|
{ |
|
message = formatResponse(cimName, messageId, httpMethod, |
|
language, body, serverTime, isFirst, isLast); |
|
} |
|
} |
|
else |
|
{ |
|
// else non-error condition |
|
STAT_SERVEREND |
|
try |
|
{ |
|
message = formatResponse(cimName, messageId, httpMethod, |
|
language, body, serverTime, isFirst, isLast); |
} | } |
| |
void CIMOperationResponseEncoder::sendMethodError( |
#ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC |
Uint32 queueId, |
catch (std::bad_alloc&) |
HttpMethod httpMethod, |
#else |
const String& messageId, |
catch (bad_alloc&) |
const CIMName& methodName, |
#endif |
const CIMException& cimException, |
|
Uint32 messageIndex) |
|
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
"CIMOperationResponseEncoder::sendMethodError()"); |
funcname + OUT_OF_MEMORY_MESSAGE); |
| |
Array<Sint8> message; |
cimException = PEGASUS_CIM_EXCEPTION_L |
message = XmlWriter::formatSimpleMethodErrorRspMessage( |
(CIM_ERR_FAILED, |
methodName, |
MessageLoaderParms("Server.CIMOperationResponseEncoder.OUT_OF_MEMORY", |
messageId, |
OUT_OF_MEMORY_MESSAGE)); |
httpMethod, |
response->cimException = cimException; |
cimException); |
// try again with new error and no body |
|
body.clear(); |
|
sendResponse(response, name, isImplicit); |
|
return; |
|
} |
| |
sendResponse(queueId, message, true, messageIndex, &cimException); |
STAT_BYTESSENT |
| |
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::sendMethodError( |
AutoPtr<HTTPMessage> httpMessage(new HTTPMessage(message, 0, &cimException)); |
CIMResponseMessage* response, |
httpMessage->setComplete(isLast); |
const CIMName& cimMethodName) |
httpMessage->setIndex(messageIndex); |
{ |
Tracer::traceBuffer(TRC_XML_IO, Tracer::LEVEL2, |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
httpMessage->message.getData(), |
"CIMOperationResponseEncoder::sendMethodError()"); |
httpMessage->message.size()); |
| |
Uint32 queueId = response->queueIds.top(); |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
response->queueIds.pop(); |
"CIMOperationResponseEncoder::sendResponse - QueueId: $0 " |
|
"XML content: $1",queueId, |
|
String(message.getData(), message.size())); |
|
|
|
queue->enqueue(httpMessage.release()); |
|
|
|
#ifdef PEGASUS_CCOVER |
|
cov_write(); |
|
#endif |
| |
sendMethodError( |
|
queueId, |
|
response->getHttpMethod(), |
|
response->messageId, |
|
cimMethodName, |
|
response->cimException, |
|
response->getIndex()); |
|
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
} | } |
| |
|
|
void CIMOperationResponseEncoder::encodeCreateClassResponse( | void CIMOperationResponseEncoder::encodeCreateClassResponse( |
CIMCreateClassResponseMessage* response) | CIMCreateClassResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
sendResponse(response, "CreateClass", true); |
"CIMOperationResponseEncoder::encodeCreateClassResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "CreateClass"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("CreateClass"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
|
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeGetClassResponse( | void CIMOperationResponseEncoder::encodeGetClassResponse( |
CIMGetClassResponseMessage* response) | CIMGetClassResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
|
"CIMOperationResponseEncoder::encodeGetClassResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "GetClass"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
XmlWriter::appendClassElement(body, response->cimClass); | XmlWriter::appendClassElement(body, response->cimClass); |
|
sendResponse(response, "GetClass", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("GetClass"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
|
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeModifyClassResponse( | void CIMOperationResponseEncoder::encodeModifyClassResponse( |
CIMModifyClassResponseMessage* response) | CIMModifyClassResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
sendResponse(response, "ModifyClass", true); |
"CIMOperationResponseEncoder::encodeModifyClassResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "ModifyClass"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("ModifyClass"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
|
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeEnumerateClassNamesResponse( | void CIMOperationResponseEncoder::encodeEnumerateClassNamesResponse( |
CIMEnumerateClassNamesResponseMessage* response) | CIMEnumerateClassNamesResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeEnumerateClassNamesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "EnumerateClassNames"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->classNames.size(); i++) |
for (Uint32 i = 0, n = response->classNames.size(); i < n; i++) |
XmlWriter::appendClassNameElement(body, response->classNames[i]); | XmlWriter::appendClassNameElement(body, response->classNames[i]); |
|
sendResponse(response, "EnumerateClassNames", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("EnumerateClassNames"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
|
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeEnumerateClassesResponse( | void CIMOperationResponseEncoder::encodeEnumerateClassesResponse( |
CIMEnumerateClassesResponseMessage* response) | CIMEnumerateClassesResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeEnumerateClassesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "EnumerateClasses"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
Array<Sint8> message; |
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
|
for (Uint32 i = 0, n= response->cimClasses.size(); i < n; i++) |
try |
|
{ |
|
for (Uint32 i = 0; i < response->cimClasses.size(); i++) |
|
XmlWriter::appendClassElement(body, response->cimClasses[i]); | XmlWriter::appendClassElement(body, response->cimClasses[i]); |
|
sendResponse(response, "EnumerateClasses", true, &body); |
STAT_SERVEREND |
|
|
|
message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("EnumerateClasses"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
} |
|
// This operation may result in a large response. Handle the bad_alloc |
|
// exception and send an error response. |
|
|
|
#ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC |
|
catch (std::bad_alloc&) |
|
#else |
|
catch (bad_alloc&) |
|
#endif |
|
{ |
|
// ATTN-SF-P5-20021004 A message should be logged here |
|
// indicating the out of memory message. |
|
|
|
// l10n |
|
CIMException cimException = PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"Server.CIMOperationResponseEncoder.OUT_OF_MEMORY", |
|
OUT_OF_MEMORY_MESSAGE)); |
|
|
|
// CIMException cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, |
|
// OUT_OF_MEMORY_MESSAGE); |
|
|
|
response->cimException = cimException; |
|
sendIMethodError(response, "EnumerateClasses"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeDeleteClassResponse( | void CIMOperationResponseEncoder::encodeDeleteClassResponse( |
CIMDeleteClassResponseMessage* response) | CIMDeleteClassResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
sendResponse(response, "DeleteClass", true); |
"CIMOperationResponseEncoder::encodeDeleteClassResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "DeleteClass"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("DeleteClass"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeCreateInstanceResponse( | void CIMOperationResponseEncoder::encodeCreateInstanceResponse( |
CIMCreateInstanceResponseMessage* response) | CIMCreateInstanceResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeCreateInstanceResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "CreateInstance"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
XmlWriter::appendInstanceNameElement(body, response->instanceName); | XmlWriter::appendInstanceNameElement(body, response->instanceName); |
|
sendResponse(response, "CreateInstance", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("CreateInstance"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeGetInstanceResponse( | void CIMOperationResponseEncoder::encodeGetInstanceResponse( |
CIMGetInstanceResponseMessage* response) | CIMGetInstanceResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeGetInstanceResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "GetInstance"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
XmlWriter::appendInstanceElement(body, response->cimInstance); | XmlWriter::appendInstanceElement(body, response->cimInstance); |
|
sendResponse(response, "GetInstance", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("GetInstance"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeModifyInstanceResponse( | void CIMOperationResponseEncoder::encodeModifyInstanceResponse( |
CIMModifyInstanceResponseMessage* response) | CIMModifyInstanceResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
sendResponse(response, "ModifyInstance", true); |
"encodeModifyInstanceResponse()"); |
} |
| |
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
void CIMOperationResponseEncoder::encodeEnumerateInstancesResponse( |
|
CIMEnumerateInstancesResponseMessage* response) |
{ | { |
STAT_SERVEREND_ERROR |
Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
sendIMethodError(response, "ModifyInstance"); |
for (Uint32 i = 0, n = response->cimNamedInstances.size(); i < n; i++) |
PEG_METHOD_EXIT(); |
XmlWriter::appendValueNamedInstanceElement(body, response->cimNamedInstances[i]); |
return; |
sendResponse(response, "EnumerateInstances", true, &body); |
} | } |
| |
|
void CIMOperationResponseEncoder::encodeEnumerateInstanceNamesResponse( |
|
CIMEnumerateInstanceNamesResponseMessage* response) |
|
{ |
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
|
for (Uint32 i = 0, n = response->instanceNames.size(); i < n; i++) |
|
XmlWriter::appendInstanceNameElement(body, response->instanceNames[i]); |
|
sendResponse(response, "EnumerateInstanceNames", true, &body); |
|
} |
| |
STAT_SERVEREND |
void CIMOperationResponseEncoder::encodeDeleteInstanceResponse( |
|
CIMDeleteInstanceResponseMessage* response) |
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
{ |
CIMName ("ModifyInstance"), response->messageId, |
sendResponse(response, "DeleteInstance", true); |
response->getHttpMethod(), |
} |
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} |
|
|
|
void CIMOperationResponseEncoder::encodeEnumerateInstancesResponse( |
|
CIMEnumerateInstancesResponseMessage* response) |
|
{ |
|
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeEnumerateInstancesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "EnumerateInstances"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
Array<Sint8> message; |
|
|
|
|
|
try |
|
{ |
|
for (Uint32 i = 0; i < response->cimNamedInstances.size(); i++) |
|
XmlWriter::appendValueNamedInstanceElement( |
|
body, response->cimNamedInstances[i]); |
|
|
|
STAT_SERVEREND |
|
message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("EnumerateInstances"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
|
|
} |
|
// This operation may result in a large response. Handle the bad_alloc |
|
// exception and send an error response. |
|
|
|
#ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC |
|
catch (std::bad_alloc&) |
|
#else |
|
catch (bad_alloc&) |
|
#endif |
|
{ |
|
// ATTN-SF-P5-20021004 A message should be logged here |
|
// indicating the out of memory message. |
|
|
|
|
|
// l10n |
|
CIMException cimException = PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"Server.CIMOperationResponseEncoder.OUT_OF_MEMORY", |
|
OUT_OF_MEMORY_MESSAGE)); |
|
|
|
// CIMException cimException = PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED, |
|
// OUT_OF_MEMORY_MESSAGE); |
|
|
|
response->cimException = cimException; |
|
sendIMethodError(response, "EnumerateInstances"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} |
|
|
|
void CIMOperationResponseEncoder::encodeEnumerateInstanceNamesResponse( |
|
CIMEnumerateInstanceNamesResponseMessage* response) |
|
{ |
|
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeEnumerateInstanceNamesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "EnumerateInstanceNames"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
for (Uint32 i = 0; i < response->instanceNames.size(); i++) |
|
XmlWriter::appendInstanceNameElement(body, response->instanceNames[i]); |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("EnumerateInstanceNames"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} |
|
|
|
void CIMOperationResponseEncoder::encodeDeleteInstanceResponse( |
|
CIMDeleteInstanceResponseMessage* response) |
|
{ |
|
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeDeleteInstanceResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "DeleteInstance"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("DeleteInstance"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} |
|
| |
void CIMOperationResponseEncoder::encodeGetPropertyResponse( | void CIMOperationResponseEncoder::encodeGetPropertyResponse( |
CIMGetPropertyResponseMessage* response) | CIMGetPropertyResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
|
"CIMOperationResponseEncoder::encodeGetPropertyResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "GetProperty"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
XmlWriter::appendValueElement(body, response->value); | XmlWriter::appendValueElement(body, response->value); |
|
sendResponse(response, "GetProperty", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("GetProperty"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeSetPropertyResponse( | void CIMOperationResponseEncoder::encodeSetPropertyResponse( |
CIMSetPropertyResponseMessage* response) | CIMSetPropertyResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
sendResponse(response, "SetProperty", true); |
"CIMOperationResponseEncoder::encodeSetPropertyResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "SetProperty"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("SetProperty"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeSetQualifierResponse( | void CIMOperationResponseEncoder::encodeSetQualifierResponse( |
CIMSetQualifierResponseMessage* response) | CIMSetQualifierResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
sendResponse(response, "SetQualifier", true); |
"encodeSetQualifierResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "SetQualifier"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("SetQualifier"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeGetQualifierResponse( | void CIMOperationResponseEncoder::encodeGetQualifierResponse( |
CIMGetQualifierResponseMessage* response) | CIMGetQualifierResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeGetQualifierResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "GetQualifier"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
XmlWriter::appendQualifierDeclElement(body, response->cimQualifierDecl); | XmlWriter::appendQualifierDeclElement(body, response->cimQualifierDecl); |
|
sendResponse(response, "GetQualifier", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("GetQualifier"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeEnumerateQualifiersResponse( | void CIMOperationResponseEncoder::encodeEnumerateQualifiersResponse( |
CIMEnumerateQualifiersResponseMessage* response) | CIMEnumerateQualifiersResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeEnumerateQualifierResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "EnumerateQualifiers"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->qualifierDeclarations.size(); i++) |
for (Uint32 i = 0, n = response->qualifierDeclarations.size(); i < n;i++) |
XmlWriter::appendQualifierDeclElement(body, response->qualifierDeclarations[i]); | XmlWriter::appendQualifierDeclElement(body, response->qualifierDeclarations[i]); |
|
sendResponse(response, "EnumerateQualifiers", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("EnumerateQualifiers"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeDeleteQualifierResponse( | void CIMOperationResponseEncoder::encodeDeleteQualifierResponse( |
CIMDeleteQualifierResponseMessage* response) | CIMDeleteQualifierResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
sendResponse(response, "DeleteQualifier", true); |
"encodeDeleteQualifierResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "DeleteQualifier"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; |
|
|
|
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("DeleteQualifier"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeReferenceNamesResponse( | void CIMOperationResponseEncoder::encodeReferenceNamesResponse( |
CIMReferenceNamesResponseMessage* response) | CIMReferenceNamesResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeReferenceNamesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "ReferenceNames"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->objectNames.size(); i++) |
for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++) |
{ | { |
body << "<OBJECTPATH>\n"; | body << "<OBJECTPATH>\n"; |
XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false); |
XmlWriter::appendValueReferenceElement(body, response->objectNames[i], |
|
false); |
body << "</OBJECTPATH>\n"; | body << "</OBJECTPATH>\n"; |
} | } |
|
sendResponse(response, "ReferenceNames", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("ReferenceNames"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeReferencesResponse( | void CIMOperationResponseEncoder::encodeReferencesResponse( |
CIMReferencesResponseMessage* response) | CIMReferencesResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
|
"CIMOperationResponseEncoder::encodeReferencesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "References"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->cimObjects.size(); i++) |
for (Uint32 i = 0, n = response->cimObjects.size(); i < n;i++) |
XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]); | XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]); |
|
sendResponse(response, "References", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("References"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeAssociatorNamesResponse( | void CIMOperationResponseEncoder::encodeAssociatorNamesResponse( |
CIMAssociatorNamesResponseMessage* response) | CIMAssociatorNamesResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeAssociatorNamesResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "AssociatorNames"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->objectNames.size(); i++) |
for (Uint32 i = 0, n = response->objectNames.size(); i < n; i++) |
{ | { |
body << "<OBJECTPATH>\n"; | body << "<OBJECTPATH>\n"; |
XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false); | XmlWriter::appendValueReferenceElement(body, response->objectNames[i], false); |
body << "</OBJECTPATH>\n"; | body << "</OBJECTPATH>\n"; |
} | } |
|
sendResponse(response, "AssociatorNames", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("AssociatorNames"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeAssociatorsResponse( | void CIMOperationResponseEncoder::encodeAssociatorsResponse( |
CIMAssociatorsResponseMessage* response) | CIMAssociatorsResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
|
"CIMOperationResponseEncoder::encodeAssociatorsResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "Associators"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->cimObjects.size(); i++) |
for (Uint32 i = 0, n = response->cimObjects.size(); i < n; i++) |
XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]); | XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]); |
|
sendResponse(response, "Associators", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("Associators"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeExecQueryResponse( | void CIMOperationResponseEncoder::encodeExecQueryResponse( |
CIMExecQueryResponseMessage* response) | CIMExecQueryResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, |
|
"CIMOperationResponseEncoder::encodeExecQueryResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendIMethodError(response, "ExecQuery"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
for (Uint32 i = 0; i < response->cimObjects.size(); i++) | for (Uint32 i = 0; i < response->cimObjects.size(); i++) |
XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]); | XmlWriter::appendValueObjectWithPathElement(body, response->cimObjects[i]); |
|
sendResponse(response, "ExecQuery", true, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleIMethodRspMessage( |
|
CIMName ("ExecQuery"), response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, |
|
response->totServerTime); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
void CIMOperationResponseEncoder::encodeInvokeMethodResponse( | void CIMOperationResponseEncoder::encodeInvokeMethodResponse( |
CIMInvokeMethodResponseMessage* response) | CIMInvokeMethodResponseMessage* response) |
{ | { |
PEG_METHOD_ENTER(TRC_DISPATCHER, "CIMOperationResponseEncoder::" |
|
"encodeInvokeMethodResponse()"); |
|
|
|
if (response->cimException.getCode() != CIM_ERR_SUCCESS) |
|
{ |
|
STAT_SERVEREND_ERROR |
|
|
|
sendMethodError(response, response->methodName); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
Array<Sint8> body; | Array<Sint8> body; |
| |
// ATTN-RK-P3-20020219: Who's job is it to make sure the return value is | // ATTN-RK-P3-20020219: Who's job is it to make sure the return value is |
// not an array? | // not an array? |
// Only add the return value if it is not null | // Only add the return value if it is not null |
if (!response->retValue.isNull()) |
|
|
if (response->cimException.getCode() == CIM_ERR_SUCCESS) |
{ | { |
|
if (!response->retValue.isNull()) |
XmlWriter::appendReturnValueElement(body, response->retValue); | XmlWriter::appendReturnValueElement(body, response->retValue); |
} |
|
| |
for (Uint32 i=0; i < response->outParameters.size(); i++) |
for (Uint32 i=0, n = response->outParameters.size(); i < n; i++) |
{ |
|
XmlWriter::appendParamValueElement(body, response->outParameters[i]); | XmlWriter::appendParamValueElement(body, response->outParameters[i]); |
} | } |
|
sendResponse(response, response->methodName.getString(), false, &body); |
STAT_SERVEREND |
|
|
|
Array<Sint8> message = XmlWriter::formatSimpleMethodRspMessage( |
|
response->methodName, response->messageId, |
|
response->getHttpMethod(), |
|
((ContentLanguageListContainer)response->operationContext.get(ContentLanguageListContainer::NAME)).getLanguages(), |
|
body, response->totServerTime, |
|
response->isFirst(), response->isComplete()); |
|
|
|
STAT_BYTESSENT |
|
|
|
sendResponse(response->queueIds.top(), message, response->isComplete(), response->getIndex()); |
|
PEG_METHOD_EXIT(); |
|
} | } |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |