version 1.8, 2009/05/27 05:56:25
|
version 1.11.2.2, 2012/02/15 17:47:06
|
|
|
#include <Pegasus/Common/System.h> | #include <Pegasus/Common/System.h> |
| |
#include "CIMBinMsgDeserializer.h" | #include "CIMBinMsgDeserializer.h" |
#include "BinaryCodec.h" |
|
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
case CIM_INDICATION_SERVICE_DISABLED_REQUEST_MESSAGE: | case CIM_INDICATION_SERVICE_DISABLED_REQUEST_MESSAGE: |
msg = _getIndicationServiceDisabledRequestMessage(in); | msg = _getIndicationServiceDisabledRequestMessage(in); |
break; | break; |
|
case PROVAGT_GET_SCMOCLASS_REQUEST_MESSAGE: |
|
msg = _getProvAgtGetScmoClassRequestMessage(in); |
|
break; |
|
|
| |
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
|
|
msg = _getEnumerateInstanceNamesResponseMessage(in); | msg = _getEnumerateInstanceNamesResponseMessage(in); |
break; | break; |
case CIM_EXEC_QUERY_RESPONSE_MESSAGE: | case CIM_EXEC_QUERY_RESPONSE_MESSAGE: |
msg = _getExecQueryResponseMessage(in); |
msg = _getExecQueryResponseMessage(in, binaryResponse); |
break; | break; |
case CIM_GET_PROPERTY_RESPONSE_MESSAGE: | case CIM_GET_PROPERTY_RESPONSE_MESSAGE: |
msg = _getGetPropertyResponseMessage(in); | msg = _getGetPropertyResponseMessage(in); |
|
|
msg = _getSetPropertyResponseMessage(in); | msg = _getSetPropertyResponseMessage(in); |
break; | break; |
case CIM_ASSOCIATORS_RESPONSE_MESSAGE: | case CIM_ASSOCIATORS_RESPONSE_MESSAGE: |
msg = _getAssociatorsResponseMessage(in); |
msg = _getAssociatorsResponseMessage(in, binaryResponse); |
break; | break; |
case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE: | case CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE: |
msg = _getAssociatorNamesResponseMessage(in); | msg = _getAssociatorNamesResponseMessage(in); |
break; | break; |
case CIM_REFERENCES_RESPONSE_MESSAGE: | case CIM_REFERENCES_RESPONSE_MESSAGE: |
msg = _getReferencesResponseMessage(in); |
msg = _getReferencesResponseMessage(in, binaryResponse); |
break; | break; |
case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE: | case CIM_REFERENCE_NAMES_RESPONSE_MESSAGE: |
msg = _getReferenceNamesResponseMessage(in); | msg = _getReferenceNamesResponseMessage(in); |
|
|
case CIM_INDICATION_SERVICE_DISABLED_RESPONSE_MESSAGE: | case CIM_INDICATION_SERVICE_DISABLED_RESPONSE_MESSAGE: |
msg = _getIndicationServiceDisabledResponseMessage(in); | msg = _getIndicationServiceDisabledResponseMessage(in); |
break; | break; |
|
case PROVAGT_GET_SCMOCLASS_RESPONSE_MESSAGE: |
|
msg = _getProvAgtGetScmoClassResponseMessage(in); |
|
break; |
| |
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
|
|
CIMInstance indicationInstance; | CIMInstance indicationInstance; |
Array<CIMObjectPath> subscriptionInstanceNames; | Array<CIMObjectPath> subscriptionInstanceNames; |
CIMInstance provider; | CIMInstance provider; |
|
Uint32 timeoutMilliSec; |
| |
if (!_getNamespaceName(in, nameSpace)) | if (!_getNamespaceName(in, nameSpace)) |
return false; | return false; |
|
|
if (!_getInstance(in, provider)) | if (!_getInstance(in, provider)) |
return false; | return false; |
| |
|
if (!in.getUint32(timeoutMilliSec)) |
|
return false; |
|
|
return new CIMProcessIndicationRequestMessage( | return new CIMProcessIndicationRequestMessage( |
String::EMPTY, | String::EMPTY, |
nameSpace, | nameSpace, |
indicationInstance, | indicationInstance, |
subscriptionInstanceNames, | subscriptionInstanceNames, |
provider, | provider, |
QueueIdStack()); |
QueueIdStack(), |
|
timeoutMilliSec); |
} | } |
| |
CIMDisableModuleRequestMessage* | CIMDisableModuleRequestMessage* |
|
|
CIMBinMsgDeserializer::_getStopAllProvidersRequestMessage( | CIMBinMsgDeserializer::_getStopAllProvidersRequestMessage( |
CIMBuffer& in) | CIMBuffer& in) |
{ | { |
|
Uint32 shutdownTimeout; |
|
|
|
if (!in.getUint32(shutdownTimeout)) |
|
return false; |
|
|
return new CIMStopAllProvidersRequestMessage( | return new CIMStopAllProvidersRequestMessage( |
String::EMPTY, | String::EMPTY, |
QueueIdStack()); |
QueueIdStack(), |
|
shutdownTimeout); |
} | } |
| |
CIMInitializeProviderAgentRequestMessage* | CIMInitializeProviderAgentRequestMessage* |
|
|
QueueIdStack()); | QueueIdStack()); |
} | } |
| |
static Boolean _resolveXMLInstance( |
ProvAgtGetScmoClassRequestMessage* |
CIMGetInstanceResponseMessage* msg, |
CIMBinMsgDeserializer::_getProvAgtGetScmoClassRequestMessage( |
CIMInstance& cimInstance) |
CIMBuffer& in) |
{ |
|
// Deserialize instance: |
|
{ | { |
XmlParser parser((char*)msg->instanceData.getData()); |
CIMName className; |
|
CIMNamespaceName nsName; |
|
String messageID; |
| |
if (!XmlReader::getInstanceElement(parser, cimInstance)) |
if (!in.getString(messageID)) |
{ |
|
cimInstance = CIMInstance(); |
|
return false; | return false; |
} |
|
} |
|
|
|
// Deserialize path: |
|
{ |
|
XmlParser parser((char*)msg->referenceData.getData()); |
|
CIMObjectPath cimObjectPath; |
|
|
|
if (XmlReader::getValueReferenceElement(parser, cimObjectPath)) |
|
{ |
|
if (msg->hostData.size()) |
|
cimObjectPath.setHost(msg->hostData); |
|
|
|
if (!msg->nameSpaceData.isNull()) |
|
cimObjectPath.setNameSpace(msg->nameSpaceData); |
|
|
|
cimInstance.setPath(cimObjectPath); |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
| |
static Boolean _resolveXMLInstances( |
if (!in.getNamespaceName(nsName)) |
CIMEnumerateInstancesResponseMessage* msg, |
|
Array<CIMInstance>& instances) |
|
{ |
|
instances.clear(); |
|
|
|
for (Uint32 i = 0; i < msg->instancesData.size(); i++) |
|
{ |
|
CIMInstance cimInstance; |
|
|
|
// Deserialize instance: |
|
{ |
|
XmlParser parser((char*)msg->instancesData[i].getData()); |
|
|
|
if (!XmlReader::getInstanceElement(parser, cimInstance)) |
|
{ |
|
cimInstance = CIMInstance(); |
|
} |
|
} |
|
|
|
// Deserialize path: |
|
{ |
|
XmlParser parser((char*)msg->referencesData[i].getData()); |
|
CIMObjectPath cimObjectPath; |
|
|
|
if (XmlReader::getInstanceNameElement(parser, cimObjectPath)) |
|
{ |
|
if (!msg->nameSpacesData[i].isNull()) |
|
cimObjectPath.setNameSpace(msg->nameSpacesData[i]); |
|
|
|
if (msg->hostsData[i].size()) |
|
cimObjectPath.setHost(msg->hostsData[i]); |
|
|
|
cimInstance.setPath(cimObjectPath); |
|
} |
|
} |
|
|
|
instances.append(cimInstance); |
|
} |
|
|
|
return true; |
|
} |
|
|
|
static Boolean _resolveBinaryInstance( |
|
CIMGetInstanceResponseMessage* msg, |
|
CIMInstance& instance) |
|
{ |
|
CIMBuffer in((char*)msg->binaryData.getData(), msg->binaryData.size()); |
|
|
|
if (!in.getInstance(instance)) |
|
{ |
|
instance = CIMInstance(); |
|
in.release(); |
|
return false; | return false; |
} |
|
|
|
in.release(); |
|
return true; |
|
} |
|
| |
static Boolean _resolveBinaryInstances( |
if (!in.getName(className)) |
CIMEnumerateInstancesResponseMessage* msg, |
|
Array<CIMInstance>& instances) |
|
{ |
|
instances.clear(); |
|
|
|
CIMBuffer in((char*)msg->binaryData.getData(), msg->binaryData.size()); |
|
|
|
if (!in.getInstanceA(instances)) |
|
{ |
|
in.release(); |
|
return false; | return false; |
} |
|
| |
in.release(); |
return new ProvAgtGetScmoClassRequestMessage( |
return true; |
messageID, |
|
nsName, |
|
className, |
|
QueueIdStack()); |
} | } |
| |
CIMGetInstanceResponseMessage* | CIMGetInstanceResponseMessage* |
|
|
CIMBuffer& in, | CIMBuffer& in, |
bool binaryResponse) | bool binaryResponse) |
{ | { |
if (binaryResponse) |
|
{ |
|
CIMGetInstanceResponseMessage* msg = new CIMGetInstanceResponseMessage( | CIMGetInstanceResponseMessage* msg = new CIMGetInstanceResponseMessage( |
String::EMPTY, | String::EMPTY, |
CIMException(), | CIMException(), |
QueueIdStack()); | QueueIdStack()); |
| |
if (!in.getUint8A(msg->binaryData)) |
CIMResponseData& responseData = msg->getResponseData(); |
return 0; |
|
|
|
msg->resolveCallback = _resolveBinaryInstance; |
|
msg->binaryEncoding = true; |
|
| |
return msg; |
if (binaryResponse) |
|
{ |
|
if (!responseData.setBinary(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
} | } |
else | else |
{ | { |
Array<Sint8> instanceData; |
if (!responseData.setXml(in)) |
Array<Sint8> referenceData; |
{ |
String hostData; |
delete(msg); |
CIMNamespaceName nameSpaceData; |
return 0; |
|
} |
if (!in.getSint8A(instanceData)) |
} |
return NULL; |
|
|
|
if (!in.getSint8A(referenceData)) |
|
return NULL; |
|
|
|
if (!in.getString(hostData)) |
|
return NULL; |
|
|
|
if (!in.getNamespaceName(nameSpaceData)) |
|
return NULL; |
|
|
|
CIMGetInstanceResponseMessage* msg = new CIMGetInstanceResponseMessage( |
|
String::EMPTY, |
|
CIMException(), |
|
QueueIdStack()); |
|
|
|
msg->resolveCallback = _resolveXMLInstance; |
|
msg->instanceData = instanceData; |
|
msg->referenceData = referenceData; |
|
msg->hostData = hostData; |
|
msg->nameSpaceData = nameSpaceData; |
|
| |
return msg; | return msg; |
} | } |
} |
|
| |
CIMDeleteInstanceResponseMessage* | CIMDeleteInstanceResponseMessage* |
CIMBinMsgDeserializer::_getDeleteInstanceResponseMessage( | CIMBinMsgDeserializer::_getDeleteInstanceResponseMessage( |
|
|
CIMBuffer& in, | CIMBuffer& in, |
bool binaryResponse) | bool binaryResponse) |
{ | { |
if (binaryResponse) |
|
{ |
|
// Inject data into message so that the instances can be deserialized |
|
// on demand later (hopefully never; hopefully it can be written out on |
|
// the wire intact). |
|
|
|
CIMEnumerateInstancesResponseMessage* msg; | CIMEnumerateInstancesResponseMessage* msg; |
| |
msg = new CIMEnumerateInstancesResponseMessage(String::EMPTY, | msg = new CIMEnumerateInstancesResponseMessage(String::EMPTY, |
CIMException(), QueueIdStack()); | CIMException(), QueueIdStack()); |
| |
if (!in.getUint8A(msg->binaryData)) |
CIMResponseData& responseData = msg->getResponseData(); |
return 0; |
|
| |
msg->resolveCallback = _resolveBinaryInstances; |
if (binaryResponse) |
msg->binaryEncoding = true; |
{ |
|
if (!responseData.setBinary(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
| |
return msg; | return msg; |
} | } |
else | else |
{ | { |
Uint32 count; |
if (!responseData.setXml(in)) |
|
|
if (!in.getUint32(count)) |
|
return 0; |
|
|
|
Array<ArraySint8> instancesData; |
|
Array<ArraySint8> referencesData; |
|
Array<String> hostsData; |
|
Array<CIMNamespaceName> nameSpacesData; |
|
|
|
for (Uint32 i = 0; i < count; i++) |
|
{ | { |
Array<Sint8> inst; |
delete(msg); |
Array<Sint8> ref; |
|
CIMNamespaceName ns; |
|
String host; |
|
|
|
if (!in.getSint8A(inst)) |
|
return 0; | return 0; |
|
|
if (!in.getSint8A(ref)) |
|
return 0; |
|
|
|
if (!in.getString(host)) |
|
return 0; |
|
|
|
if (!in.getNamespaceName(ns)) |
|
return 0; |
|
|
|
instancesData.append(inst); |
|
referencesData.append(ref); |
|
hostsData.append(host); |
|
nameSpacesData.append(ns); |
|
} | } |
| |
CIMEnumerateInstancesResponseMessage* msg; |
|
|
|
msg = new CIMEnumerateInstancesResponseMessage( |
|
String::EMPTY, |
|
CIMException(), |
|
QueueIdStack()); |
|
|
|
msg->resolveCallback = _resolveXMLInstances; |
|
msg->instancesData = instancesData; |
|
msg->referencesData = referencesData; |
|
msg->hostsData = hostsData; |
|
msg->nameSpacesData = nameSpacesData; |
|
|
|
return msg; | return msg; |
} | } |
} | } |
|
|
CIMBinMsgDeserializer::_getEnumerateInstanceNamesResponseMessage( | CIMBinMsgDeserializer::_getEnumerateInstanceNamesResponseMessage( |
CIMBuffer& in) | CIMBuffer& in) |
{ | { |
XmlEntry entry; |
CIMEnumerateInstanceNamesResponseMessage* msg; |
Array<CIMObjectPath> instanceNames; |
|
| |
if (!in.getObjectPathA(instanceNames)) |
msg = new CIMEnumerateInstanceNamesResponseMessage(String::EMPTY, |
return false; |
|
|
|
return new CIMEnumerateInstanceNamesResponseMessage( |
|
String::EMPTY, |
|
CIMException(), | CIMException(), |
QueueIdStack(), |
QueueIdStack()); |
instanceNames); |
|
|
CIMResponseData& responseData = msg->getResponseData(); |
|
|
|
if (!responseData.setBinary(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
|
|
return msg; |
} | } |
| |
CIMExecQueryResponseMessage* | CIMExecQueryResponseMessage* |
CIMBinMsgDeserializer::_getExecQueryResponseMessage( | CIMBinMsgDeserializer::_getExecQueryResponseMessage( |
CIMBuffer& in) |
CIMBuffer& in, |
|
bool binaryResponse) |
{ | { |
XmlEntry entry; |
CIMExecQueryResponseMessage* msg; |
Array<CIMObject> cimObjects; |
|
| |
if (!in.getObjectA(cimObjects)) |
msg = new CIMExecQueryResponseMessage(String::EMPTY, |
return false; |
CIMException(), QueueIdStack()); |
| |
return new CIMExecQueryResponseMessage( |
CIMResponseData& responseData = msg->getResponseData(); |
String::EMPTY, |
|
CIMException(), |
if (binaryResponse) |
QueueIdStack(), |
{ |
cimObjects); |
if (!responseData.setBinary(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
} |
|
else |
|
{ |
|
if (!responseData.setXml(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
} |
|
|
|
return msg; |
} | } |
| |
CIMAssociatorsResponseMessage* | CIMAssociatorsResponseMessage* |
CIMBinMsgDeserializer::_getAssociatorsResponseMessage( | CIMBinMsgDeserializer::_getAssociatorsResponseMessage( |
CIMBuffer& in) |
CIMBuffer& in, |
|
bool binaryResponse) |
{ | { |
XmlEntry entry; |
CIMAssociatorsResponseMessage* msg; |
Array<CIMObject> cimObjects; |
|
| |
if (!in.getObjectA(cimObjects)) |
msg = new CIMAssociatorsResponseMessage(String::EMPTY, |
return false; |
CIMException(), QueueIdStack()); |
| |
return new CIMAssociatorsResponseMessage( |
CIMResponseData& responseData = msg->getResponseData(); |
String::EMPTY, |
|
CIMException(), |
if (binaryResponse) |
QueueIdStack(), |
{ |
cimObjects); |
if (!responseData.setBinary(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
} |
|
else |
|
{ |
|
if (!responseData.setXml(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
} |
|
|
|
return msg; |
} | } |
| |
CIMAssociatorNamesResponseMessage* | CIMAssociatorNamesResponseMessage* |
CIMBinMsgDeserializer::_getAssociatorNamesResponseMessage( | CIMBinMsgDeserializer::_getAssociatorNamesResponseMessage( |
CIMBuffer& in) | CIMBuffer& in) |
{ | { |
XmlEntry entry; |
CIMAssociatorNamesResponseMessage* msg; |
Array<CIMObjectPath> objectNames; |
|
| |
if (!in.getObjectPathA(objectNames)) |
msg = new CIMAssociatorNamesResponseMessage(String::EMPTY, |
return false; |
CIMException(), QueueIdStack()); |
| |
return new CIMAssociatorNamesResponseMessage( |
CIMResponseData& responseData = msg->getResponseData(); |
String::EMPTY, |
|
CIMException(), |
if (!responseData.setBinary(in)) |
QueueIdStack(), |
{ |
objectNames); |
delete(msg); |
|
return 0; |
|
} |
|
|
|
return msg; |
} | } |
| |
CIMReferencesResponseMessage* | CIMReferencesResponseMessage* |
CIMBinMsgDeserializer::_getReferencesResponseMessage( | CIMBinMsgDeserializer::_getReferencesResponseMessage( |
CIMBuffer& in) |
CIMBuffer& in, |
|
bool binaryResponse) |
{ | { |
XmlEntry entry; |
CIMReferencesResponseMessage* msg; |
Array<CIMObject> cimObjects; |
|
| |
if (!in.getObjectA(cimObjects)) |
msg = new CIMReferencesResponseMessage(String::EMPTY, |
return false; |
CIMException(), QueueIdStack()); |
| |
return new CIMReferencesResponseMessage( |
CIMResponseData& responseData = msg->getResponseData(); |
String::EMPTY, |
|
CIMException(), |
if (binaryResponse) |
QueueIdStack(), |
{ |
cimObjects); |
if (!responseData.setBinary(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
} |
|
else |
|
{ |
|
if (!responseData.setXml(in)) |
|
{ |
|
delete(msg); |
|
return 0; |
|
} |
|
} |
|
|
|
return msg; |
} | } |
| |
CIMReferenceNamesResponseMessage* | CIMReferenceNamesResponseMessage* |
CIMBinMsgDeserializer::_getReferenceNamesResponseMessage( | CIMBinMsgDeserializer::_getReferenceNamesResponseMessage( |
CIMBuffer& in) | CIMBuffer& in) |
{ | { |
XmlEntry entry; |
CIMReferenceNamesResponseMessage* msg; |
Array<CIMObjectPath> objectNames; |
|
| |
if (!in.getObjectPathA(objectNames)) |
msg = new CIMReferenceNamesResponseMessage(String::EMPTY, |
return false; |
CIMException(), QueueIdStack()); |
| |
return new CIMReferenceNamesResponseMessage( |
CIMResponseData& responseData = msg->getResponseData(); |
String::EMPTY, |
|
CIMException(), |
if (!responseData.setBinary(in)) |
QueueIdStack(), |
{ |
objectNames); |
delete(msg); |
|
return 0; |
|
} |
|
|
|
return msg; |
} | } |
| |
CIMGetPropertyResponseMessage* | CIMGetPropertyResponseMessage* |
|
|
{ | { |
XmlEntry entry; | XmlEntry entry; |
CIMValue genericValue; | CIMValue genericValue; |
Uint16 genericUint16; |
|
Array<Uint16> operationalStatus; | Array<Uint16> operationalStatus; |
| |
if (!in.getUint16A(operationalStatus)) | if (!in.getUint16A(operationalStatus)) |
|
|
{ | { |
XmlEntry entry; | XmlEntry entry; |
CIMValue genericValue; | CIMValue genericValue; |
Uint16 genericUint16; |
|
Array<Uint16> operationalStatus; | Array<Uint16> operationalStatus; |
| |
if (!in.getUint16A(operationalStatus)) | if (!in.getUint16A(operationalStatus)) |
|
|
QueueIdStack()); | QueueIdStack()); |
} | } |
| |
|
ProvAgtGetScmoClassResponseMessage* |
|
CIMBinMsgDeserializer::_getProvAgtGetScmoClassResponseMessage( |
|
CIMBuffer& in) |
|
{ |
|
SCMOClass theClass("",""); |
|
String messageID; |
|
|
|
if (!in.getString(messageID)) |
|
return false; |
|
|
|
if (!in.getSCMOClass(theClass)) |
|
return false; |
|
|
|
return new ProvAgtGetScmoClassResponseMessage( |
|
messageID, |
|
CIMException(), |
|
QueueIdStack(), |
|
theClass); |
|
} |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |