version 1.161, 2008/10/08 05:06:46
|
version 1.162, 2008/10/17 07:16:35
|
|
|
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
static StrLit _XmlWriterTypeStrings[] = |
|
{ |
|
STRLIT("TYPE=\"boolean\""), STRLIT("TYPE=\"uint8\""), |
|
STRLIT("TYPE=\"sint8\""), STRLIT("TYPE=\"uint16\""), |
|
STRLIT("TYPE=\"sint16\""), STRLIT("TYPE=\"uint32\""), |
|
STRLIT("TYPE=\"sint32\""), STRLIT("TYPE=\"uint64\""), |
|
STRLIT("TYPE=\"sint64\""), STRLIT("TYPE=\"real32\""), |
|
STRLIT("TYPE=\"real64\""), STRLIT("TYPE=\"char16\""), |
|
STRLIT("TYPE=\"string\""), STRLIT("TYPE=\"datetime\""), |
|
STRLIT("TYPE=\"reference\""), STRLIT("TYPE=\"object\""), |
|
STRLIT("TYPE=\"instance\"") |
|
}; |
|
|
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
// | // |
// appendLocalNameSpacePathElement() | // appendLocalNameSpacePathElement() |
|
|
const String& host, | const String& host, |
const CIMNamespaceName& nameSpace) | const CIMNamespaceName& nameSpace) |
{ | { |
out << STRLIT("<NAMESPACEPATH>\n"); |
out << STRLIT("<NAMESPACEPATH>\n" |
out << STRLIT("<HOST>") << host << STRLIT("</HOST>\n"); |
"<HOST>") << host << STRLIT("</HOST>\n"); |
appendLocalNameSpacePathElement(out, nameSpace); | appendLocalNameSpacePathElement(out, nameSpace); |
out << STRLIT("</NAMESPACEPATH>\n"); | out << STRLIT("</NAMESPACEPATH>\n"); |
} | } |
|
|
// EmbeddedObject attribute. | // EmbeddedObject attribute. |
if (a.size() > 0 && a[0].isInstance()) | if (a.size() > 0 && a[0].isInstance()) |
{ | { |
out << STRLIT(" EmbeddedObject=\"object\""); |
out << STRLIT(" EmbeddedObject=\"object\"" |
out << STRLIT(" EMBEDDEDOBJECT=\"object\""); |
" EMBEDDEDOBJECT=\"object\""); |
} | } |
#ifndef PEGASUS_SNIA_INTEROP_COMPATIBILITY | #ifndef PEGASUS_SNIA_INTEROP_COMPATIBILITY |
else | else |
|
|
// add the EmbeddedObject attribute | // add the EmbeddedObject attribute |
if (a.size() > 0) | if (a.size() > 0) |
{ | { |
out << STRLIT(" EmbeddedObject=\"instance\""); |
out << STRLIT(" EmbeddedObject=\"instance\"" |
out << STRLIT(" EMBEDDEDOBJECT=\"instance\""); |
" EMBEDDEDOBJECT=\"instance\""); |
| |
// Note that if the macro PEGASUS_SNIA_INTEROP_COMPATIBILITY is | // Note that if the macro PEGASUS_SNIA_INTEROP_COMPATIBILITY is |
// defined, then the EmbeddedInstance qualifier will be added | // defined, then the EmbeddedInstance qualifier will be added |
|
|
} | } |
else | else |
{ | { |
out << STRLIT(" TYPE=\"") |
out.append(' '); |
<< cimTypeToString(rep->getValue().getType()); |
out << _XmlWriterTypeStrings[rep->getValue().getType()]; |
out.append('"'); |
|
} | } |
| |
if (rep->getArraySize()) | if (rep->getArraySize()) |
|
|
} | } |
else if (rep->getValue().getType() == CIMTYPE_REFERENCE) | else if (rep->getValue().getType() == CIMTYPE_REFERENCE) |
{ | { |
out << STRLIT("<PROPERTY.REFERENCE"); |
out << STRLIT("<PROPERTY.REFERENCE" |
|
" NAME=\"") << rep->getName() << STRLIT("\" "); |
out << STRLIT(" NAME=\"") << rep->getName() << STRLIT("\" "); |
|
| |
if (!rep->getReferenceClassName().isNull()) | if (!rep->getReferenceClassName().isNull()) |
{ | { |
|
|
// EmbeddedObject attribute. | // EmbeddedObject attribute. |
if (a.isInstance()) | if (a.isInstance()) |
{ | { |
out << STRLIT(" EmbeddedObject=\"object\""); |
out << STRLIT(" EmbeddedObject=\"object\"" |
out << STRLIT(" EMBEDDEDOBJECT=\"object\""); |
" EMBEDDEDOBJECT=\"object\""); |
} | } |
// Else the Embedded Object is a class, always add the | // Else the Embedded Object is a class, always add the |
// EmbeddedObject qualifier. | // EmbeddedObject qualifier. |
|
|
{ | { |
CIMInstance a; | CIMInstance a; |
rep->getValue().get(a); | rep->getValue().get(a); |
out << " TYPE=\"string\""; |
out << STRLIT(" TYPE=\"string\"" |
out << " EmbeddedObject=\"instance\""; |
" EmbeddedObject=\"instance\"" |
out << " EMBEDDEDOBJECT=\"instance\""; |
" EMBEDDEDOBJECT=\"instance\""); |
| |
# ifdef PEGASUS_SNIA_INTEROP_COMPATIBILITY | # ifdef PEGASUS_SNIA_INTEROP_COMPATIBILITY |
if (rep->findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT) | if (rep->findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT) |
|
|
} | } |
else | else |
{ | { |
out << STRLIT(" TYPE=\"") |
out.append(' '); |
<< cimTypeToString(rep->getValue().getType()); |
out << _XmlWriterTypeStrings[rep->getValue().getType()]; |
out.append('"'); |
|
} | } |
| |
out << STRLIT(">\n"); | out << STRLIT(">\n"); |
|
|
const CIMMethodRep* rep = method._rep; | const CIMMethodRep* rep = method._rep; |
| |
out << STRLIT("<METHOD NAME=\"") << rep->getName(); | out << STRLIT("<METHOD NAME=\"") << rep->getName(); |
out.append('"'); |
out << STRLIT("\" "); |
| |
out << STRLIT(" TYPE=\"") << cimTypeToString(rep->getType()); |
out << _XmlWriterTypeStrings[rep->getType()]; |
out.append('"'); |
|
| |
if (!rep->getClassOrigin().isNull()) | if (!rep->getClassOrigin().isNull()) |
{ | { |
|
|
} | } |
else | else |
{ | { |
out << STRLIT("<PARAMETER.ARRAY"); |
out << STRLIT("<PARAMETER.ARRAY" |
out << STRLIT(" NAME=\"") << rep->getName(); |
" NAME=\"") << rep->getName(); |
out << STRLIT("\" "); |
out << STRLIT("\" ") << _XmlWriterTypeStrings[rep->getType()]; |
out << STRLIT(" TYPE=\"") << cimTypeToString(rep->getType()); |
|
out.append('"'); |
|
| |
if (rep->getArraySize()) | if (rep->getArraySize()) |
{ | { |
|
|
} | } |
else if (rep->getType() == CIMTYPE_REFERENCE) | else if (rep->getType() == CIMTYPE_REFERENCE) |
{ | { |
out << STRLIT("<PARAMETER.REFERENCE"); |
out << STRLIT("<PARAMETER.REFERENCE" |
out << STRLIT(" NAME=\"") << rep->getName(); |
" NAME=\"") << rep->getName(); |
out.append('"'); | out.append('"'); |
| |
if (!rep->getReferenceClassName().isNull()) | if (!rep->getReferenceClassName().isNull()) |
|
|
} | } |
else | else |
{ | { |
out << STRLIT("<PARAMETER"); |
out << STRLIT("<PARAMETER" |
out << STRLIT(" NAME=\"") << rep->getName(); |
" NAME=\"") << rep->getName(); |
out << STRLIT("\" "); |
out << STRLIT("\" ") << _XmlWriterTypeStrings[rep->getType()]; |
out << STRLIT(" TYPE=\"") << cimTypeToString(rep->getType()); |
|
out << STRLIT("\">\n"); |
out << STRLIT(">\n"); |
| |
for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++) | for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++) |
XmlWriter::appendQualifierElement(out, rep->getQualifier(i)); | XmlWriter::appendQualifierElement(out, rep->getQualifier(i)); |
|
|
const CIMQualifierRep* rep = qualifier._rep; | const CIMQualifierRep* rep = qualifier._rep; |
| |
out << STRLIT("<QUALIFIER NAME=\"") << rep->getName(); | out << STRLIT("<QUALIFIER NAME=\"") << rep->getName(); |
out.append('"'); |
out << STRLIT("\" ") << _XmlWriterTypeStrings[rep->getValue().getType()]; |
out << STRLIT(" TYPE=\"") << cimTypeToString(rep->getValue().getType()); |
|
out.append('"'); |
|
| |
if (rep->getPropagated()) | if (rep->getPropagated()) |
{ | { |
|
|
const CIMQualifierDeclRep* rep = qualifierDecl._rep; | const CIMQualifierDeclRep* rep = qualifierDecl._rep; |
| |
out << STRLIT("<QUALIFIER.DECLARATION NAME=\"") << rep->getName(); | out << STRLIT("<QUALIFIER.DECLARATION NAME=\"") << rep->getName(); |
out.append('"'); |
out << STRLIT("\" ") << _XmlWriterTypeStrings[rep->getValue().getType()]; |
out << STRLIT(" TYPE=\"") << cimTypeToString(rep->getValue().getType()); |
|
out.append('"'); |
|
| |
if (rep->getValue().isArray()) | if (rep->getValue().isArray()) |
{ | { |
|
|
{ | { |
out << STRLIT("POST /cimom HTTP/1.1\r\n"); | out << STRLIT("POST /cimom HTTP/1.1\r\n"); |
} | } |
out << STRLIT("HOST: ") << host << STRLIT("\r\n"); |
out << STRLIT("HOST: ") << host << STRLIT("\r\n" |
out << STRLIT("Content-Type: application/xml; charset=\"utf-8\"\r\n"); |
"Content-Type: application/xml; charset=\"utf-8\"\r\n"); |
OUTPUT_CONTENTLENGTH(out, contentLength); | OUTPUT_CONTENTLENGTH(out, contentLength); |
if (acceptLanguages.size() > 0) | if (acceptLanguages.size() > 0) |
{ | { |
|
|
} | } |
if (httpMethod == HTTP_METHOD_M_POST) | if (httpMethod == HTTP_METHOD_M_POST) |
{ | { |
out << STRLIT("Ext:\r\n"); |
out << STRLIT("Ext:\r\n" |
out << STRLIT("Cache-Control: no-cache\r\n"); |
"Cache-Control: no-cache\r\n" |
out << STRLIT("Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns="); |
"Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns="); |
out << nn << STRLIT("\r\n"); | out << nn << STRLIT("\r\n"); |
out << nn << STRLIT("-CIMOperation: MethodResponse\r\n\r\n"); | out << nn << STRLIT("-CIMOperation: MethodResponse\r\n\r\n"); |
} | } |
|
|
{ | { |
out << STRLIT("HTTP/1.1 " HTTP_STATUS_UNAUTHORIZED "\r\n"); | out << STRLIT("HTTP/1.1 " HTTP_STATUS_UNAUTHORIZED "\r\n"); |
OUTPUT_CONTENTLENGTH(out, 0); | OUTPUT_CONTENTLENGTH(out, 0); |
out << content << STRLIT("\r\n"); |
out << content << STRLIT("\r\n\r\n"); |
out << STRLIT("\r\n"); |
|
| |
//ATTN: We may need to include the following line, so that the browsers | //ATTN: We may need to include the following line, so that the browsers |
// can display the error message. | // can display the error message. |
|
|
// may not always be the case so we need to indicate that there | // may not always be the case so we need to indicate that there |
// is no content | // is no content |
OUTPUT_CONTENTLENGTH(out, 0); | OUTPUT_CONTENTLENGTH(out, 0); |
out << content << STRLIT("\r\n"); |
out << content << STRLIT("\r\n\r\n"); |
out << STRLIT("\r\n"); |
|
| |
//ATTN: We may need to include the following line, so that the browsers | //ATTN: We may need to include the following line, so that the browsers |
// can display the error message. | // can display the error message. |
|
|
Buffer& out, | Buffer& out, |
const String& messageId) | const String& messageId) |
{ | { |
out << STRLIT("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"); |
out << STRLIT("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" |
out << STRLIT("<CIM CIMVERSION=\"2.0\" DTDVERSION=\"2.0\">\n"); |
"<CIM CIMVERSION=\"2.0\" DTDVERSION=\"2.0\">\n" |
out << STRLIT("<MESSAGE ID=\"") << messageId; |
"<MESSAGE ID=\"") << messageId; |
out << STRLIT("\" PROTOCOLVERSION=\"1.0\">\n"); | out << STRLIT("\" PROTOCOLVERSION=\"1.0\">\n"); |
} | } |
| |
void XmlWriter::_appendMessageElementEnd( | void XmlWriter::_appendMessageElementEnd( |
Buffer& out) | Buffer& out) |
{ | { |
out << STRLIT("</MESSAGE>\n"); |
out << STRLIT("</MESSAGE>\n</CIM>\n"); |
out << STRLIT("</CIM>\n"); |
|
} | } |
| |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
|
|
{ | { |
Tracer::traceCIMException(TRC_XML_WRITER, Tracer::LEVEL2, cimException); | Tracer::traceCIMException(TRC_XML_WRITER, Tracer::LEVEL2, cimException); |
| |
out << STRLIT("<ERROR"); |
out << STRLIT("<ERROR CODE=\"") << Uint32(cimException.getCode()); |
out << STRLIT(" CODE=\"") << Uint32(cimException.getCode()); |
|
out.append('"'); | out.append('"'); |
| |
String description = TraceableCIMException(cimException).getDescription(); | String description = TraceableCIMException(cimException).getDescription(); |
|
|
if (type == CIMTYPE_OBJECT) | if (type == CIMTYPE_OBJECT) |
{ | { |
| |
out << STRLIT(" PARAMTYPE=\"string\""); |
out << STRLIT(" PARAMTYPE=\"string\"" |
out << STRLIT(" EmbeddedObject=\"object\""); |
" EmbeddedObject=\"object\"" |
out << STRLIT(" EMBEDDEDOBJECT=\"object\""); |
" EMBEDDEDOBJECT=\"object\""); |
} | } |
else if (type == CIMTYPE_INSTANCE) | else if (type == CIMTYPE_INSTANCE) |
{ | { |
out << STRLIT(" PARAMTYPE=\"string\""); |
out << STRLIT(" PARAMTYPE=\"string\"" |
out << STRLIT(" EmbeddedObject=\"instance\""); |
" EmbeddedObject=\"instance\"" |
out << STRLIT(" EMBEDDEDOBJECT=\"instance\""); |
" EMBEDDEDOBJECT=\"instance\""); |
} | } |
else | else |
{ | { |
out << STRLIT(" PARAMTYPE=\"") << cimTypeToString (type); |
out << STRLIT(" PARAM") << _XmlWriterTypeStrings[type]; |
out.append('"'); |
|
} | } |
} | } |
| |
|
|
{ | { |
out << STRLIT("POST ") << requestUri << STRLIT(" HTTP/1.1\r\n"); | out << STRLIT("POST ") << requestUri << STRLIT(" HTTP/1.1\r\n"); |
} | } |
out << STRLIT("HOST: ") << host << STRLIT("\r\n"); |
out << STRLIT("HOST: ") << host << STRLIT("\r\n" |
out << STRLIT("Content-Type: application/xml; charset=\"utf-8\"\r\n"); |
"Content-Type: application/xml; charset=\"utf-8\"\r\n"); |
OUTPUT_CONTENTLENGTH(out, contentLength); | OUTPUT_CONTENTLENGTH(out, contentLength); |
| |
if (acceptLanguages.size() > 0) | if (acceptLanguages.size() > 0) |
|
|
} | } |
else | else |
{ | { |
out << STRLIT("CIMExport: MethodRequest\r\n"); |
out << STRLIT("CIMExport: MethodRequest\r\n" |
out << STRLIT("CIMExportMethod: ") << cimMethod << STRLIT("\r\n"); |
"CIMExportMethod: ") << cimMethod << STRLIT("\r\n"); |
} | } |
| |
if (authenticationHeader.size()) | if (authenticationHeader.size()) |
|
|
{ | { |
char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' }; | char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' }; |
| |
out << STRLIT("HTTP/1.1 " HTTP_STATUS_OK "\r\n"); |
out << STRLIT("HTTP/1.1 " HTTP_STATUS_OK "\r\n" |
out << STRLIT("Content-Type: application/xml; charset=\"utf-8\"\r\n"); |
"Content-Type: application/xml; charset=\"utf-8\"\r\n"); |
OUTPUT_CONTENTLENGTH(out, contentLength); | OUTPUT_CONTENTLENGTH(out, contentLength); |
| |
if (contentLanguages.size() > 0) | if (contentLanguages.size() > 0) |
|
|
} | } |
if (httpMethod == HTTP_METHOD_M_POST) | if (httpMethod == HTTP_METHOD_M_POST) |
{ | { |
out << STRLIT("Ext:\r\n"); |
out << STRLIT("Ext:\r\n" |
out << STRLIT("Cache-Control: no-cache\r\n"); |
"Cache-Control: no-cache\r\n" |
out << STRLIT("Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns="); |
"Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns="); |
out << nn << STRLIT("\r\n"); | out << nn << STRLIT("\r\n"); |
out << nn << STRLIT("-CIMExport: MethodResponse\r\n\r\n"); | out << nn << STRLIT("-CIMExport: MethodResponse\r\n\r\n"); |
} | } |
|
|
// XmlWriter::keyBindingTypeToString | // XmlWriter::keyBindingTypeToString |
// | // |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ |
const char* XmlWriter::keyBindingTypeToString (CIMKeyBinding::Type type) |
const StrLit XmlWriter::keyBindingTypeToString (CIMKeyBinding::Type type) |
{ | { |
switch (type) | switch (type) |
{ | { |
case CIMKeyBinding::BOOLEAN: | case CIMKeyBinding::BOOLEAN: |
return "boolean"; |
return STRLIT("boolean"); |
| |
case CIMKeyBinding::STRING: | case CIMKeyBinding::STRING: |
return "string"; |
return STRLIT("string"); |
| |
case CIMKeyBinding::NUMERIC: | case CIMKeyBinding::NUMERIC: |
return "numeric"; |
return STRLIT("numeric"); |
| |
case CIMKeyBinding::REFERENCE: | case CIMKeyBinding::REFERENCE: |
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
| |
return "unknown"; |
return STRLIT("unknown"); |
} | } |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |