version 1.12.2.2, 2011/01/16 21:11:31
|
version 1.12.2.4, 2012/02/15 17:47:06
|
|
|
OP_DeleteQualifier, | OP_DeleteQualifier, |
OP_EnumerateQualifiers, | OP_EnumerateQualifiers, |
OP_InvokeMethod, | OP_InvokeMethod, |
|
// EXP_PULL_BEGIN |
OP_OpenEnumerateInstances, | OP_OpenEnumerateInstances, |
OP_OpenEnumerateInstancePaths, | OP_OpenEnumerateInstancePaths, |
OP_OpenReferenceInstances, | OP_OpenReferenceInstances, |
|
|
OP_PullInstancePaths, | OP_PullInstancePaths, |
OP_CloseEnumeration, | OP_CloseEnumeration, |
OP_EnumerationCount, | OP_EnumerationCount, |
|
// EXP_PULL_END |
OP_Count | OP_Count |
}; | }; |
| |
|
|
return OP_CreateInstance; | return OP_CreateInstance; |
if (_EQUAL(s, "CreateClass")) | if (_EQUAL(s, "CreateClass")) |
return OP_CreateClass; | return OP_CreateClass; |
|
//EXP_PULL_BEGIN |
if (_EQUAL(s, "CloseEnumeration")) | if (_EQUAL(s, "CloseEnumeration")) |
return OP_CloseEnumeration; | return OP_CloseEnumeration; |
|
// EXP_PULL_END |
break; | break; |
case 'D': | case 'D': |
if (_EQUAL(s, "DeleteInstance")) | if (_EQUAL(s, "DeleteInstance")) |
|
|
if (_EQUAL(s, "ModifyClass")) | if (_EQUAL(s, "ModifyClass")) |
return OP_ModifyClass; | return OP_ModifyClass; |
break; | break; |
|
// EXP_PULL_BEGIN |
case 'O': | case 'O': |
if (_EQUAL(s, "OpenEnumerateInstances")) | if (_EQUAL(s, "OpenEnumerateInstances")) |
return OP_OpenEnumerateInstances; | return OP_OpenEnumerateInstances; |
|
|
if (_EQUAL(s, "PullInstancePaths")) | if (_EQUAL(s, "PullInstancePaths")) |
return OP_PullInstancePaths; | return OP_PullInstancePaths; |
break; | break; |
|
// EXP_PULL_END |
case 'R': | case 'R': |
if (_EQUAL(s, "References")) | if (_EQUAL(s, "References")) |
return OP_References; | return OP_References; |
|
|
static void _encodeEnumerateInstancesResponseBody( | static void _encodeEnumerateInstancesResponseBody( |
CIMBuffer& out, | CIMBuffer& out, |
CIMResponseData& data, | CIMResponseData& data, |
CIMName& name) |
CIMName& name, |
|
bool isFirst) |
{ | { |
/* See ../Server/CIMOperationResponseEncoder.cpp */ | /* See ../Server/CIMOperationResponseEncoder.cpp */ |
| |
static const CIMName NAME("EnumerateInstances"); | static const CIMName NAME("EnumerateInstances"); |
name = NAME; | name = NAME; |
| |
|
// Only write the property list on the first provider response |
|
if (isFirst) |
|
{ |
|
// [PROPERTY-LIST] |
|
out.putPropertyList(data.getPropertyList()); |
|
} |
data.encodeBinaryResponse(out); | data.encodeBinaryResponse(out); |
} | } |
| |
|
|
// to the binary data and pass this for example to the JNI implementation | // to the binary data and pass this for example to the JNI implementation |
// of the JSR48 CIM Client for Java. | // of the JSR48 CIM Client for Java. |
CIMResponseData& responseData = msg->getResponseData(); | CIMResponseData& responseData = msg->getResponseData(); |
|
|
|
// [PROPERTY-LIST] |
|
CIMPropertyList propertyList; |
|
if (!in.getPropertyList(propertyList)) |
|
{ |
|
return 0; |
|
} |
|
responseData.setPropertyList(propertyList); |
|
|
responseData.setRemainingBinaryData(in); | responseData.setRemainingBinaryData(in); |
| |
msg->binaryRequest=true; | msg->binaryRequest=true; |
|
|
msg->binaryRequest = true; | msg->binaryRequest = true; |
return msg; | return msg; |
} | } |
// KS_PULL_BEGIN |
// EXP_PULL_BEGIN |
//============================================================================== | //============================================================================== |
// | // |
// OpenEnumerateInstances | // OpenEnumerateInstances |
|
|
Boolean continueOnError = flags & CONTINUE_ON_ERROR; | Boolean continueOnError = flags & CONTINUE_ON_ERROR; |
| |
// [NAMESPACE] | // [NAMESPACE] |
|
|
CIMNamespaceName nameSpace; | CIMNamespaceName nameSpace; |
if (!in.getNamespaceName(nameSpace)) | if (!in.getNamespaceName(nameSpace)) |
return 0; | return 0; |
|
|
| |
return request.release(); | return request.release(); |
} | } |
|
|
// For the pull Response messages the interface is the message and the, | // For the pull Response messages the interface is the message and the, |
// not just the responseData. | // not just the responseData. |
static void _encodeOpenEnumerateInstancesResponseBody( | static void _encodeOpenEnumerateInstancesResponseBody( |
|
|
msg->binaryRequest=true; | msg->binaryRequest=true; |
return msg; | return msg; |
} | } |
|
|
//============================================================================== | //============================================================================== |
// | // |
// OpenEnumerateInstancesPaths | // OpenEnumerateInstancesPaths |
|
|
Uint32 flags, | Uint32 flags, |
const String& messageId) | const String& messageId) |
{ | { |
/* See ../Server/CIMOperationRequestDecoder.cpp */ |
/* See ../ |
|
Server/CIMOperationRequestDecoder.cpp */ |
| |
STAT_GETSTARTTIME | STAT_GETSTARTTIME |
| |
|
|
return msg; | return msg; |
} | } |
| |
// KS_PULL_END |
// EXP_PULL_END |
| |
| |
//============================================================================== | //============================================================================== |
|
|
//============================================================================== | //============================================================================== |
| |
CIMOperationRequestMessage* BinaryCodec::decodeRequest( | CIMOperationRequestMessage* BinaryCodec::decodeRequest( |
const Buffer& in, |
CIMBuffer& in, |
Uint32 queueId, | Uint32 queueId, |
Uint32 returnQueueId) | Uint32 returnQueueId) |
{ | { |
CIMBuffer buf((char*)in.getData(), in.size()); |
|
CIMBufferReleaser buf_(buf); |
|
| |
// Turn on validation: | // Turn on validation: |
#if defined(ENABLE_VALIDATION) | #if defined(ENABLE_VALIDATION) |
buf.setValidate(true); |
in.setValidate(true); |
#endif | #endif |
| |
Uint32 flags; | Uint32 flags; |
String messageId; | String messageId; |
Operation operation; | Operation operation; |
| |
if (!_getHeader(buf, flags, messageId, operation)) |
|
|
if (!_getHeader(in, flags, messageId, operation)) |
{ | { |
return 0; | return 0; |
} | } |
|
|
{ | { |
case OP_EnumerateInstances: | case OP_EnumerateInstances: |
return _decodeEnumerateInstancesRequest( | return _decodeEnumerateInstancesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_EnumerateInstanceNames: | case OP_EnumerateInstanceNames: |
return _decodeEnumerateInstanceNamesRequest( | return _decodeEnumerateInstanceNamesRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_GetInstance: | case OP_GetInstance: |
return _decodeGetInstanceRequest( | return _decodeGetInstanceRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_CreateInstance: | case OP_CreateInstance: |
return _decodeCreateInstanceRequest( | return _decodeCreateInstanceRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_ModifyInstance: | case OP_ModifyInstance: |
return _decodeModifyInstanceRequest( | return _decodeModifyInstanceRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_DeleteInstance: | case OP_DeleteInstance: |
return _decodeDeleteInstanceRequest( | return _decodeDeleteInstanceRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_Associators: | case OP_Associators: |
return _decodeAssociatorsRequest( | return _decodeAssociatorsRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_AssociatorNames: | case OP_AssociatorNames: |
return _decodeAssociatorNamesRequest( | return _decodeAssociatorNamesRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_References: | case OP_References: |
return _decodeReferencesRequest( | return _decodeReferencesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_ReferenceNames: | case OP_ReferenceNames: |
return _decodeReferenceNamesRequest( | return _decodeReferenceNamesRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_GetClass: | case OP_GetClass: |
return _decodeGetClassRequest( | return _decodeGetClassRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_EnumerateClasses: | case OP_EnumerateClasses: |
return _decodeEnumerateClassesRequest( | return _decodeEnumerateClassesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_EnumerateClassNames: | case OP_EnumerateClassNames: |
return _decodeEnumerateClassNamesRequest( | return _decodeEnumerateClassNamesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
case OP_CreateClass: | case OP_CreateClass: |
return _decodeCreateClassRequest( | return _decodeCreateClassRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_DeleteClass: | case OP_DeleteClass: |
return _decodeDeleteClassRequest( | return _decodeDeleteClassRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_ModifyClass: | case OP_ModifyClass: |
return _decodeModifyClassRequest( | return _decodeModifyClassRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_SetQualifier: | case OP_SetQualifier: |
return _decodeSetQualifierRequest( | return _decodeSetQualifierRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_GetQualifier: | case OP_GetQualifier: |
return _decodeGetQualifierRequest( | return _decodeGetQualifierRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_DeleteQualifier: | case OP_DeleteQualifier: |
return _decodeDeleteQualifierRequest( | return _decodeDeleteQualifierRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_EnumerateQualifiers: | case OP_EnumerateQualifiers: |
return _decodeEnumerateQualifiersRequest( | return _decodeEnumerateQualifiersRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_GetProperty: | case OP_GetProperty: |
return _decodeGetPropertyRequest( | return _decodeGetPropertyRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_SetProperty: | case OP_SetProperty: |
return _decodeSetPropertyRequest( | return _decodeSetPropertyRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_InvokeMethod: | case OP_InvokeMethod: |
return _decodeInvokeMethodRequest( | return _decodeInvokeMethodRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
case OP_ExecQuery: | case OP_ExecQuery: |
return _decodeExecQueryRequest( | return _decodeExecQueryRequest( |
buf, queueId, returnQueueId, messageId); |
in, queueId, returnQueueId, messageId); |
|
//EXP_PULL_BEGIN |
case OP_OpenEnumerateInstances: | case OP_OpenEnumerateInstances: |
return _decodeOpenEnumerateInstancesRequest( | return _decodeOpenEnumerateInstancesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_OpenEnumerateInstancePaths: | case OP_OpenEnumerateInstancePaths: |
return _decodeOpenEnumerateInstancePathsRequest( | return _decodeOpenEnumerateInstancePathsRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_OpenReferenceInstances: | case OP_OpenReferenceInstances: |
return _decodeOpenReferenceInstancesRequest( | return _decodeOpenReferenceInstancesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_OpenReferenceInstancePaths: | case OP_OpenReferenceInstancePaths: |
return _decodeOpenReferenceInstancePathsRequest( | return _decodeOpenReferenceInstancePathsRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_OpenAssociatorInstances: | case OP_OpenAssociatorInstances: |
return _decodeOpenAssociatorInstancesRequest( | return _decodeOpenAssociatorInstancesRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_OpenAssociatorInstancePaths: | case OP_OpenAssociatorInstancePaths: |
return _decodeOpenAssociatorInstancePathsRequest( | return _decodeOpenAssociatorInstancePathsRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_PullInstancesWithPath: | case OP_PullInstancesWithPath: |
return _decodePullInstancesWithPathRequest( | return _decodePullInstancesWithPathRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_PullInstancePaths: | case OP_PullInstancePaths: |
return _decodePullInstancePathsRequest( | return _decodePullInstancePathsRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_CloseEnumeration: | case OP_CloseEnumeration: |
return _decodeCloseEnumerationRequest( | return _decodeCloseEnumerationRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
case OP_EnumerationCount: | case OP_EnumerationCount: |
return _decodeEnumerationCountRequest( | return _decodeEnumerationCountRequest( |
buf, queueId, returnQueueId, flags, messageId); |
in, queueId, returnQueueId, flags, messageId); |
break; | break; |
|
//EXP_PULL_END |
default: | default: |
// Unexpected message type | // Unexpected message type |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
|
|
CIMResponseMessage* BinaryCodec::decodeResponse( | CIMResponseMessage* BinaryCodec::decodeResponse( |
CIMBuffer& buf) | CIMBuffer& buf) |
{ | { |
// Turn on validation: |
// Turn on validation: This is a debugging tool |
#if defined(ENABLE_VALIDATION) | #if defined(ENABLE_VALIDATION) |
buf.setValidate(true); | buf.setValidate(true); |
#endif | #endif |
|
|
Uint32 flags; | Uint32 flags; |
String messageId; | String messageId; |
Operation operation; | Operation operation; |
|
|
case OP_ExecQuery: | case OP_ExecQuery: |
msg = _decodeExecQueryResponse(buf, messageId); | msg = _decodeExecQueryResponse(buf, messageId); |
break; | break; |
|
//EXP_PULL_BEGIN |
case OP_OpenEnumerateInstances: | case OP_OpenEnumerateInstances: |
msg = _decodeOpenEnumerateInstancesResponse(buf, messageId); | msg = _decodeOpenEnumerateInstancesResponse(buf, messageId); |
break; | break; |
|
|
case OP_CloseEnumeration: | case OP_CloseEnumeration: |
msg = _decodeCloseEnumerationResponse(buf, messageId); | msg = _decodeCloseEnumerationResponse(buf, messageId); |
break; | break; |
|
//EXP_PULL_END |
default: | default: |
// Unexpected message type | // Unexpected message type |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
|
|
} | } |
| |
if (!msg) | if (!msg) |
throw CIMException(CIM_ERR_FAILED, |
throw CIMException(CIM_ERR_FAILED, "Received corrupted binary message"); |
"Received corrupted binary message"); |
|
| |
return msg; | return msg; |
} | } |
|
|
Boolean isLast) | Boolean isLast) |
{ | { |
Buffer out; | Buffer out; |
|
|
if (isFirst == true) | if (isFirst == true) |
{ | { |
// Write HTTP header: | // Write HTTP header: |
XmlWriter::appendMethodResponseHeader(out, httpMethod, | XmlWriter::appendMethodResponseHeader(out, httpMethod, |
httpContentLanguages, 0, serverResponseTime, true); | httpContentLanguages, 0, serverResponseTime, true); |
| |
|
for (size_t i=out.size(), k=CIMBuffer::round(i); i<k;i++) |
|
{ |
|
out.append('\0'); |
|
} |
// Binary message header: | // Binary message header: |
CIMBuffer cb(128); | CIMBuffer cb(128); |
_putHeader(cb, 0, messageId, _NameToOp(iMethodName)); | _putHeader(cb, 0, messageId, _NameToOp(iMethodName)); |
|
|
(CIMExecQueryRequestMessage*)msg, name); | (CIMExecQueryRequestMessage*)msg, name); |
break; | break; |
} | } |
|
|
|
//EXP_PULL_BEGIN |
case CIM_OPEN_ENUMERATE_INSTANCES_REQUEST_MESSAGE: | case CIM_OPEN_ENUMERATE_INSTANCES_REQUEST_MESSAGE: |
{ | { |
_encodeOpenEnumerateInstancesRequest(buf, | _encodeOpenEnumerateInstancesRequest(buf, |
|
|
(CIMEnumerationCountRequestMessage*)msg, name); | (CIMEnumerationCountRequestMessage*)msg, name); |
break; | break; |
} | } |
|
//EXP_PULL_END |
| |
default: | default: |
// Unexpected message type | // Unexpected message type |
|
|
true, /* binaryRequest */ | true, /* binaryRequest */ |
binaryResponse); | binaryResponse); |
| |
|
// Need to pad the Buffer to the 64bit border since CIMBuffer is 64bit |
|
// aligned, but Buffer only 8bit |
|
Uint32 extraAlignBytes = CIMBuffer::round(out.size()) - out.size(); |
|
for (Uint32 i=0; i < extraAlignBytes;i++) |
|
{ |
|
out.append('\0'); |
|
} |
|
// Need fix-up Content-length value... |
|
char * contentLengthValueStart = |
|
(char*) strstr(out.getData(), "content-length"); |
|
contentLengthValueStart += sizeof("content-length: ")-1; |
|
// using sprintf to stay equal to the macro OUTPUT_CONTENTLENGTH definition |
|
// defined in XMLGenerator.h |
|
char contentLengthP[11]; |
|
sprintf(contentLengthP,"%.10u", (unsigned int)buf.size()+extraAlignBytes); |
|
memcpy(contentLengthValueStart,contentLengthP,10); |
|
|
out.append(buf.getData(), buf.size()); | out.append(buf.getData(), buf.size()); |
| |
return true; | return true; |
|
|
_encodeEnumerateInstancesResponseBody( | _encodeEnumerateInstancesResponseBody( |
buf, | buf, |
((CIMEnumerateInstancesResponseMessage*)msg)->getResponseData(), | ((CIMEnumerateInstancesResponseMessage*)msg)->getResponseData(), |
name); |
name, |
|
(msg->getIndex() == 0)); |
break; | break; |
} | } |
| |
|
|
| |
case CIM_EXEC_QUERY_RESPONSE_MESSAGE: | case CIM_EXEC_QUERY_RESPONSE_MESSAGE: |
{ | { |
_encodeExecQueryResponseBody(buf, |
_encodeExecQueryResponseBody( |
|
buf, |
((CIMExecQueryResponseMessage*)msg)->getResponseData(), | ((CIMExecQueryResponseMessage*)msg)->getResponseData(), |
name); | name); |
break; | break; |
} | } |
| |
|
//EXP_PULL_BEGIN |
case CIM_OPEN_ENUMERATE_INSTANCES_RESPONSE_MESSAGE: | case CIM_OPEN_ENUMERATE_INSTANCES_RESPONSE_MESSAGE: |
{ | { |
_encodeOpenEnumerateInstancesResponseBody(buf, | _encodeOpenEnumerateInstancesResponseBody(buf, |
|
|
name); | name); |
break; | break; |
} | } |
|
//EXP_PULL_END |
| |
default: | default: |
// Unexpected message type | // Unexpected message type |