version 1.3.2.2, 2009/09/03 13:54:05
|
version 1.9, 2012/08/08 08:27:59
|
|
|
#undef PEGASUS_ARRAY_T | #undef PEGASUS_ARRAY_T |
| |
| |
//----------------------------------------------------------------------------- |
class PEGASUS_COMMON_LINKAGE CIMResponseData |
// |
|
// CIMInstanceNamesResponseData |
|
// |
|
//----------------------------------------------------------------------------- |
|
|
|
class PEGASUS_COMMON_LINKAGE CIMInstanceNamesResponseData |
|
{ | { |
public: | public: |
| |
enum ResponseDataEncoding { | enum ResponseDataEncoding { |
RESP_ENC_CIM, |
RESP_ENC_CIM = 1, |
RESP_ENC_BINARY, |
RESP_ENC_BINARY = 2, |
RESP_ENC_XML, |
RESP_ENC_XML = 4, |
RESP_ENC_SCMO |
RESP_ENC_SCMO = 8 |
}; | }; |
| |
CIMInstanceNamesResponseData(): |
enum ResponseDataContent { |
_resolveCallback(0), |
RESP_INSTNAMES = 1, |
_encoding(RESP_ENC_CIM) |
RESP_INSTANCES = 2, |
|
RESP_INSTANCE = 3, |
|
RESP_OBJECTS = 4, |
|
RESP_OBJECTPATHS = 5 |
|
}; |
|
//includeClassOrigin & _includeQualifiers are set to true by default. |
|
//_propertyList is initialized to an empty propertylist to enable |
|
// sending all properties by default. |
|
CIMResponseData(ResponseDataContent content): |
|
_encoding(0),_dataType(content),_includeQualifiers(true), |
|
_includeClassOrigin(true),_propertyList(CIMPropertyList()) |
{ | { |
} | } |
| |
Array<CIMObjectPath>& getInstanceNames() |
CIMResponseData(const CIMResponseData & x): |
|
_encoding(x._encoding), |
|
_dataType(x._dataType), |
|
_referencesData(x._referencesData), |
|
_instanceData(x._instanceData), |
|
_hostsData(x._hostsData), |
|
_nameSpacesData(x._nameSpacesData), |
|
_binaryData(x._binaryData), |
|
_defaultNamespace(x._defaultNamespace), |
|
_defaultHostname(x._defaultHostname), |
|
_instanceNames(x._instanceNames), |
|
_instances(x._instances), |
|
_objects(x._objects), |
|
_scmoInstances(x._scmoInstances), |
|
_includeQualifiers(x._includeQualifiers), |
|
_includeClassOrigin(x._includeClassOrigin), |
|
_propertyList(x._propertyList) |
{ | { |
_resolve(); |
|
return _instanceNames; |
|
} | } |
| |
/*const Array<CIMConstObjectPath>& getInstanceNames() const |
~CIMResponseData() |
{ | { |
// Resolve the instances before returning them. The resolve step |
} |
// requires non-const access, but does not fundamentally change the |
|
// message contents. |
|
const_cast<CIMInstanceNamesResponseData*>(this)->_resolve(); |
|
| |
// The Array<CIMInstance> is masqueraded as an Array<CIMConstInstance> |
// C++ objects interface handling |
// for expedience, since the internal representations are the same. |
|
return *((Array<CIMConstObjectPath>*)(void*)&_instanceNames); |
// Instance Names handling |
}*/ |
Array<CIMObjectPath>& getInstanceNames(); |
| |
void setInstanceNames(const Array<CIMObjectPath>& x) | void setInstanceNames(const Array<CIMObjectPath>& x) |
{ | { |
_resolveCallback = 0; |
|
_instanceNames = x; | _instanceNames = x; |
|
_encoding |= RESP_ENC_CIM; |
} | } |
| |
void appendInstanceName(const CIMObjectPath& x) |
// Instance handling |
{ |
CIMInstance& getInstance(); |
_resolveCallback = 0; |
|
_instanceNames.append(x); |
|
} |
|
| |
void setSCMOInstanceNames(const Array<SCMOInstance>& x) |
void setInstance(const CIMInstance& x) |
{ | { |
_resolveCallback = _resolveSCMOInstanceNames; |
_instances.clear(); |
fprintf( |
_instances.append(x); |
stderr, |
_encoding |= RESP_ENC_CIM; |
"CIMResponseData::setSCMOInstanceNames(cb=%p)\n", |
|
_resolveCallback); |
|
_scmoInstanceNames = x; |
|
} | } |
| |
void appendSCMOInstanceName(const SCMOInstance& x) |
// Instances handling |
{ |
Array<CIMInstance>& getInstances(); |
_resolveCallback = _resolveSCMOInstanceNames; |
|
fprintf( |
|
stderr, |
|
"CIMResponseData::appendSCMOInstanceName(cb=%p)\n", |
|
_resolveCallback); |
|
_scmoInstanceNames.append(x); |
|
} |
|
| |
Array<Uint8>& getBinaryCimInstanceNames() |
void setInstances(const Array<CIMInstance>& x) |
{ | { |
return _binaryData; |
_instances=x; |
|
_encoding |= RESP_ENC_CIM; |
} | } |
|
void appendInstance(const CIMInstance& x) |
bool setBinaryCimInstanceNames(CIMBuffer& in, bool hasLen=true); |
|
bool setXmlCimInstanceNames(CIMBuffer& in); |
|
|
|
void encodeBinaryResponse(CIMBuffer& out); |
|
void encodeXmlResponse(Buffer& out); |
|
|
|
private: |
|
|
|
CIMInstanceNamesResponseData(const CIMInstanceNamesResponseData&); |
|
CIMInstanceNamesResponseData& operator=( |
|
const CIMInstanceNamesResponseData&); |
|
|
|
static Boolean _resolveXMLInstanceNames( |
|
CIMInstanceNamesResponseData* data, |
|
Array<CIMObjectPath>& instanceNames); |
|
|
|
static Boolean _resolveBinaryInstanceNames( |
|
CIMInstanceNamesResponseData* data, |
|
Array<CIMObjectPath>& instanceNames); |
|
|
|
static Boolean _resolveSCMOInstanceNames( |
|
CIMInstanceNamesResponseData* data, |
|
Array<CIMObjectPath>& instanceNames); |
|
|
|
Boolean (*_resolveCallback)( |
|
CIMInstanceNamesResponseData* data, |
|
Array<CIMObjectPath>& cimInstance); |
|
|
|
void _resolve() |
|
{ |
|
if (_resolveCallback) |
|
{ | { |
(*_resolveCallback)(this, _instanceNames); |
_instances.append(x); |
_resolveCallback = 0; |
_encoding |= RESP_ENC_CIM; |
} |
|
} | } |
| |
ResponseDataEncoding _encoding; |
// Objects handling |
|
Array<CIMObject>& getObjects(); |
// For XML encoding. |
void setObjects(const Array<CIMObject>& x) |
Array<ArraySint8> _referencesData; |
|
Array<String> _hostsData; |
|
Array<CIMNamespaceName> _nameSpacesData; |
|
|
|
// For binary encoding. |
|
Array<Uint8> _binaryData; |
|
|
|
Array<CIMObjectPath> _instanceNames; |
|
Array<SCMOInstance> _scmoInstanceNames; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// |
|
// CIMInstanceResponseData |
|
// |
|
//----------------------------------------------------------------------------- |
|
|
|
class PEGASUS_COMMON_LINKAGE CIMInstanceResponseData |
|
{ | { |
public: |
_objects=x; |
|
_encoding |= RESP_ENC_CIM; |
CIMInstanceResponseData(): |
|
_resolveCallback(0), |
|
_binaryEncoding(false) |
|
{ |
|
} |
|
|
|
CIMInstance& getCimInstance() |
|
{ |
|
_resolve(); |
|
return _cimInstance; |
|
} |
|
|
|
const CIMConstInstance& getCimInstance() const |
|
{ |
|
// Resolve the instance before returning it. The resolve step requires |
|
// non-const access, but does not fundamentally change the response |
|
const_cast<CIMInstanceResponseData*>(this)->_resolve(); |
|
|
|
// The CIMInstance is masqueraded as a CIMConstInstance for expedience, |
|
// since the internal representations are the same. |
|
return *((CIMConstInstance*)(void*)&_cimInstance); |
|
} | } |
|
void appendObject(const CIMObject& x) |
void setCimInstance(const CIMInstance& x) |
|
{ | { |
_resolveCallback = 0; |
_objects.append(x); |
_cimInstance = x; |
_encoding |= RESP_ENC_CIM; |
} | } |
| |
Array<Uint8>& getBinaryCimInstance() |
// SCMO representation, single instance stored as one element array |
{ |
// object paths are represented as SCMOInstance |
return _binaryData; |
Array<SCMOInstance>& getSCMO(); |
} |
|
|
|
bool setBinaryCimInstance(CIMBuffer& in, bool hasLen=true); |
|
bool setXmlCimInstance(CIMBuffer& in); |
|
|
|
void encodeBinaryResponse(CIMBuffer& out) const; |
|
void encodeXmlResponse(Buffer& out) const; |
|
|
|
private: |
|
|
|
CIMInstanceResponseData(const CIMInstanceResponseData&); |
|
CIMInstanceResponseData& operator=( |
|
const CIMInstanceResponseData&); |
|
|
|
static Boolean _resolveXMLInstance( |
|
CIMInstanceResponseData* data, |
|
CIMInstance& instance); |
|
|
|
static Boolean _resolveBinaryInstance( |
|
CIMInstanceResponseData* data, |
|
CIMInstance& instance); |
|
|
|
Boolean (*_resolveCallback)( |
|
CIMInstanceResponseData* msg, |
|
CIMInstance& cimInstance); |
|
|
|
void _resolve() |
|
{ |
|
if (_resolveCallback) |
|
{ |
|
(*_resolveCallback)(this, _cimInstance); |
|
_resolveCallback = 0; |
|
} |
|
} |
|
|
|
Boolean _binaryEncoding; |
|
|
|
// For XML encoding: |
|
Array<Sint8> _instanceData; |
|
Array<Sint8> _referenceData; |
|
CIMNamespaceName _nameSpaceData; |
|
String _hostData; |
|
|
|
// For Binary encoding: |
|
Array<Uint8> _binaryData; |
|
|
|
CIMInstance _cimInstance; |
|
|
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// |
|
// CIMInstancesResponseData |
|
// |
|
//----------------------------------------------------------------------------- |
|
|
|
class PEGASUS_COMMON_LINKAGE CIMInstancesResponseData |
|
{ |
|
public: |
|
|
|
enum ResponseDataEncoding { |
|
RESP_ENC_CIM, |
|
RESP_ENC_BINARY, |
|
RESP_ENC_XML, |
|
RESP_ENC_SCMO |
|
}; |
|
| |
CIMInstancesResponseData(): |
void setSCMO(const Array<SCMOInstance>& x); |
_resolveCallback(0), |
|
_encoding(RESP_ENC_CIM) |
|
{ |
|
} |
|
| |
Array<CIMInstance>& getNamedInstances() |
void appendSCMO(const Array<SCMOInstance>& x) |
{ | { |
//_resolve(); |
_scmoInstances.appendArray(x); |
return _namedInstances; |
_encoding |= RESP_ENC_SCMO; |
} | } |
| |
const Array<CIMConstInstance>& getNamedInstances() const |
Array<Uint8>& getBinary(); |
{ |
|
// Resolve the instances before returning them. The resolve step |
|
// requires non-const access, but does not fundamentally change the |
|
// message contents. |
|
// const_cast<CIMInstancesResponseData*>(this)->_resolve(); |
|
| |
// The Array<CIMInstance> is masqueraded as an Array<CIMConstInstance> |
// Set the binary stream in the CIMBuffer into the CIMResponseData |
// for expedience, since the internal representations are the same. |
bool setBinary(CIMBuffer& in); |
return *((Array<CIMConstInstance>*)(void*)&_namedInstances); |
|
} |
|
| |
void setNamedInstances(const Array<CIMInstance>& x) |
// Set any data from the CIMBuffer remaining after the current CIMBuffer |
{ |
// position pointer into the CIMResponseData Object. |
_resolveCallback = 0; |
bool setRemainingBinaryData(CIMBuffer& in); |
_namedInstances = x; |
|
} |
|
| |
void appendNamedInstance(const CIMInstance& x) |
// Xml data is unformatted, no need to differentiate between instance |
{ |
// instances and object paths or objects |
_resolveCallback = 0; |
bool setXml(CIMBuffer& in); |
_namedInstances.append(x); |
|
} |
|
| |
void setSCMOInstances(const Array<SCMOInstance>& x) |
// function used by OperationAggregator to aggregate response data in a |
{ |
// single ResponseData object |
_resolveCallback = _resolveSCMOInstances; |
void appendResponseData(const CIMResponseData & x); |
fprintf( |
|
stderr, |
|
"CIMResponseData::setSCMOInstances(cb=%p)\n", |
|
_resolveCallback); |
|
_scmoInstances = x; |
|
} |
|
| |
void appendSCMOInstance(const SCMOInstance& x) |
// Function used by CMPI layer to complete the namespace on all data held |
{ |
// Input (x) has to have a valid namespace |
_resolveCallback = _resolveSCMOInstances; |
void completeNamespace(const SCMOInstance * x); |
fprintf( |
|
stderr, |
|
"CIMResponseData::appendSCMOInstance(cb=%p)\n", |
|
_resolveCallback); |
|
_scmoInstances.append(x); |
|
} |
|
| |
void appendResponseData(const CIMInstancesResponseData & x) |
// Function primarily used by CIMOperationRequestDispatcher to complete |
{ |
// namespace and hostname on a,an,r and rn operations in the |
_namedInstances.appendArray(x._namedInstances); |
// OperationAggregator |
_scmoInstances.appendArray(x._scmoInstances); |
void completeHostNameAndNamespace( |
} |
const String & hn, |
|
const CIMNamespaceName & ns); |
Array<Uint8>& getBinaryCimInstances() |
|
{ |
|
return _binaryData; |
|
} |
|
| |
bool setBinaryCimInstances(CIMBuffer& in, bool hasLen=true); |
// Encoding responses |
bool setXmlCimInstances(CIMBuffer& in); |
|
| |
|
// binary format used with Provider Agents and OP Clients |
void encodeBinaryResponse(CIMBuffer& out); | void encodeBinaryResponse(CIMBuffer& out); |
|
// Xml format used with Provider Agents only |
|
void encodeInternalXmlResponse(CIMBuffer& out); |
|
// official Xml format(CIM over Http) used to communicate to clients |
void encodeXmlResponse(Buffer& out); | void encodeXmlResponse(Buffer& out); |
| |
private: |
//This function is called from buildResponce to set CIMResponcedata |
|
//with respective values of IncludeQualifiers,IncludeClassOrigin and |
CIMInstancesResponseData(const CIMInstancesResponseData&); |
//propertyFilter. |
CIMInstancesResponseData& operator=( |
void setRequestProperties( |
const CIMInstancesResponseData&); |
const Boolean includeQualifiers, |
|
const Boolean includeClassOrigin, |
static Boolean _resolveXMLInstances( |
const CIMPropertyList& propertyList); |
CIMInstancesResponseData* data, |
|
Array<CIMInstance>& instances); |
|
|
|
static Boolean _resolveBinaryInstances( |
|
CIMInstancesResponseData* data, |
|
Array<CIMInstance>& instances); |
|
|
|
static Boolean _resolveSCMOInstances( |
|
CIMInstancesResponseData* data, |
|
Array<CIMInstance>& instances); |
|
| |
Boolean (*_resolveCallback)( |
void setPropertyList(const CIMPropertyList& propertyList) |
CIMInstancesResponseData* data, |
|
Array<CIMInstance>& cimInstance); |
|
|
|
void _resolve() |
|
{ |
|
if (_resolveCallback) |
|
{ | { |
(*_resolveCallback)(this, _namedInstances); |
_propertyList = propertyList; |
_resolveCallback = 0; |
|
} |
|
} | } |
|
CIMPropertyList & getPropertyList() |
ResponseDataEncoding _encoding; |
|
|
|
// For XML encoding. |
|
Array<ArraySint8> _instancesData; |
|
Array<ArraySint8> _referencesData; |
|
Array<String> _hostsData; |
|
Array<CIMNamespaceName> _nameSpacesData; |
|
|
|
// For binary encoding. |
|
Array<Uint8> _binaryData; |
|
|
|
Array<CIMInstance> _namedInstances; |
|
Array<SCMOInstance> _scmoInstances; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// |
|
// CIMObjectsResponseData |
|
// |
|
//----------------------------------------------------------------------------- |
|
|
|
class PEGASUS_COMMON_LINKAGE CIMObjectsResponseData |
|
{ |
|
public: |
|
|
|
CIMObjectsResponseData(): |
|
_resolveCallback(0), |
|
_binaryEncoding(false) |
|
{ |
|
} |
|
|
|
Array<CIMObject>& getCIMObjects() |
|
{ | { |
_resolve(); |
return _propertyList; |
return _cimObjects; |
|
} | } |
| |
const Array<CIMConstObject>& getCIMObjects() const |
|
{ |
|
// Resolve the instances before returning them. The resolve step |
|
// requires non-const access, but does not fundamentally change the |
|
// message contents. |
|
const_cast<CIMObjectsResponseData*>(this)->_resolve(); |
|
|
|
// The Array<CIMInstance> is masqueraded as an Array<CIMConstInstance> |
|
// for expedience, since the internal representations are the same. |
|
return *((Array<CIMConstObject>*)(void*)&_cimObjects); |
|
} |
|
|
|
void setCIMObjects(const Array<CIMObject>& x) |
|
{ |
|
_resolveCallback = 0; |
|
_cimObjects = x; |
|
} |
|
|
|
Array<Uint8>& getBinaryCimObjects() |
|
{ |
|
return _binaryData; |
|
} |
|
|
|
bool setBinaryCimObjects(CIMBuffer& in, bool hasLen=true); |
|
bool setXmlCimObjects(CIMBuffer& in); |
|
|
|
void encodeBinaryResponse(CIMBuffer& out) const; |
|
void encodeXmlResponse(Buffer& out) const; |
|
|
|
private: | private: |
| |
CIMObjectsResponseData(const CIMObjectsResponseData&); |
// helper functions to transform different formats into one-another |
CIMObjectsResponseData& operator=( |
// functions work on the internal data and calling of them should be |
const CIMObjectsResponseData&); |
// avoided |
|
|
static Boolean _resolveXMLObjects( |
void _resolveToCIM(); |
CIMObjectsResponseData* data, |
void _resolveToSCMO(); |
Array<CIMObject>& objects); |
|
|
void _resolveBinary(); |
static Boolean _resolveBinaryObjects( |
|
CIMObjectsResponseData* data, |
void _resolveXmlToSCMO(); |
Array<CIMObject>& objects); |
void _resolveXmlToCIM(); |
|
|
Boolean (*_resolveCallback)( |
void _resolveSCMOToCIM(); |
CIMObjectsResponseData* data, |
void _resolveCIMToSCMO(); |
Array<CIMObject>& cimObjects); |
|
|
// Helper functions for this class only, do NOT externalize |
void _resolve() |
SCMOInstance _getSCMOFromCIMInstance(const CIMInstance& cimInst); |
{ |
SCMOInstance _getSCMOFromCIMObject(const CIMObject& cimObj); |
if (_resolveCallback) |
SCMOInstance _getSCMOFromCIMObjectPath(const CIMObjectPath& cimPath); |
{ |
SCMOClass* _getSCMOClass(const char* ns,const char* cls); |
(*_resolveCallback)(this, _cimObjects); |
void _deserializeInstance(Uint32 idx,CIMInstance& cimInstance); |
_resolveCallback = 0; |
void _deserializeObject(Uint32 idx,CIMObject& cimObject); |
} |
Boolean _deserializeReference(Uint32 idx,CIMObjectPath& cimObjectPath); |
} |
Boolean _deserializeInstanceName(Uint32 idx,CIMObjectPath& cimObjectPath); |
|
|
Boolean _binaryEncoding; |
// Bitflags in this integer will reflect what data representation types |
|
// are currently stored in this CIMResponseData object |
|
Uint32 _encoding; |
|
|
|
// Storing type of data in this enumeration |
|
ResponseDataContent _dataType; |
|
|
|
// unused arrays are represented by ArrayRepBase _empty_rep |
|
// which is a 16 byte large static shared across all of them |
|
// so, even though this object looks large, it holds just |
|
// 2 integer and 9 pointers |
| |
// For XML encoding. | // For XML encoding. |
// For XML encoding. |
|
Array<ArraySint8> _cimObjectsData; |
|
Array<ArraySint8> _referencesData; | Array<ArraySint8> _referencesData; |
|
Array<ArraySint8> _instanceData; |
Array<String> _hostsData; | Array<String> _hostsData; |
Array<CIMNamespaceName> _nameSpacesData; | Array<CIMNamespaceName> _nameSpacesData; |
| |
|
|
// For binary encoding. | // For binary encoding. |
Array<Uint8> _binaryData; | Array<Uint8> _binaryData; |
|
CIMNamespaceName _defaultNamespace; |
|
String _defaultHostname; |
|
|
|
// Default C++ encoding |
|
Array<CIMObjectPath> _instanceNames; |
|
Array<CIMInstance> _instances; |
|
Array<CIMObject> _objects; |
|
|
|
// SCMO encoding |
|
Array<SCMOInstance> _scmoInstances; |
|
Boolean _includeQualifiers; |
|
Boolean _includeClassOrigin; |
|
CIMPropertyList _propertyList; |
| |
Array<CIMObject> _cimObjects; |
|
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |