(file) Return to XmlWriter.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/XmlWriter.cpp between version 1.83.4.1 and 1.169.4.5

version 1.83.4.1, 2003/03/11 19:56:55 version 1.169.4.5, 2013/06/03 22:35:14
Line 1 
Line 1 
 //%/////////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,  // Licensed to The Open Group (TOG) under one or more contributor license
 // The Open Group, Tivoli Systems  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   // this work for additional information regarding copyright ownership.
   // Each contributor licenses this file to you under the OpenPegasus Open
   // Source License; you may not use this file except in compliance with the
   // License.
   //
   // Permission is hereby granted, free of charge, to any person obtaining a
   // copy of this software and associated documentation files (the "Software"),
   // to deal in the Software without restriction, including without limitation
   // the rights to use, copy, modify, merge, publish, distribute, sublicense,
   // and/or sell copies of the Software, and to permit persons to whom the
   // Software is furnished to do so, subject to the following conditions:
   //
   // The above copyright notice and this permission notice shall be included
   // in all copies or substantial portions of the Software.
   //
   // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy  //////////////////////////////////////////////////////////////////////////
 // of this software and associated documentation files (the "Software"), to  
 // deal in the Software without restriction, including without limitation the  
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  
 // sell copies of the Software, and to permit persons to whom the Software is  
 // furnished to do so, subject to the following conditions:  
 //  
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  
 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT  
 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR  
 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT  
 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  
 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  
 //  
 //==============================================================================  
 //  
 // Author: Mike Brasher (mbrasher@bmc.com)  
 //  
 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)  
 //              Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)  
 //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)  
 //              Carol Ann Krug Graves, Hewlett-Packard Company  
 //                  (carolann_graves@hp.com)  
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 35 
Line 33 
 #include <cstdlib> #include <cstdlib>
 #include <cstdio> #include <cstdio>
 #include "Constants.h" #include "Constants.h"
 #include "Destroyer.h"  
 #include "CIMClass.h" #include "CIMClass.h"
 #include "CIMClassRep.h" #include "CIMClassRep.h"
 #include "CIMInstance.h" #include "CIMInstance.h"
Line 54 
Line 51 
 #include "CIMQualifierDeclRep.h" #include "CIMQualifierDeclRep.h"
 #include "CIMValue.h" #include "CIMValue.h"
 #include "XmlWriter.h" #include "XmlWriter.h"
 #include "XmlParser.h"  
 #include "Tracer.h" #include "Tracer.h"
 #include <Pegasus/Common/StatisticalData.h> #include <Pegasus/Common/StatisticalData.h>
   #include "CommonUTF.h"
   #include "Buffer.h"
   #include "StrLit.h"
   #include "IDFactory.h"
   #include "StringConversion.h"
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 Array<Sint8>& operator<<(Array<Sint8>& out, const char* x)  
 {  
     XmlWriter::append(out, x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, char x)  
 {  
     XmlWriter::append(out, x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, const Char16& x)  
 {  
     XmlWriter::append(out, x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, const String& x)  
 {  
     XmlWriter::append(out, x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, const Indentor& x)  
 {  
     XmlWriter::append(out, x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, const Array<Sint8>& x)  
 {  
     out.appendArray(x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, Uint32 x)  
 {  
     XmlWriter::append(out, x);  
     return out;  
 }  
   
 Array<Sint8>& operator<<(Array<Sint8>& out, const CIMName& name)  
 {  
     XmlWriter::append(out, name.getString ());  
     return out;  
 }  
   
 PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os, const CIMDateTime& x)  
 {  
     return os << x.toString();  
 }  
   
 PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os, const CIMName& name)  
 {  
     os << name.getString();  
     return os;  
 }  
   
 PEGASUS_STD(ostream)& operator<<(PEGASUS_STD(ostream)& os,  
     const CIMNamespaceName& name)  
 {  
     os << name.getString();  
     return os;  
 }  
   
 inline void _appendChar(Array<Sint8>& out, const Char16& c)  
 {  
     out.append(Sint8(c));  
 }  
   
 inline void _appendSpecialChar(Array<Sint8>& out, const Char16& c)  
 {  
     // ATTN-B: Only UTF-8 handled for now.  
   
     switch (c)  
     {  
         case '&':  
             out.append("&amp;", 5);  
             break;  
   
         case '<':  
             out.append("&lt;", 4);  
             break;  
   
         case '>':  
             out.append("&gt;", 4);  
             break;  
   
         case '"':  
             out.append("&quot;", 6);  
             break;  
   
         case '\'':  
             out.append("&apos;", 6);  
             break;  
   
         default:  
             out.append(Sint8(c));  
     }  
 }  
   
 static inline void _appendSpecialChar(PEGASUS_STD(ostream)& os, char c)  
 {  
     switch (c)  
     {  
         case '&':  
             os << "&amp;";  
             break;  
   
         case '<':  
             os << "&lt;";  
             break;  
   
         case '>':  
             os << "&gt;";  
             break;  
   
         case '"':  
             os << "&quot;";  
             break;  
   
         case '\'':  
             os << "&apos;";  
             break;  
   
         default:  
             os << c;  
     }  
 }  
   
 static inline void _appendSpecial(PEGASUS_STD(ostream)& os, const char* str)  
 {  
     while (*str)  
         _appendSpecialChar(os, *str++);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, const Char16& x)  
 {  
     _appendChar(out, x);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, Boolean x)  
 {  
     append(out, (x ? "TRUE" : "FALSE"));  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, Uint32 x)  
 {  
     char buffer[32];  
     sprintf(buffer, "%u", x);  
     append(out, buffer);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, Sint32 x)  
 {  
     char buffer[32];  
     sprintf(buffer, "%d", x);  
     append(out, buffer);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, Uint64 x)  
 {  
     char buffer[32];  // Should need 21 chars max  
     // I know I shouldn't put platform flags here, but the other way is too hard  
 #if defined(PEGASUS_PLATFORM_WIN32_IX86_MSVC)  
     sprintf(buffer, "%I64u", x);  
 #else  
     sprintf(buffer, "%llu", x);  
 #endif  
     append(out, buffer);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, Sint64 x)  
 {  
     char buffer[32];  // Should need 21 chars max  
     // I know I shouldn't put platform flags here, but the other way is too hard  
 #if defined(PEGASUS_PLATFORM_WIN32_IX86_MSVC)  
     sprintf(buffer, "%I64d", x);  
 #else  
     sprintf(buffer, "%lld", x);  
 #endif  
     append(out, buffer);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, Real64 x)  
 {  
     char buffer[128];  
     // %e gives '[-]m.dddddde+/-xx', which seems compatible with CIM/XML spec  
     sprintf(buffer, "%e", x);  
     append(out, buffer);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, const char* str)  
 {  
     while (*str)  
         _appendChar(out, *str++);  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, const String& str)  
 {  
     for (Uint32 i = 0; i < str.size(); i++)  
     {  
         _appendChar(out, str[i]);  
     }  
 }  
   
 void XmlWriter::append(Array<Sint8>& out, const Indentor& x)  
 {  
     for (Uint32 i = 0; i < 4 * x.getLevel(); i++)  
         out.append(' ');  
 }  
   
 void XmlWriter::appendSpecial(Array<Sint8>& out, const Char16& x)  
 {  
     _appendSpecialChar(out, x);  
 }  
   
 void XmlWriter::appendSpecial(Array<Sint8>& out, char x)  
 {  
     _appendSpecialChar(out, Char16(x));  
 }  
   
 void XmlWriter::appendSpecial(Array<Sint8>& out, const char* str)  
 {  
     while (*str)  
         _appendSpecialChar(out, *str++);  
 }  
   
 void XmlWriter::appendSpecial(Array<Sint8>& out, const String& str)  
 {  
     for (Uint32 i = 0; i < str.size(); i++)  
     {  
         _appendSpecialChar(out, str[i]);  
     }  
 }  
   
 // See http://www.ietf.org/rfc/rfc2396.txt section 2  
 // Reserved characters = ';' '/' '?' ':' '@' '&' '=' '+' '$' ','  
 // Excluded characters:  
 //   Control characters = 0x00-0x1f, 0x7f  
 //   Space character = 0x20  
 //   Delimiters = '<' '>' '#' '%' '"'  
 //   Unwise = '{' '}' '|' '\\' '^' '[' ']' '`'  
 inline void _encodeURIChar(String& outString, Char16 char16)  
 {  
     // ATTN: Handle non-UTF-8 character sets  
     char c = char16 & 0x007f;  
   
 #if 0  
 // Enable this functionality when approved by Pegasus community  
 //#ifndef PEGASUS_DO_NOT_IMPLEMENT_URI_ENCODING  
     if ( (c <= 0x20) ||                     // Control characters + space char  
          ( (c >= 0x22) && (c <= 0x26) ) ||  // '"' '#' '$' '%' '&'  
          (c == 0x2b) ||                     // '+'  
          (c == 0x2c) ||                     // ','  
          (c == 0x2f) ||                     // '/'  
          ( (c >= 0x3a) && (c <= 0x40) ) ||  // ':' ';' '<' '=' '>' '?' '@'  
          ( (c >= 0x5b) && (c <= 0x5e) ) ||  // '[' '\\' ']' '^'  
          (c == 0x60) ||                     // '`'  
          ( (c >= 0x7b) && (c <= 0x7d) ) ||  // '{' '|' '}'  
          (c == 0x7f) )                      // Control character  
     {  
         char hexencoding[4];  
   
         sprintf(hexencoding, "%%%X%X", c/16, c%16);  
         outString.append(hexencoding);  
     }  
     else  
 #endif  
     {  
         outString.append(c);  
     }  
 }  
   
 String XmlWriter::encodeURICharacters(Array<Sint8> uriString)  
 {  
     String encodedString;  
   
     for (Uint32 i=0; i<uriString.size(); i++)  
     {  
         _encodeURIChar(encodedString, Char16(uriString[i]));  
     }  
   
     return encodedString;  
 }  
   
 String XmlWriter::encodeURICharacters(String uriString)  
 {  
     String encodedString;  
   
     for (Uint32 i=0; i<uriString.size(); i++)  
     {  
         _encodeURIChar(encodedString, uriString[i]);  
     }  
   
     return encodedString;  
 }  
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendLocalNameSpacePathElement() // appendLocalNameSpacePathElement()
Line 368 
Line 69 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendLocalNameSpacePathElement( void XmlWriter::appendLocalNameSpacePathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMNamespaceName& nameSpace)     const CIMNamespaceName& nameSpace)
 { {
     out << "<LOCALNAMESPACEPATH>\n";      out << STRLIT("<LOCALNAMESPACEPATH>\n");
  
     char* nameSpaceCopy = strdup(nameSpace.getString().getCString());     char* nameSpaceCopy = strdup(nameSpace.getString().getCString());
   
   #if !defined(PEGASUS_COMPILER_MSVC) && !defined(PEGASUS_OS_ZOS)
       char *last;
       for (const char* p = strtok_r(nameSpaceCopy, "/", &last); p;
            p = strtok_r(NULL, "/", &last))
   #else
     for (const char* p = strtok(nameSpaceCopy, "/"); p; p = strtok(NULL, "/"))     for (const char* p = strtok(nameSpaceCopy, "/"); p; p = strtok(NULL, "/"))
   #endif
     {     {
         out << "<NAMESPACE NAME=\"" << p << "\"/>\n";          out << STRLIT("<NAMESPACE NAME=\"") << p << STRLIT("\"/>\n");
     }     }
     delete nameSpaceCopy;      free(nameSpaceCopy);
  
     out << "</LOCALNAMESPACEPATH>\n";      out << STRLIT("</LOCALNAMESPACEPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 392 
Line 100 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendNameSpacePathElement( void XmlWriter::appendNameSpacePathElement(
     Array<Sint8>& out,      Buffer& out,
     const String& host,     const String& host,
     const CIMNamespaceName& nameSpace)     const CIMNamespaceName& nameSpace)
 { {
     out << "<NAMESPACEPATH>\n";      out << STRLIT("<NAMESPACEPATH>\n"
     out << "<HOST>" << host << "</HOST>\n";                    "<HOST>") << host << STRLIT("</HOST>\n");
     appendLocalNameSpacePathElement(out, nameSpace);     appendLocalNameSpacePathElement(out, nameSpace);
     out << "</NAMESPACEPATH>\n";      out << STRLIT("</NAMESPACEPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 413 
Line 121 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendClassNameElement( void XmlWriter::appendClassNameElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& className)     const CIMName& className)
 { {
     out << "<CLASSNAME NAME=\"" << className << "\"/>\n";      out << STRLIT("<CLASSNAME NAME=\"") << className << STRLIT("\"/>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 430 
Line 138 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendInstanceNameElement( void XmlWriter::appendInstanceNameElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObjectPath& instanceName)     const CIMObjectPath& instanceName)
 { {
     out << "<INSTANCENAME CLASSNAME=\"" << instanceName.getClassName() << "\">\n";      out << STRLIT("<INSTANCENAME CLASSNAME=\"");
       out << instanceName.getClassName() << STRLIT("\">\n");
  
     Array<CIMKeyBinding> keyBindings = instanceName.getKeyBindings();      const Array<CIMKeyBinding>& keyBindings = instanceName.getKeyBindings();
     for (Uint32 i = 0, n = keyBindings.size(); i < n; i++)     for (Uint32 i = 0, n = keyBindings.size(); i < n; i++)
     {     {
         out << "<KEYBINDING NAME=\"" << keyBindings[i].getName() << "\">\n";          out << STRLIT("<KEYBINDING NAME=\"");
           out << keyBindings[i].getName() << STRLIT("\">\n");
  
         if (keyBindings[i].getType() == CIMKeyBinding::REFERENCE)         if (keyBindings[i].getType() == CIMKeyBinding::REFERENCE)
         {         {
             CIMObjectPath ref = keyBindings[i].getValue();             CIMObjectPath ref = keyBindings[i].getValue();
             appendValueReferenceElement(out, ref, true);              // create an instancePath (i.e. isClassPath = false)
               appendValueReferenceElement(out, ref, false, true);
         }         }
         else {          else
             out << "<KEYVALUE VALUETYPE=\"";          {
               out << STRLIT("<KEYVALUE VALUETYPE=\"");
             out << keyBindingTypeToString(keyBindings[i].getType());             out << keyBindingTypeToString(keyBindings[i].getType());
             out << "\">";              out << STRLIT("\">");
  
             // fixed the special character problem - Markus              // fixed the special characters
  
             appendSpecial(out, keyBindings[i].getValue());             appendSpecial(out, keyBindings[i].getValue());
             out << "</KEYVALUE>\n";              out << STRLIT("</KEYVALUE>\n");
         }         }
         out << "</KEYBINDING>\n";          out << STRLIT("</KEYBINDING>\n");
     }     }
     out << "</INSTANCENAME>\n";      out << STRLIT("</INSTANCENAME>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 469 
Line 181 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendClassPathElement( void XmlWriter::appendClassPathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObjectPath& classPath)     const CIMObjectPath& classPath)
 { {
     out << "<CLASSPATH>\n";      out << STRLIT("<CLASSPATH>\n");
     appendNameSpacePathElement(out,     appendNameSpacePathElement(out,
                                classPath.getHost(),                                classPath.getHost(),
                                classPath.getNameSpace());                                classPath.getNameSpace());
     appendClassNameElement(out, classPath.getClassName());     appendClassNameElement(out, classPath.getClassName());
     out << "</CLASSPATH>\n";      out << STRLIT("</CLASSPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 489 
Line 201 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendInstancePathElement( void XmlWriter::appendInstancePathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObjectPath& instancePath)     const CIMObjectPath& instancePath)
 { {
     out << "<INSTANCEPATH>\n";      out << STRLIT("<INSTANCEPATH>\n");
     appendNameSpacePathElement(out,     appendNameSpacePathElement(out,
                                instancePath.getHost(),                                instancePath.getHost(),
                                instancePath.getNameSpace());                                instancePath.getNameSpace());
     appendInstanceNameElement(out, instancePath);     appendInstanceNameElement(out, instancePath);
     out << "</INSTANCEPATH>\n";      out << STRLIT("</INSTANCEPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 509 
Line 221 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendLocalClassPathElement( void XmlWriter::appendLocalClassPathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObjectPath& classPath)     const CIMObjectPath& classPath)
 { {
     out << "<LOCALCLASSPATH>\n";      out << STRLIT("<LOCALCLASSPATH>\n");
     appendLocalNameSpacePathElement(out, classPath.getNameSpace());     appendLocalNameSpacePathElement(out, classPath.getNameSpace());
     appendClassNameElement(out, classPath.getClassName());     appendClassNameElement(out, classPath.getClassName());
     out << "</LOCALCLASSPATH>\n";      out << STRLIT("</LOCALCLASSPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 527 
Line 239 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendLocalInstancePathElement( void XmlWriter::appendLocalInstancePathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObjectPath& instancePath)     const CIMObjectPath& instancePath)
 { {
     out << "<LOCALINSTANCEPATH>\n";      out << STRLIT("<LOCALINSTANCEPATH>\n");
     appendLocalNameSpacePathElement(out, instancePath.getNameSpace());     appendLocalNameSpacePathElement(out, instancePath.getNameSpace());
     appendInstanceNameElement(out, instancePath);     appendInstanceNameElement(out, instancePath);
     out << "</LOCALINSTANCEPATH>\n";      out << STRLIT("</LOCALINSTANCEPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 545 
Line 257 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
   // appendValueReferenceElement does this correctly with isClassPath flag
   // Called only but formatSimple
 void XmlWriter::appendLocalObjectPathElement( void XmlWriter::appendLocalObjectPathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObjectPath& objectPath)     const CIMObjectPath& objectPath)
 { {
     //     //
Line 554 
Line 268 
     //  distinguish instanceNames from classNames in every case     //  distinguish instanceNames from classNames in every case
     //  The instanceName of a singleton instance of a keyless class has no     //  The instanceName of a singleton instance of a keyless class has no
     //  key bindings     //  key bindings
       //  See bBUG_3302.
     //     //
     if (objectPath.getKeyBindings ().size () != 0)     if (objectPath.getKeyBindings ().size () != 0)
     {     {
Line 571 
Line 286 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 inline void _appendValue(Array<Sint8>& out, Boolean x)  inline void _xmlWritter_appendValue(Buffer& out, Boolean x)
 { {
     XmlWriter::append(out, x);     XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, Uint8 x)  inline void _xmlWritter_appendValue(Buffer& out, Uint8 x)
 { {
     XmlWriter::append(out, Uint32(x));     XmlWriter::append(out, Uint32(x));
 } }
  
 inline void _appendValue(Array<Sint8>& out, Sint8 x)  inline void _xmlWritter_appendValue(Buffer& out, Sint8 x)
 { {
     XmlWriter::append(out, Sint32(x));     XmlWriter::append(out, Sint32(x));
 } }
  
 inline void _appendValue(Array<Sint8>& out, Uint16 x)  inline void _xmlWritter_appendValue(Buffer& out, Uint16 x)
 { {
     XmlWriter::append(out, Uint32(x));     XmlWriter::append(out, Uint32(x));
 } }
  
 inline void _appendValue(Array<Sint8>& out, Sint16 x)  inline void _xmlWritter_appendValue(Buffer& out, Sint16 x)
 { {
     XmlWriter::append(out, Sint32(x));     XmlWriter::append(out, Sint32(x));
 } }
  
 inline void _appendValue(Array<Sint8>& out, Uint32 x)  inline void _xmlWritter_appendValue(Buffer& out, Uint32 x)
 { {
     XmlWriter::append(out, x);     XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, Sint32 x)  inline void _xmlWritter_appendValue(Buffer& out, Sint32 x)
 { {
     XmlWriter::append(out, x);     XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, Uint64 x)  inline void _xmlWritter_appendValue(Buffer& out, Uint64 x)
 { {
     XmlWriter::append(out, x);     XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, Sint64 x)  inline void _xmlWritter_appendValue(Buffer& out, Sint64 x)
 { {
     XmlWriter::append(out, x);     XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, Real32 x)  inline void _xmlWritter_appendValue(Buffer& out, Real32 x)
 { {
     XmlWriter::append(out, Real64(x));      XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, Real64 x)  inline void _xmlWritter_appendValue(Buffer& out, Real64 x)
 { {
     XmlWriter::append(out, x);     XmlWriter::append(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, const Char16& x)  inline void _xmlWritter_appendValue(Buffer& out, const Char16& x)
 { {
     XmlWriter::appendSpecial(out, x);     XmlWriter::appendSpecial(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, const String& x)  inline void _xmlWritter_appendValue(Buffer& out, const String& x)
 { {
     XmlWriter::appendSpecial(out, x);     XmlWriter::appendSpecial(out, x);
 } }
  
 inline void _appendValue(Array<Sint8>& out, const CIMDateTime& x)  inline void _xmlWritter_appendValue(Buffer& out, const CIMDateTime& x)
 { {
     out << x.toString();  //ATTN: append() method?      // It is not necessary to use XmlWriter::appendSpecial(), because
       // CIMDateTime values do not contain special characters.
       out << x.toString();
 } }
  
 inline void _appendValue(Array<Sint8>& out, const CIMObjectPath& x)  inline void _xmlWritter_appendValue(Buffer& out, const CIMObjectPath& x)
 { {
     XmlWriter::appendValueReferenceElement(out, x, true);      // Emit Instance Path with value wrapper
       XmlWriter::appendValueReferenceElement(out, x, false, true);
 } }
  
 void _appendValueArray(Array<Sint8>& out, const CIMObjectPath* p, Uint32 size)  inline void _xmlWritter_appendValue(Buffer& out, const CIMObject& x)
 { {
     out << "<VALUE.REFARRAY>\n";      String myStr = x.toString();
       _xmlWritter_appendValue(out, myStr);
   }
   
   void _xmlWritter_appendValueArray(
       Buffer& out, const CIMObjectPath* p, Uint32 size)
   {
       out << STRLIT("<VALUE.REFARRAY>\n");
     while (size--)     while (size--)
     {     {
         _appendValue(out, *p++);          _xmlWritter_appendValue(out, *p++);
     }     }
     out << "</VALUE.REFARRAY>\n";      out << STRLIT("</VALUE.REFARRAY>\n");
 } }
  
 template<class T> template<class T>
 void _appendValueArray(Array<Sint8>& out, const T* p, Uint32 size)  void _xmlWritter_appendValueArray(Buffer& out, const T* p, Uint32 size)
 { {
     out << "<VALUE.ARRAY>\n";      out << STRLIT("<VALUE.ARRAY>\n");
  
     while (size--)     while (size--)
     {     {
         out << "<VALUE>";          out << STRLIT("<VALUE>");
         _appendValue(out, *p++);          _xmlWritter_appendValue(out, *p++);
         out << "</VALUE>\n";          out << STRLIT("</VALUE>\n");
     }     }
  
     out << "</VALUE.ARRAY>\n";      out << STRLIT("</VALUE.ARRAY>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 685 
Line 410 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendValueElement( void XmlWriter::appendValueElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMValue& value)     const CIMValue& value)
 { {
     if (value.isNull())     if (value.isNull())
Line 700 
Line 425 
             {             {
                 Array<Boolean> a;                 Array<Boolean> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 708 
Line 433 
             {             {
                 Array<Uint8> a;                 Array<Uint8> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 716 
Line 441 
             {             {
                 Array<Sint8> a;                 Array<Sint8> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 724 
Line 449 
             {             {
                 Array<Uint16> a;                 Array<Uint16> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 732 
Line 457 
             {             {
                 Array<Sint16> a;                 Array<Sint16> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 740 
Line 465 
             {             {
                 Array<Uint32> a;                 Array<Uint32> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 748 
Line 473 
             {             {
                 Array<Sint32> a;                 Array<Sint32> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 756 
Line 481 
             {             {
                 Array<Uint64> a;                 Array<Uint64> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 764 
Line 489 
             {             {
                 Array<Sint64> a;                 Array<Sint64> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 772 
Line 497 
             {             {
                 Array<Real32> a;                 Array<Real32> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 780 
Line 505 
             {             {
                 Array<Real64> a;                 Array<Real64> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 788 
Line 513 
             {             {
                 Array<Char16> a;                 Array<Char16> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
             case CIMTYPE_STRING:             case CIMTYPE_STRING:
             {             {
                 Array<String> a;                  const String* data;
                 value.get(a);                  Uint32 size;
                 _appendValueArray(out, a.getData(), a.size());                  value._get(data, size);
                   _xmlWritter_appendValueArray(out, data, size);
                 break;                 break;
             }             }
  
Line 804 
Line 530 
             {             {
                 Array<CIMDateTime> a;                 Array<CIMDateTime> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
Line 812 
Line 538 
             {             {
                 Array<CIMObjectPath> a;                 Array<CIMObjectPath> a;
                 value.get(a);                 value.get(a);
                 _appendValueArray(out, a.getData(), a.size());                  _xmlWritter_appendValueArray(out, a.getData(), a.size());
                 break;                 break;
             }             }
  
               case CIMTYPE_OBJECT:
               {
                   Array<CIMObject> a;
                   value.get(a);
                   _xmlWritter_appendValueArray(out, a.getData(), a.size());
                   break;
               }
               case CIMTYPE_INSTANCE:
               {
                   Array<CIMInstance> a;
                   value.get(a);
                   _xmlWritter_appendValueArray(out, a.getData(), a.size());
                   break;
               }
             default:             default:
                 PEGASUS_ASSERT(false);                  PEGASUS_UNREACHABLE(PEGASUS_ASSERT(false);)
         }         }
     }     }
     else if (value.getType() == CIMTYPE_REFERENCE)     else if (value.getType() == CIMTYPE_REFERENCE)
Line 825 
Line 565 
         // Has to be separate because it uses VALUE.REFERENCE tag         // Has to be separate because it uses VALUE.REFERENCE tag
         CIMObjectPath v;         CIMObjectPath v;
         value.get(v);         value.get(v);
         _appendValue(out, v);          _xmlWritter_appendValue(out, v);
     }     }
     else     else
     {     {
         out << "<VALUE>";          out << STRLIT("<VALUE>");
  
         switch (value.getType())         switch (value.getType())
         {         {
Line 837 
Line 577 
             {             {
                 Boolean v;                 Boolean v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 845 
Line 585 
             {             {
                 Uint8 v;                 Uint8 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 853 
Line 593 
             {             {
                 Sint8 v;                 Sint8 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 861 
Line 601 
             {             {
                 Uint16 v;                 Uint16 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 869 
Line 609 
             {             {
                 Sint16 v;                 Sint16 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 877 
Line 617 
             {             {
                 Uint32 v;                 Uint32 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 885 
Line 625 
             {             {
                 Sint32 v;                 Sint32 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 893 
Line 633 
             {             {
                 Uint64 v;                 Uint64 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 901 
Line 641 
             {             {
                 Sint64 v;                 Sint64 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 909 
Line 649 
             {             {
                 Real32 v;                 Real32 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 917 
Line 657 
             {             {
                 Real64 v;                 Real64 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 925 
Line 665 
             {             {
                 Char16 v;                 Char16 v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 933 
Line 673 
             {             {
                 String v;                 String v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
Line 941 
Line 681 
             {             {
                 CIMDateTime v;                 CIMDateTime v;
                 value.get(v);                 value.get(v);
                 _appendValue(out, v);                  _xmlWritter_appendValue(out, v);
                 break;                 break;
             }             }
  
               case CIMTYPE_OBJECT:
               {
                   CIMObject v;
                   value.get(v);
                   _xmlWritter_appendValue(out, v);
                   break;
               }
               case CIMTYPE_INSTANCE:
               {
                   CIMInstance v;
                   value.get(v);
                   _xmlWritter_appendValue(out, v);
                   break;
               }
             default:             default:
                 PEGASUS_ASSERT(false);                  PEGASUS_UNREACHABLE(PEGASUS_ASSERT(false);)
         }         }
  
         out << "</VALUE>\n";          out << STRLIT("</VALUE>\n");
     }     }
 } }
  
Line 957 
Line 711 
     const CIMValue& value,     const CIMValue& value,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendValueElement(tmp, value);     appendValueElement(tmp, value);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 973 
Line 726 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendValueObjectWithPathElement( void XmlWriter::appendValueObjectWithPathElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMObject& objectWithPath)      const CIMObject& objectWithPath,
       Boolean includeQualifiers,
       Boolean includeClassOrigin,
       Boolean isClassObject,
       const CIMPropertyList& propertyList)
 { {
     out << "<VALUE.OBJECTWITHPATH>\n";      out << STRLIT("<VALUE.OBJECTWITHPATH>\n");
   
       appendValueReferenceElement(out, objectWithPath.getPath (),
           isClassObject , false);
  
     appendValueReferenceElement(out, objectWithPath.getPath (), false);      appendObjectElement(
     appendObjectElement(out, objectWithPath);          out,
           objectWithPath,
           includeQualifiers,
           includeClassOrigin,
           propertyList);
  
     out << "</VALUE.OBJECTWITHPATH>\n";      out << STRLIT("</VALUE.OBJECTWITHPATH>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 994 
Line 758 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendValueReferenceElement(  // appends INSTANCEPATH | LOCALINSTANCEPATH | INSTANCENAME
     Array<Sint8>& out,  void XmlWriter::appendValueInstancePathElement(
     const CIMObjectPath& reference,      Buffer& out,
     Boolean putValueWrapper)      const CIMObjectPath& reference)
 {  
     if (putValueWrapper)  
         out << "<VALUE.REFERENCE>\n";  
   
     // See if it is a class or instance reference (instance references have  
     // key-bindings; class references do not).  
     //  
     //  ATTN-CAKG-P2-20020726:  The following condition does not correctly  
     //  distinguish instanceNames from classNames in every case  
     //  The instanceName of a singleton instance of a keyless class has no  
     //  key bindings  
     //  
   
     Array<CIMKeyBinding> kbs = reference.getKeyBindings();  
   
     if (kbs.size())  
     {     {
         if (reference.getHost().size())         if (reference.getHost().size())
         {         {
Line 1028 
Line 776 
             appendInstanceNameElement(out, reference);             appendInstanceNameElement(out, reference);
         }         }
     }     }
     else  
   // appends CLASSPATH | LOCALCLASSPATH | CLASSNAME
   void XmlWriter::appendValueClassPathElement(
       Buffer& out,
       const CIMObjectPath& reference)
     {     {
         if (reference.getHost().size())         if (reference.getHost().size())
         {         {
Line 1044 
Line 796 
         }         }
     }     }
  
     if (putValueWrapper)  // Builds either a classPath or InstancePath based on isClassPath
         out << "</VALUE.REFERENCE>\n";  // parameter which was carried forward from, for example, the
   // request. If wrapper true, wrap output with <VALUE.REFERENCE>
   void XmlWriter::appendValueReferenceElement(
       Buffer& out,
       const CIMObjectPath& reference,
       Boolean isClassPath,
       Boolean addValueWrapper)
   {
       if (addValueWrapper)
       {
            out << STRLIT("<VALUE.REFERENCE>\n");
       }
       if (isClassPath)
       {
           appendValueClassPathElement(out,reference);
       }
       else
       {
           appendValueInstancePathElement(out,reference);
       }
   
       if (addValueWrapper)
       {
           out << STRLIT("</VALUE.REFERENCE>\n");
       }
 } }
  
 void XmlWriter::printValueReferenceElement( void XmlWriter::printValueReferenceElement(
     const CIMObjectPath& reference,     const CIMObjectPath& reference,
       Boolean isClassPath,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendValueReferenceElement(tmp, reference, true);      appendValueReferenceElement(tmp, reference, isClassPath, true);
     tmp.append('\0');  
     indentedPrint(os, tmp.getData());     indentedPrint(os, tmp.getData());
 } }
  
Line 1067 
Line 843 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendValueNamedInstanceElement( void XmlWriter::appendValueNamedInstanceElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMInstance& namedInstance)      const CIMInstance& namedInstance,
       Boolean includeQualifiers,
       Boolean includeClassOrigin,
       const CIMPropertyList& propertyList)
 { {
     out << "<VALUE.NAMEDINSTANCE>\n";      out << STRLIT("<VALUE.NAMEDINSTANCE>\n");
  
     appendInstanceNameElement(out, namedInstance.getPath ());     appendInstanceNameElement(out, namedInstance.getPath ());
     appendInstanceElement(out, namedInstance);      appendInstanceElement(
           out,
           namedInstance,
           includeQualifiers,
           includeClassOrigin,
           propertyList);
  
     out << "</VALUE.NAMEDINSTANCE>\n";      out << STRLIT("</VALUE.NAMEDINSTANCE>\n");
 } }
  
   //EXP_PULL_BEGIN
   //------------------------------------------------------------------------------
   //
   // appendValueInstanceWithPathElement()
   //
   //     <!ELEMENT VALUE.INSTANCEWITHPATH (INSTANCEPATH,INSTANCE)>
   //
   //------------------------------------------------------------------------------
   //
   void XmlWriter::appendValueInstanceWithPathElement(
       Buffer& out,
       const CIMInstance& namedInstance,
           Boolean includeQualifiers,
           Boolean includeClassOrigin,
           const CIMPropertyList& propertyList)
   {
       out << STRLIT("<VALUE.INSTANCEWITHPATH>\n");
   
       appendInstancePathElement(out, namedInstance.getPath ());
       appendInstanceElement(
           out,
           namedInstance,
           includeQualifiers,
           includeClassOrigin,
           propertyList);
   
       out << STRLIT("</VALUE.INSTANCEWITHPATH>\n");
   }
   //EXP_PULL_END
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendClassElement() // appendClassElement()
Line 1091 
Line 904 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendClassElement( void XmlWriter::appendClassElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstClass& cimclass)      const CIMConstClass& cimClass)
   {
       CheckRep(cimClass._rep);
       const CIMClassRep* rep = cimClass._rep;
   
       // Class opening element:
   
       out << STRLIT("<CLASS NAME=\"")
           << rep->getClassName()
           << STRLIT("\" ");
   
       if (!rep->getSuperClassName().isNull())
 { {
     cimclass._checkRep();          out << STRLIT(" SUPERCLASS=\"")
     cimclass._rep->toXml(out);              << rep->getSuperClassName()
               << STRLIT("\" ");
       }
   
       out << STRLIT(">\n");
   
       // Append Class Qualifiers:
   
       for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
           XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
   
       // Append Property definitions:
   
       for (Uint32 i = 0, n = rep->getPropertyCount(); i < n; i++)
           XmlWriter::appendPropertyElement(out, rep->getProperty(i));
   
       // Append Method definitions:
   
       for (Uint32 i = 0, n = rep->getMethodCount(); i < n; i++)
           XmlWriter::appendMethodElement(out, rep->getMethod(i));
   
       // Class closing element:
   
       out << STRLIT("</CLASS>\n");
 } }
  
 void XmlWriter::printClassElement( void XmlWriter::printClassElement(
     const CIMConstClass& cimclass,     const CIMConstClass& cimclass,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendClassElement(tmp, cimclass);     appendClassElement(tmp, cimclass);
     tmp.append('\0');  
     indentedPrint(os, tmp.getData(), 4);     indentedPrint(os, tmp.getData(), 4);
 } }
  
Line 1120 
Line 966 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendInstanceElement( void XmlWriter::appendInstanceElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstInstance& instance)  
 {  
     instance._checkRep();  
     instance._rep->toXml(out);  
 }  
   
 void XmlWriter::printInstanceElement(  
     const CIMConstInstance& instance,     const CIMConstInstance& instance,
     PEGASUS_STD(ostream)& os)      Boolean includeQualifiers,
       Boolean includeClassOrigin,
       const CIMPropertyList& propertyList)
 { {
     Array<Sint8> tmp;      CheckRep(instance._rep);
       const CIMInstanceRep* rep = instance._rep;
   
       // Class opening element:
   
       out << STRLIT("<INSTANCE CLASSNAME=\"")
           << rep->getClassName()
           << STRLIT("\" >\n");
   
       // Append Instance Qualifiers:
       if(includeQualifiers)
       {
           for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
               XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
       }
       if(propertyList.isNull())
       {
           for (Uint32 i = 0, n = rep->getPropertyCount(); i < n; i++)
           {
               XmlWriter::appendPropertyElement(
                   out,
                   rep->getProperty(i),
                   includeQualifiers,includeClassOrigin);
           }
       }
       else
       {
           for (Uint32 i = 0, n = propertyList.size(); i < n; i++)
           {
               CIMName name = propertyList[i];
               Uint32 pos = rep->_properties.find(
                   propertyList[i],
                   propertyList.getCIMNameTag(i));
               if(pos != PEG_NOT_FOUND)
               {
                   PEG_TRACE((TRC_XML,Tracer::LEVEL4,
                       "XmlWriter::appendInstanceElement"
                           " Filtering the property name:%s for the className:%s"
                       "since it was not filtered by the provider.",
                       (const char *)name.getString().getCString(),
                       (const char *)instance.getClassName().
                           getString().getCString()));
   
                   XmlWriter::appendPropertyElement(
                       out,
                       rep->getProperty(pos),
                       includeQualifiers,includeClassOrigin);
               }
           }
   
       }
   
       // Instance closing element:
   
       out << STRLIT("</INSTANCE>\n");
   }
   
   void XmlWriter::printInstanceElement(
       const CIMConstInstance& instance,
       PEGASUS_STD(ostream)& os)
   {
       Buffer tmp;
     appendInstanceElement(tmp, instance);     appendInstanceElement(tmp, instance);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1146 
Line 1047 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendObjectElement( void XmlWriter::appendObjectElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstObject& object)      const CIMConstObject& object,
       Boolean includeQualifiers,
       Boolean includeClassOrigin,
       const CIMPropertyList& propertyList)
 { {
     if (object.isClass())     if (object.isClass())
     {     {
Line 1157 
Line 1061 
     else if (object.isInstance())     else if (object.isInstance())
     {     {
         CIMConstInstance i(object);         CIMConstInstance i(object);
         appendInstanceElement(out, i);          appendInstanceElement(
               out,
               i,
               includeQualifiers,
               includeClassOrigin,
               propertyList);
     }     }
     // else PEGASUS_ASSERT(0);     // else PEGASUS_ASSERT(0);
 } }
Line 1191 
Line 1100 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendPropertyElement( void XmlWriter::appendPropertyElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstProperty& property)      const CIMConstProperty& property,
       Boolean includeQualifiers,
       Boolean includeClassOrigin)
   {
       CheckRep(property._rep);
       const CIMPropertyRep* rep = property._rep;
   
       if (rep->getValue().isArray())
       {
           out << STRLIT("<PROPERTY.ARRAY NAME=\"")
               << rep->getName()
               << STRLIT("\" ");
   
           if (rep->getValue().getType() == CIMTYPE_OBJECT)
           {
               // If the property array type is CIMObject, then
               //     encode the property in CIM-XML as a string array with the
               //     EmbeddedObject attribute (there is not currently a CIM-XML
               //     "object" datatype)
   
               Array<CIMObject> a;
               rep->getValue().get(a);
               out << STRLIT(" TYPE=\"string\"");
               // If the Embedded Object is an instance, always add the
               // EmbeddedObject attribute.
               if (a.size() > 0 && a[0].isInstance())
               {
                   out << STRLIT(" EmbeddedObject=\"object\""
                                 " EMBEDDEDOBJECT=\"object\"");
               }
   #ifndef PEGASUS_SNIA_INTEROP_COMPATIBILITY
               else
   #endif
               {
                   // Else the Embedded Object is a class, always add the
                   // EmbeddedObject qualifier.  Note that if the macro
                   // PEGASUS_SNIA_INTEROP_COMPATIBILITY is defined, then
                   // the EmbeddedObject qualifier will always be added,
                   // whether it's a class or an instance.
                   if (rep->findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT) ==
                           PEG_NOT_FOUND)
                   {
                       // Note that addQualifiers() cannot be called on a const
                       // CIMQualifierRep.  In this case we really do want to add
                       // the EmbeddedObject qualifier, so we cast away the
                       // constness.
                       CIMPropertyRep* tmpRep = const_cast<CIMPropertyRep*>(rep);
                       tmpRep->addQualifier(
                           CIMQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT,
                                        true));
                   }
               }
           }
           else if (rep->getValue().getType() == CIMTYPE_INSTANCE)
           {
               // If the property array type is CIMInstance, then
               //   encode the property in CIM-XML as a string array with the
               //   EmbeddedObject attribute (there is not currently a CIM-XML
               //   "instance" datatype)
   
               Array<CIMInstance> a;
               rep->getValue().get(a);
               out << STRLIT(" TYPE=\"string\"");
   
               // add the EmbeddedObject attribute
               if (a.size() > 0)
               {
                   out << STRLIT(" EmbeddedObject=\"instance\""
                                 " EMBEDDEDOBJECT=\"instance\"");
   
                   // Note that if the macro PEGASUS_SNIA_INTEROP_COMPATIBILITY is
                   // defined, then the EmbeddedInstance qualifier will be added
   # ifdef PEGASUS_SNIA_INTEROP_COMPATIBILITY
                   if (rep->findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE)
                           == PEG_NOT_FOUND)
                   {
                       // Note that addQualifiers() cannot be called on a const
                       // CIMQualifierRep.  In this case we really do want to add
                       // the EmbeddedInstance qualifier, so we cast away the
                       // constness.
   
                       // For now, we assume that all the embedded instances in
                       // the array are of the same type
                       CIMPropertyRep* tmpRep = const_cast<CIMPropertyRep*>(rep);
                       tmpRep->addQualifier(CIMQualifier(
                           PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE,
                           a[0].getClassName().getString()));
                   }
   # endif
               }
           }
           else
           {
               out.append(' ');
               out << xmlWriterTypeStrings(rep->getValue().getType());
           }
   
           if (rep->getArraySize())
           {
               char buffer[32];
               sprintf(buffer, "%u", rep->getArraySize());
               out << STRLIT(" ARRAYSIZE=\"") << buffer;
               out.append('"');
           }
   
           if(includeClassOrigin && !rep->getClassOrigin().isNull())
           {
               out << STRLIT(" CLASSORIGIN=\"") << rep->getClassOrigin();
               out.append('"');
           }
   
           if (rep->getPropagated())
           {
               out << STRLIT(" PROPAGATED=\"true\"");
           }
   
           out << STRLIT(">\n");
           if(includeQualifiers)
           {
               for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
                   XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
           }
   
           XmlWriter::appendValueElement(out, rep->getValue());
   
           out << STRLIT("</PROPERTY.ARRAY>\n");
       }
       else if (rep->getValue().getType() == CIMTYPE_REFERENCE)
       {
           out << STRLIT("<PROPERTY.REFERENCE"
                         " NAME=\"") << rep->getName() << STRLIT("\" ");
   
           if (!rep->getReferenceClassName().isNull())
           {
               out << STRLIT(" REFERENCECLASS=\"") << rep->getReferenceClassName();
               out.append('"');
           }
           if(includeClassOrigin && !rep->getClassOrigin().isNull())
           {
               out << STRLIT(" CLASSORIGIN=\"") << rep->getClassOrigin();
               out.append('"');
           }
   
           if (rep->getPropagated())
           {
               out << STRLIT(" PROPAGATED=\"true\"");
           }
   
           out << STRLIT(">\n");
           if(includeQualifiers)
           {
               for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
                   XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
           }
   
           XmlWriter::appendValueElement(out, rep->getValue());
   
           out << STRLIT("</PROPERTY.REFERENCE>\n");
       }
       else
       {
           out << STRLIT("<PROPERTY NAME=\"") << rep->getName() << STRLIT("\" ");
           if(includeClassOrigin && !rep->getClassOrigin().isNull())
           {
               out << STRLIT(" CLASSORIGIN=\"") << rep->getClassOrigin();
               out.append('"');
           }
   
           if (rep->getPropagated())
           {
               out << STRLIT(" PROPAGATED=\"true\"");
           }
   
           if (rep->getValue().getType() == CIMTYPE_OBJECT)
 { {
     property._checkRep();              // If the property type is CIMObject, then
     property._rep->toXml(out);              //   encode the property in CIM-XML as a string with the
               //   EmbeddedObject attribute (there is not currently a CIM-XML
               //   "object" datatype)
   
               CIMObject a;
               rep->getValue().get(a);
               out << STRLIT(" TYPE=\"string\"");
   
               // If the Embedded Object is an instance, always add the
               // EmbeddedObject attribute.
               if (a.isInstance())
               {
                   out << STRLIT(" EmbeddedObject=\"object\""
                                 " EMBEDDEDOBJECT=\"object\"");
               }
               // Else the Embedded Object is a class, always add the
               // EmbeddedObject qualifier.
   #ifndef PEGASUS_SNIA_INTEROP_COMPATIBILITY
               else
   #endif
               {
                   // Note that if the macro PEGASUS_SNIA_INTEROP_COMPATIBILITY
                   // is defined, then the EmbeddedObject qualifier will always
                   // be added, whether it's a class or an instance.
                   if (rep->findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT) ==
                           PEG_NOT_FOUND)
                   {
                       // Note that addQualifiers() cannot be called on a const
                       // CIMQualifierRep.  In this case we really do want to add
                       // the EmbeddedObject qualifier, so we cast away the
                       // constness.
                       CIMPropertyRep* tmpRep = const_cast<CIMPropertyRep*>(rep);
                       tmpRep->addQualifier(
                           CIMQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT,
                                        true));
                   }
               }
           }
           else if (rep->getValue().getType() == CIMTYPE_INSTANCE)
           {
               CIMInstance a;
               rep->getValue().get(a);
               out << STRLIT(" TYPE=\"string\""
                             " EmbeddedObject=\"instance\""
                             " EMBEDDEDOBJECT=\"instance\"");
   
   # ifdef PEGASUS_SNIA_INTEROP_COMPATIBILITY
               if (rep->findQualifier(PEGASUS_QUALIFIERNAME_EMBEDDEDOBJECT)
                   == PEG_NOT_FOUND)
               {
                   // Note that addQualifiers() cannot be called on a const
                   // CIMQualifierRep.  In this case we really do want to add
                   // the EmbeddedInstance qualifier, so we cast away the
                   // constness.
                   CIMPropertyRep* tmpRep = const_cast<CIMPropertyRep*>(rep);
                   tmpRep->addQualifier(CIMQualifier(
                       PEGASUS_QUALIFIERNAME_EMBEDDEDINSTANCE,
                       a.getClassName().getString()));
               }
   # endif
           }
           else
           {
               out.append(' ');
               out << xmlWriterTypeStrings(rep->getValue().getType());
           }
   
           out << STRLIT(">\n");
           if(includeQualifiers)
           {
               for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
                   XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
           }
   
           XmlWriter::appendValueElement(out, rep->getValue());
   
           out << STRLIT("</PROPERTY>\n");
       }
 } }
  
 void XmlWriter::printPropertyElement( void XmlWriter::printPropertyElement(
     const CIMConstProperty& property,     const CIMConstProperty& property,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendPropertyElement(tmp, property);     appendPropertyElement(tmp, property);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1223 
Line 1381 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendMethodElement( void XmlWriter::appendMethodElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstMethod& method)     const CIMConstMethod& method)
 { {
     method._checkRep();      CheckRep(method._rep);
     method._rep->toXml(out);      const CIMMethodRep* rep = method._rep;
   
       out << STRLIT("<METHOD NAME=\"") << rep->getName();
       out << STRLIT("\" ");
   
       out << xmlWriterTypeStrings(rep->getType());
   
       if (!rep->getClassOrigin().isNull())
       {
           out << STRLIT(" CLASSORIGIN=\"") << rep->getClassOrigin();
           out.append('"');
       }
   
       if (rep->getPropagated())
       {
           out << STRLIT(" PROPAGATED=\"true\"");
       }
   
       out << STRLIT(">\n");
   
       for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
           XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
   
       for (Uint32 i = 0, n = rep->getParameterCount(); i < n; i++)
           XmlWriter::appendParameterElement(out, rep->getParameter(i));
   
       out << STRLIT("</METHOD>\n");
 } }
  
 void XmlWriter::printMethodElement( void XmlWriter::printMethodElement(
     const CIMConstMethod& method,     const CIMConstMethod& method,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendMethodElement(tmp, method);     appendMethodElement(tmp, method);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1269 
Line 1452 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendParameterElement( void XmlWriter::appendParameterElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstParameter& parameter)     const CIMConstParameter& parameter)
 { {
     parameter._checkRep();      CheckRep(parameter._rep);
     parameter._rep->toXml(out);      const CIMParameterRep* rep = parameter._rep;
   
       if (rep->isArray())
       {
           if (rep->getType() == CIMTYPE_REFERENCE)
           {
               out << STRLIT("<PARAMETER.REFARRAY NAME=\"") << rep->getName();
               out.append('"');
   
               if (!rep->getReferenceClassName().isNull())
               {
                   out << STRLIT(" REFERENCECLASS=\"");
                   out << rep->getReferenceClassName().getString();
                   out.append('"');
               }
   
               if (rep->getArraySize())
               {
                   char buffer[32];
                   int n = sprintf(buffer, "%u", rep->getArraySize());
                   out << STRLIT(" ARRAYSIZE=\"");
                   out.append(buffer, n);
                   out.append('"');
               }
   
               out << STRLIT(">\n");
   
               for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
                   XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
   
               out << STRLIT("</PARAMETER.REFARRAY>\n");
           }
           else
           {
               out << STRLIT("<PARAMETER.ARRAY"
                             " NAME=\"") << rep->getName();
               out << STRLIT("\" ") << xmlWriterTypeStrings(rep->getType());
   
               if (rep->getArraySize())
               {
                   char buffer[32];
                   sprintf(buffer, "%u", rep->getArraySize());
                   out << STRLIT(" ARRAYSIZE=\"") << buffer;
                   out.append('"');
               }
   
               out << STRLIT(">\n");
   
               for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
                   XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
   
               out << STRLIT("</PARAMETER.ARRAY>\n");
           }
       }
       else if (rep->getType() == CIMTYPE_REFERENCE)
       {
           out << STRLIT("<PARAMETER.REFERENCE"
                         " NAME=\"") << rep->getName();
           out.append('"');
   
           if (!rep->getReferenceClassName().isNull())
           {
               out << STRLIT(" REFERENCECLASS=\"");
               out << rep->getReferenceClassName().getString();
               out.append('"');
           }
           out << STRLIT(">\n");
   
           for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
               XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
   
           out << STRLIT("</PARAMETER.REFERENCE>\n");
       }
       else
       {
           out << STRLIT("<PARAMETER"
                         " NAME=\"") << rep->getName();
           out << STRLIT("\" ") << xmlWriterTypeStrings(rep->getType());
   
           out << STRLIT(">\n");
   
           for (Uint32 i = 0, n = rep->getQualifierCount(); i < n; i++)
               XmlWriter::appendQualifierElement(out, rep->getQualifier(i));
   
           out << STRLIT("</PARAMETER>\n");
       }
 } }
  
 void XmlWriter::printParameterElement( void XmlWriter::printParameterElement(
     const CIMConstParameter& parameter,     const CIMConstParameter& parameter,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendParameterElement(tmp, parameter);     appendParameterElement(tmp, parameter);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1292 
Line 1559 
 // //
 //     <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?> //     <!ELEMENT PARAMVALUE (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?>
 //     <!ATTLIST PARAMVALUE //     <!ATTLIST PARAMVALUE
 //              %CIMName;>  //         %CIMName;
   //         %EmbeddedObject; #IMPLIED
   //         %ParamType;>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendParamValueElement( void XmlWriter::appendParamValueElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMParamValue& paramValue)     const CIMParamValue& paramValue)
 { {
     paramValue._checkRep();      CheckRep(paramValue._rep);
     paramValue._rep->toXml(out);      const CIMParamValueRep* rep = paramValue._rep;
   
       out << STRLIT("<PARAMVALUE NAME=\"") << rep->getParameterName();
       out.append('"');
   
       CIMType type = rep->getValue().getType();
   
       if (rep->isTyped())
       {
           XmlWriter::appendParamTypeAndEmbeddedObjAttrib(out, type);
       }
   
       out << STRLIT(">\n");
       XmlWriter::appendValueElement(out, rep->getValue());
   
       out << STRLIT("</PARAMVALUE>\n");
 } }
  
 void XmlWriter::printParamValueElement( void XmlWriter::printParamValueElement(
     const CIMParamValue& paramValue,     const CIMParamValue& paramValue,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendParamValueElement(tmp, paramValue);     appendParamValueElement(tmp, paramValue);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1328 
Line 1611 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendQualifierElement( void XmlWriter::appendQualifierElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstQualifier& qualifier)     const CIMConstQualifier& qualifier)
 { {
     qualifier._checkRep();      CheckRep(qualifier._rep);
     qualifier._rep->toXml(out);      const CIMQualifierRep* rep = qualifier._rep;
   
       out << STRLIT("<QUALIFIER NAME=\"") << rep->getName();
       out << STRLIT("\" ") << xmlWriterTypeStrings(rep->getValue().getType());
   
       if (rep->getPropagated())
       {
           out << STRLIT(" PROPAGATED=\"true\"");
       }
   
       XmlWriter::appendQualifierFlavorEntity(out, rep->getFlavor());
   
       out << STRLIT(">\n");
   
       XmlWriter::appendValueElement(out, rep->getValue());
   
       out << STRLIT("</QUALIFIER>\n");
 } }
  
 void XmlWriter::printQualifierElement( void XmlWriter::printQualifierElement(
     const CIMConstQualifier& qualifier,     const CIMConstQualifier& qualifier,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendQualifierElement(tmp, qualifier);     appendQualifierElement(tmp, qualifier);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1360 
Line 1658 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendQualifierDeclElement( void XmlWriter::appendQualifierDeclElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMConstQualifierDecl& qualifierDecl)     const CIMConstQualifierDecl& qualifierDecl)
 { {
     qualifierDecl._checkRep();      CheckRep(qualifierDecl._rep);
     qualifierDecl._rep->toXml(out);      const CIMQualifierDeclRep* rep = qualifierDecl._rep;
   
       out << STRLIT("<QUALIFIER.DECLARATION NAME=\"") << rep->getName();
       out << STRLIT("\" ") << xmlWriterTypeStrings(rep->getValue().getType());
   
       if (rep->getValue().isArray())
       {
           out << STRLIT(" ISARRAY=\"true\"");
   
           if (rep->getArraySize())
           {
               char buffer[64];
               int n = sprintf(buffer, " ARRAYSIZE=\"%u\"", rep->getArraySize());
               out.append(buffer, n);
           }
       }
   
       XmlWriter::appendQualifierFlavorEntity(out, rep->getFlavor());
   
       out << STRLIT(">\n");
   
       XmlWriter::appendScopeElement(out, rep->getScope());
       XmlWriter::appendValueElement(out, rep->getValue());
   
       out << STRLIT("</QUALIFIER.DECLARATION>\n");
 } }
  
 void XmlWriter::printQualifierDeclElement( void XmlWriter::printQualifierDeclElement(
     const CIMConstQualifierDecl& qualifierDecl,     const CIMConstQualifierDecl& qualifierDecl,
     PEGASUS_STD(ostream)& os)     PEGASUS_STD(ostream)& os)
 { {
     Array<Sint8> tmp;      Buffer tmp;
     appendQualifierDeclElement(tmp, qualifierDecl);     appendQualifierDeclElement(tmp, qualifierDecl);
     tmp.append('\0');  
     os << tmp.getData() << PEGASUS_STD(endl);     os << tmp.getData() << PEGASUS_STD(endl);
 } }
  
Line 1386 
Line 1707 
 //                                 TOINSTANCE   (true|false)   'false' //                                 TOINSTANCE   (true|false)   'false'
 //                                 TRANSLATABLE (true|false)   'false'"> //                                 TRANSLATABLE (true|false)   'false'">
 // //
   //     DEPRECATION NOTE:  The attribute TOINSTANCE is DEPRECATED and MAY be
   //     removed from the QualifierFlavor entity in a future version of this
   //     document.  Use of this qualifier is discouraged.
   //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendQualifierFlavorEntity( void XmlWriter::appendQualifierFlavorEntity(
     Array<Sint8>& out,      Buffer& out,
     const CIMFlavor & flavor)     const CIMFlavor & flavor)
 { {
     if (!(flavor.hasFlavor (CIMFlavor::OVERRIDABLE)))     if (!(flavor.hasFlavor (CIMFlavor::OVERRIDABLE)))
         out << " OVERRIDABLE=\"false\"";          out << STRLIT(" OVERRIDABLE=\"false\"");
  
     if (!(flavor.hasFlavor (CIMFlavor::TOSUBCLASS)))     if (!(flavor.hasFlavor (CIMFlavor::TOSUBCLASS)))
         out << " TOSUBCLASS=\"false\"";          out << STRLIT(" TOSUBCLASS=\"false\"");
  
     if (flavor.hasFlavor (CIMFlavor::TOINSTANCE))      //if (flavor.hasFlavor (CIMFlavor::TOINSTANCE))
         out << " TOINSTANCE=\"true\"";      //    out << STRLIT(" TOINSTANCE=\"true\"");
  
     if (flavor.hasFlavor (CIMFlavor::TRANSLATABLE))     if (flavor.hasFlavor (CIMFlavor::TRANSLATABLE))
         out << " TRANSLATABLE=\"true\"";          out << STRLIT(" TRANSLATABLE=\"true\"");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1422 
Line 1747 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendScopeElement( void XmlWriter::appendScopeElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMScope & scope)     const CIMScope & scope)
 { {
     if (!(scope.equal (CIMScope ())))     if (!(scope.equal (CIMScope ())))
     {     {
         out << "<SCOPE";          out << STRLIT("<SCOPE");
  
         if (scope.hasScope (CIMScope::CLASS))         if (scope.hasScope (CIMScope::CLASS))
             out << " CLASS=\"true\"";              out << STRLIT(" CLASS=\"true\"");
  
         if (scope.hasScope (CIMScope::ASSOCIATION))         if (scope.hasScope (CIMScope::ASSOCIATION))
             out << " ASSOCIATION=\"true\"";              out << STRLIT(" ASSOCIATION=\"true\"");
  
         if (scope.hasScope (CIMScope::REFERENCE))         if (scope.hasScope (CIMScope::REFERENCE))
             out << " REFERENCE=\"true\"";              out << STRLIT(" REFERENCE=\"true\"");
  
         if (scope.hasScope (CIMScope::PROPERTY))         if (scope.hasScope (CIMScope::PROPERTY))
             out << " PROPERTY=\"true\"";              out << STRLIT(" PROPERTY=\"true\"");
  
         if (scope.hasScope (CIMScope::METHOD))         if (scope.hasScope (CIMScope::METHOD))
             out << " METHOD=\"true\"";              out << STRLIT(" METHOD=\"true\"");
  
         if (scope.hasScope (CIMScope::PARAMETER))         if (scope.hasScope (CIMScope::PARAMETER))
             out << " PARAMETER=\"true\"";              out << STRLIT(" PARAMETER=\"true\"");
  
         if (scope.hasScope (CIMScope::INDICATION))         if (scope.hasScope (CIMScope::INDICATION))
             out << " INDICATION=\"true\"";              out << STRLIT(" INDICATION=\"true\"");
  
         out << "/>";          out << STRLIT("/>");
     }     }
 } }
  
   // l10n - added content language and accept language support to
   // the header methods below
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendMethodCallHeader() // appendMethodCallHeader()
Line 1463 
Line 1791 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendMethodCallHeader( void XmlWriter::appendMethodCallHeader(
     Array<Sint8>& out,      Buffer& out,
     const char* host,     const char* host,
     const CIMName& cimMethod,     const CIMName& cimMethod,
     const String& cimObject,     const String& cimObject,
     const String& authenticationHeader,     const String& authenticationHeader,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     Uint32 contentLength)      const AcceptLanguageList& acceptLanguages,
       const ContentLanguageList& contentLanguages,
       Uint32 contentLength,
       bool binaryRequest,
       bool binaryResponse)
 { {
     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };
  
Line 1479 
Line 1811 
     // do that in client today. Permanent change is to retry until spec     // do that in client today. Permanent change is to retry until spec
     // updated. This change is temp to finish tests or until the retry     // updated. This change is temp to finish tests or until the retry
     // installed.  Required because of change to wbemservices cimom     // installed.  Required because of change to wbemservices cimom
 #ifdef PEGASUS_SNIA_INTEROP_TEST  
     out << "POST /cimom HTTP/1.1\r\n";  
 #else  
     if (httpMethod == HTTP_METHOD_M_POST)     if (httpMethod == HTTP_METHOD_M_POST)
     {     {
         out << "M-POST /cimom HTTP/1.1\r\n";          out << STRLIT("M-POST /cimom HTTP/1.1\r\n");
     }     }
     else     else
     {     {
         out << "POST /cimom HTTP/1.1\r\n";          out << STRLIT("POST /cimom HTTP/1.1\r\n");
     }     }
       out << STRLIT("HOST: ") << host << STRLIT("\r\n");
   
       if (binaryRequest)
       {
           // Tell the server that the payload is encoded in the OpenPegasus
           // binary protocol.
           out << STRLIT("Content-Type: application/x-openpegasus\r\n");
       }
       else
       {
           out << STRLIT("Content-Type: application/xml; charset=utf-8\r\n");
       }
   
       if (binaryResponse)
       {
           // Tell the server that this client accepts the OpenPegasus binary
           // protocol.
           out << STRLIT("Accept: application/x-openpegasus\r\n");
       }
   
       OUTPUT_CONTENTLENGTH(out, contentLength);
       if (acceptLanguages.size() > 0)
       {
           out << STRLIT("Accept-Language: ") << acceptLanguages << STRLIT("\r\n");
       }
       if (contentLanguages.size() > 0)
       {
           out << STRLIT("Content-Language: ") << contentLanguages <<
               STRLIT("\r\n");
       }
   
   #ifdef PEGASUS_DEBUG
       // backdoor environment variable to turn OFF client requesting transfer
       // encoding. The default is on. to turn off, set this variable to zero.
       // This should be removed when stable. This should only be turned off in
       // a debugging/testing environment.
   
   ////    static const char *clientTransferEncodingOff =
   ////        getenv("PEGASUS_HTTP_TRANSFER_ENCODING_REQUEST");
   
       // EXP_PULL_TEMP DELETE
       // KS_TODO - Remove this. Temp to insure no chunking during testing
       //  if (!clientTransferEncodingOff || *clientTransferEncodingOff != '0')
 #endif #endif
     out << "HOST: " << host << "\r\n";  
     out << "Content-Type: application/xml; charset=\"utf-8\"\r\n";      // EXP_PULL TEMP DELETE out << STRLIT("TE: chunked, trailers\r\n");
     out << "Content-Length: " << contentLength << "\r\n";  
       if (!binaryResponse)
       {
           // The binary protocol does not allow chunking.
           out << STRLIT("TE: chunked, trailers\r\n");
       }
   
     if (httpMethod == HTTP_METHOD_M_POST)     if (httpMethod == HTTP_METHOD_M_POST)
     {     {
         out << "Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=";          out << STRLIT("Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=");
         out << nn <<"\r\n";          out << nn << STRLIT("\r\n");
         out << nn << "-CIMOperation: MethodCall\r\n";          out << nn << STRLIT("-CIMOperation: MethodCall\r\n");
         out << nn << "-CIMMethod: "          out << nn << STRLIT("-CIMMethod: ")
             << encodeURICharacters(cimMethod.getString()) << "\r\n";              << encodeURICharacters(cimMethod.getString()) << STRLIT("\r\n");
         out << nn << "-CIMObject: " << encodeURICharacters(cimObject) << "\r\n";          out << nn << STRLIT("-CIMObject: ")
               << encodeURICharacters(cimObject) << STRLIT("\r\n");
     }     }
     else     else
     {     {
         out << "CIMOperation: MethodCall\r\n";          out << STRLIT("CIMOperation: MethodCall\r\n");
         out << "CIMMethod: " << encodeURICharacters(cimMethod.getString())          out << STRLIT("CIMMethod: ")
             << "\r\n";              << encodeURICharacters(cimMethod.getString()) << STRLIT("\r\n");
         out << "CIMObject: " << encodeURICharacters(cimObject) << "\r\n";          out << STRLIT("CIMObject: ") << encodeURICharacters(cimObject)
               << STRLIT("\r\n");
     }     }
  
     if (authenticationHeader.size())     if (authenticationHeader.size())
     {     {
         out << authenticationHeader << "\r\n";          out << authenticationHeader << STRLIT("\r\n");
     }     }
     out << "\r\n";  
       out << STRLIT("\r\n");
 } }
  
 //------------------------------------------------------------------------------  
 //  
 // appendMethodResponseHeader()  
 //  
 //     Build HTTP response header.  
 //  
 //------------------------------------------------------------------------------  
  
 void XmlWriter::appendMethodResponseHeader( void XmlWriter::appendMethodResponseHeader(
     Array<Sint8>& out,       Buffer& out,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     Uint32 contentLength)       const ContentLanguageList& contentLanguages,
        Uint32 contentLength,
        Uint64 serverResponseTime,
        bool binaryResponse)
   {
       // Optimize the typical case for binary messages, circumventing the
       // more expensive logic below.
       if (binaryResponse &&
           contentLength == 0 &&
           httpMethod != HTTP_METHOD_M_POST &&
           contentLanguages.size() == 0)
       {
           static const char HEADERS[] =
               "HTTP/1.1 200 OK\r\n"
               "Content-Type: application/x-openpegasus\r\n"
               "content-length: 0000000000\r\n"
               "CIMOperation: MethodResponse\r\n"
               "\r\n";
   
           // The HTTP processor fills in the content-length value later.
           // It searches for a field matching "content-length" (so the first
           // character must be lower case).
           out.append(HEADERS, sizeof(HEADERS) - 1);
           return;
       }
   
        out << STRLIT("HTTP/1.1 " HTTP_STATUS_OK "\r\n");
   
   #ifndef PEGASUS_DISABLE_PERFINST
        if (StatisticalData::current()->copyGSD)
 { {
     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };           out << STRLIT("WBEMServerResponseTime: ") <<
                CIMValue(serverResponseTime).toString() << STRLIT("\r\n");
        }
   #endif
  
     out << "HTTP/1.1 " HTTP_STATUS_OK "\r\n";       if (binaryResponse)
     STAT_SERVERTIME       {
     out << "Content-Type: application/xml; charset=\"utf-8\"\r\n";          // According to MIME RFC, the "x-" prefix should be used for all
     out << "Content-Length: " << contentLength << "\r\n";          // non-registered values.
            out << STRLIT("Content-Type: application/x-openpegasus\r\n");
        }
        else
        {
            out << STRLIT("Content-Type: application/xml; charset=utf-8\r\n");
        }
   
        OUTPUT_CONTENTLENGTH(out, contentLength);
   
        if (contentLanguages.size() > 0)
        {
            out << STRLIT("Content-Language: ") << contentLanguages <<
                STRLIT("\r\n");
        }
     if (httpMethod == HTTP_METHOD_M_POST)     if (httpMethod == HTTP_METHOD_M_POST)
     {     {
         out << "Ext:\r\n";           char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };
         out << "Cache-Control: no-cache\r\n";  
         out << "Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=";           out << STRLIT("Ext:\r\n"
         out << nn <<"\r\n";                         "Cache-Control: no-cache\r\n"
         out << nn << "-CIMOperation: MethodResponse\r\n\r\n";                         "Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=");
            out << nn << STRLIT("\r\n");
            out << nn << STRLIT("-CIMOperation: MethodResponse\r\n\r\n");
     }     }
     else     else
     {     {
         out << "CIMOperation: MethodResponse\r\n\r\n";           out << STRLIT("CIMOperation: MethodResponse\r\n\r\n");
     }     }
 } }
  
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendHttpErrorResponseHeader() // appendHttpErrorResponseHeader()
Line 1566 
Line 1989 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendHttpErrorResponseHeader( void XmlWriter::appendHttpErrorResponseHeader(
     Array<Sint8>& out,      Buffer& out,
     const String& status,     const String& status,
     const String& cimError,     const String& cimError,
     const String& errorDetail)     const String& errorDetail)
 { {
     out << "HTTP/1.1 " << status << "\r\n";      out << STRLIT("HTTP/1.1 ") << status << STRLIT("\r\n");
     if (cimError != String::EMPTY)     if (cimError != String::EMPTY)
     {     {
         out << "CIMError: " << cimError << "\r\n";          out << STRLIT("CIMError: ") << cimError << STRLIT("\r\n");
     }     }
     if (errorDetail != String::EMPTY)     if (errorDetail != String::EMPTY)
     {     {
         // ATTN-RK-P3-20020404: It is critical that this text not contain '\n'          out << STRLIT(PEGASUS_HTTPHEADERTAG_ERRORDETAIL ": ")
         // ATTN-RK-P3-20020404: Need to encode this value properly.  (See              << encodeURICharacters(errorDetail) << STRLIT("\r\n");
         // CIM/HTTP Specification section 3.3.2  
         out << PEGASUS_HTTPHEADERTAG_ERRORDETAIL ": "  
             << encodeURICharacters(errorDetail) << "\r\n";  
     }     }
     out << "\r\n";      out << STRLIT("\r\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1596 
Line 2016 
 //     Returns unauthorized message in the following format: //     Returns unauthorized message in the following format:
 // //
 //        HTTP/1.1 401 Unauthorized //        HTTP/1.1 401 Unauthorized
 //        WWW-Authenticate: Basic "hostname:80"  //        WWW-Authenticate: Basic realm="HostName"
 //        <HTML><HEAD> //        <HTML><HEAD>
 //        <TITLE>401 Unauthorized</TITLE> //        <TITLE>401 Unauthorized</TITLE>
 //        </HEAD><BODY BGCOLOR="#99cc99"> //        </HEAD><BODY BGCOLOR="#99cc99">
Line 1607 
Line 2027 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendUnauthorizedResponseHeader( void XmlWriter::appendUnauthorizedResponseHeader(
     Array<Sint8>& out,      Buffer& out,
     const String& content)     const String& content)
 { {
     out << "HTTP/1.1 " HTTP_STATUS_UNAUTHORIZED "\r\n";      out << STRLIT("HTTP/1.1 " HTTP_STATUS_UNAUTHORIZED "\r\n");
     out << content << "\r\n";      OUTPUT_CONTENTLENGTH(out, 0);
     out << "\r\n";      out << content << STRLIT("\r\n\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.
Line 1624 
Line 2044 
 //    out << "</BODY></HTML>\r\n"; //    out << "</BODY></HTML>\r\n";
 } }
  
   #ifdef PEGASUS_KERBEROS_AUTHENTICATION
   //------------------------------------------------------------------------------
   //
   // appendOKResponseHeader()
   //
   //     Build HTTP authentication response header for unauthorized requests.
   //
   //     Returns OK message in the following format:
   //
   //        HTTP/1.1 200 OK
   //        Content-Length: 0
   //        WWW-Authenticate: Negotiate "token"
   //        <HTML><HEAD>
   //        <TITLE>200 OK</TITLE>
   //        </HEAD><BODY BGCOLOR="#99cc99">
   //        <H2>TEST200 OK</H2>
   //        <HR>
   //        </BODY></HTML>
   //
   //------------------------------------------------------------------------------
   
   void XmlWriter::appendOKResponseHeader(
       Buffer& out,
       const String& content)
   {
       out << STRLIT("HTTP/1.1 " HTTP_STATUS_OK "\r\n");
       // Content-Length header needs to be added because 200 OK record
       // is usually intended to have content.  But, for Kerberos this
       // may not always be the case so we need to indicate that there
       // is no content
       OUTPUT_CONTENTLENGTH(out, 0);
       out << content << STRLIT("\r\n\r\n");
   
   //ATTN: We may need to include the following line, so that the browsers
   //      can display the error message.
   //    out << "<HTML><HEAD>\r\n";
   //    out << "<TITLE>" << "200 OK" <<  "</TITLE>\r\n";
   //    out << "</HEAD><BODY BGCOLOR=\"#99cc99\">\r\n";
   //    out << "<H2>TEST" << "200 OK" << "</H2>\r\n";
   //    out << "<HR>\r\n";
   //    out << "</BODY></HTML>\r\n";
   }
   #endif
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // _appendMessageElementBegin() // _appendMessageElementBegin()
Line 1637 
Line 2101 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendMessageElementBegin( void XmlWriter::_appendMessageElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const String& messageId)     const String& messageId)
 { {
     out << "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";      out << STRLIT("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
     out << "<CIM CIMVERSION=\"2.0\" DTDVERSION=\"2.0\">\n";                    "<CIM CIMVERSION=\"2.0\" DTDVERSION=\"2.0\">\n"
     out << "<MESSAGE ID=\"" << messageId << "\" PROTOCOLVERSION=\"1.0\">\n";                    "<MESSAGE ID=\"") << messageId;
       out << STRLIT("\" PROTOCOLVERSION=\"1.0\">\n");
 } }
  
 void XmlWriter::_appendMessageElementEnd( void XmlWriter::_appendMessageElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</MESSAGE>\n";      out << STRLIT("</MESSAGE>\n</CIM>\n");
     out << "</CIM>\n";  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1662 
Line 2126 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendSimpleReqElementBegin( void XmlWriter::_appendSimpleReqElementBegin(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "<SIMPLEREQ>\n";      out << STRLIT("<SIMPLEREQ>\n");
 } }
  
 void XmlWriter::_appendSimpleReqElementEnd( void XmlWriter::_appendSimpleReqElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</SIMPLEREQ>\n";      out << STRLIT("</SIMPLEREQ>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1684 
Line 2148 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendMethodCallElementBegin( void XmlWriter::_appendMethodCallElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& name)     const CIMName& name)
 { {
     out << "<METHODCALL NAME=\"" << name << "\">\n";      out << STRLIT("<METHODCALL NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendMethodCallElementEnd( void XmlWriter::_appendMethodCallElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</METHODCALL>\n";      out << STRLIT("</METHODCALL>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1706 
Line 2170 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendIMethodCallElementBegin(  void XmlWriter::_appendIMethodCallElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& name)      const CIMName& name)
   {
       out << STRLIT("<IMETHODCALL NAME=\"") << name << STRLIT("\">\n");
   }
   
   void XmlWriter::_appendIMethodCallElementEnd(
       Buffer& out)
   {
       out << STRLIT("</IMETHODCALL>\n");
   }
   
   //------------------------------------------------------------------------------
   //
   // _appendIParamValueElementBegin()
   // _appendIParamValueElementEnd()
   //
   //     <!ELEMENT IPARAMVALUE (VALUE|VALUE.ARRAY|VALUE.REFERENCE
   //         |INSTANCENAME|CLASSNAME|QUALIFIER.DECLARATION
   //         |CLASS|INSTANCE|VALUE.NAMEDINSTANCE)?>
   //     <!ATTLIST IPARAMVALUE %CIMName;>
   //
   //------------------------------------------------------------------------------
   
   void XmlWriter::_appendIParamValueElementBegin(
       Buffer& out,
       const char* name)
 { {
     out << "<IMETHODCALL NAME=\"" << name << "\">\n";      out << STRLIT("<IPARAMVALUE NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendIMethodCallElementEnd(  void XmlWriter::_appendIParamValueElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</IMETHODCALL>\n";      out << STRLIT("</IPARAMVALUE>\n");
 } }
  
   //EXP_PULL_BEGIN
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // _appendIParamValueElementBegin()  // _appendParamValueElementBegin()
 // _appendIParamValueElementEnd()  // _appendParamValueElementEnd()
 // //
 //     <!ELEMENT IPARAMVALUE (VALUE|VALUE.ARRAY|VALUE.REFERENCE //     <!ELEMENT IPARAMVALUE (VALUE|VALUE.ARRAY|VALUE.REFERENCE
 //         |INSTANCENAME|CLASSNAME|QUALIFIER.DECLARATION //         |INSTANCENAME|CLASSNAME|QUALIFIER.DECLARATION
Line 1731 
Line 2221 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendIParamValueElementBegin(  void XmlWriter::_appendParamValueElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const char* name)     const char* name)
 { {
     out << "<IPARAMVALUE NAME=\"" << name << "\">\n";      out << STRLIT("<PARAMVALUE NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendIParamValueElementEnd(  void XmlWriter::_appendParamValueElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</IPARAMVALUE>\n";      out << STRLIT("</PARAMVALUE>\n");
 } }
   //EXP_PULL_END
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
Line 1754 
Line 2245 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendSimpleRspElementBegin( void XmlWriter::_appendSimpleRspElementBegin(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "<SIMPLERSP>\n";      out << STRLIT("<SIMPLERSP>\n");
 } }
  
 void XmlWriter::_appendSimpleRspElementEnd( void XmlWriter::_appendSimpleRspElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</SIMPLERSP>\n";      out << STRLIT("</SIMPLERSP>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1776 
Line 2267 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendMethodResponseElementBegin( void XmlWriter::_appendMethodResponseElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& name)     const CIMName& name)
 { {
     out << "<METHODRESPONSE NAME=\"" << name << "\">\n";      out << STRLIT("<METHODRESPONSE NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendMethodResponseElementEnd( void XmlWriter::_appendMethodResponseElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</METHODRESPONSE>\n";      out << STRLIT("</METHODRESPONSE>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1799 
Line 2290 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendIMethodResponseElementBegin( void XmlWriter::_appendIMethodResponseElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& name)     const CIMName& name)
 { {
     out << "<IMETHODRESPONSE NAME=\"" << name << "\">\n";      out << STRLIT("<IMETHODRESPONSE NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendIMethodResponseElementEnd( void XmlWriter::_appendIMethodResponseElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</IMETHODRESPONSE>\n";      out << STRLIT("</IMETHODRESPONSE>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1818 
Line 2309 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendErrorElement( void XmlWriter::_appendErrorElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMException& cimException)     const CIMException& cimException)
 { {
     Tracer::traceCIMException(TRC_XML_WRITER, Tracer::LEVEL2, cimException);      Tracer::traceCIMException(TRC_XML, Tracer::LEVEL2, cimException);
   
       out << STRLIT("<ERROR CODE=\"") << Uint32(cimException.getCode());
       out.append('"');
  
     out << "<ERROR";  
     out << " CODE=\"" << Uint32(cimException.getCode()) << "\"";  
     String description = TraceableCIMException(cimException).getDescription();     String description = TraceableCIMException(cimException).getDescription();
   
     if (description != String::EMPTY)     if (description != String::EMPTY)
     {     {
         out << " DESCRIPTION=\"";          out << STRLIT(" DESCRIPTION=\"");
         appendSpecial(out, description);         appendSpecial(out, description);
         out << "\"";          out.append('"');
       }
   
       if (cimException.getErrorCount())
       {
           out << STRLIT(">");
   
           for (Uint32 i = 0, n = cimException.getErrorCount(); i < n; i++)
               appendInstanceElement(out, cimException.getError(i));
   
           out << STRLIT("</ERROR>");
       }
       else
           out << STRLIT("/>");
   }
   
   //----------------------------------------------------------------------
   //
   // appendParamTypeAndEmbeddedObjAttrib
   // Appends the Param type and EmbeddedObject Info to the buffer
   //     %EmbeddedObject; #IMPLIED
   //     %ParamType;>
   //
   //---------------------------------------------------------------------
   
   void XmlWriter::appendParamTypeAndEmbeddedObjAttrib(
       Buffer& out,
       const CIMType& type)
   {
   
       // If the property type is CIMObject, then
       //   encode the property in CIM-XML as a string with the EmbeddedObject
       //   attribute (there is not currently a CIM-XML "object"
       //   datatype).
       //   Because of an error in Pegasus we were earlier outputting
       //   upper case "EMBEDDEDOBJECT" as the attribute name. The
       //   spec calls for mixed case "EmbeddedObject. Fixed in
       //   bug 7131 to output EmbeddedObject  attribute in upper
       //   case and mixed case. Receiver will ignore one or the
       //   other.
       //else
       //      output the real type
       if (type == CIMTYPE_OBJECT)
       {
   
           out << STRLIT(" PARAMTYPE=\"string\""
                         " EmbeddedObject=\"object\""
                         " EMBEDDEDOBJECT=\"object\"");
       }
       else if (type == CIMTYPE_INSTANCE)
       {
           out << STRLIT(" PARAMTYPE=\"string\""
                         " EmbeddedObject=\"instance\""
                         " EMBEDDEDOBJECT=\"instance\"");
       }
       else
       {
           out << STRLIT(" PARAM") << xmlWriterTypeStrings(type);
     }     }
     out << "/>";  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1841 
Line 2390 
 // //
 // <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)> // <!ELEMENT RETURNVALUE (VALUE|VALUE.REFERENCE)>
 // <!ATTLIST RETURNVALUE // <!ATTLIST RETURNVALUE
   //     %EmbeddedObject; #IMPLIED
 //     %ParamType;> //     %ParamType;>
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendReturnValueElement( void XmlWriter::appendReturnValueElement(
     Array<Sint8>& out,      Buffer& out,
     const CIMValue& value)     const CIMValue& value)
 { {
     out << "<RETURNVALUE";      out << STRLIT("<RETURNVALUE");
  
     CIMType type = value.getType();     CIMType type = value.getType();
     out << " PARAMTYPE=\"" << cimTypeToString (type) << "\"";  
  
     out << ">\n";      appendParamTypeAndEmbeddedObjAttrib(out, type);
   
       out << STRLIT(">\n");
  
     // Add value.     // Add value.
     appendValueElement(out, value);     appendValueElement(out, value);
     out << "</RETURNVALUE>\n";      out << STRLIT("</RETURNVALUE>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 1874 
Line 2425 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendIReturnValueElementBegin( void XmlWriter::_appendIReturnValueElementBegin(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "<IRETURNVALUE>\n";      out << STRLIT("<IRETURNVALUE>\n");
 } }
  
 void XmlWriter::_appendIReturnValueElementEnd( void XmlWriter::_appendIReturnValueElementEnd(
     Array<Sint8>& out)      Buffer& out)
   {
       out << STRLIT("</IRETURNVALUE>\n");
   }
   
   //EXP_PULL_BEGIN
   void XmlWriter::_appendIReturnValueElementWithNameBegin(
       Buffer& out,
       const char* name)
 { {
     out << "</IRETURNVALUE>\n";      out << STRLIT("<IRETURNVALUE NAME=\"") << name << STRLIT("\">\n");
 } }
   //EXP_PULL_END
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
Line 1892 
Line 2452 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendBooleanIParameter( void XmlWriter::appendBooleanIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     Boolean flag)     Boolean flag)
 { {
     _appendIParamValueElementBegin(out, name);     _appendIParamValueElementBegin(out, name);
     out << "<VALUE>";      out << STRLIT("<VALUE>");
       append(out, flag);
       out << STRLIT("</VALUE>\n");
       _appendIParamValueElementEnd(out);
   }
   
   //EXP_PULL_BEGIN
   void XmlWriter::appendBooleanParameter(
       Buffer& out,
       const char* name,
       Boolean flag)
   {
       _appendParamValueElementBegin(out, name);
       out << STRLIT("<VALUE>");
       append(out, flag);
       out << STRLIT("</VALUE>\n");
       _appendParamValueElementEnd(out);
   }
   
   void XmlWriter::appendBooleanIReturnValue(
       Buffer& out,
       const char* name,
       Boolean flag)
   {
       _appendIReturnValueElementWithNameBegin(out, name);
       out << STRLIT("<VALUE>");
     append(out, flag);     append(out, flag);
     out << "</VALUE>\n";      out << STRLIT("</VALUE>\n");
       _appendIReturnValueElementEnd(out);
   }
   void XmlWriter::appendUint32IParameter(
       Buffer& out,
       const char* name,
       Uint32 val)
   {
       _appendIParamValueElementBegin(out, name);
       out << STRLIT("<VALUE>");
       append(out, val);
       out << STRLIT("</VALUE>\n");
       _appendIParamValueElementEnd(out);
   }
   
   // Can be used to generate either parameters with value,
   // parameters with NULL (i.e. no value element) or
   // no parameters output at all.
   void XmlWriter::appendUint32ArgIParameter(
       Buffer& out,
       const char* name,
       const Uint32Arg& val,
       const Boolean required)
   {
       if (!required && val.isNull())
       {
           return;
       }
   
       _appendIParamValueElementBegin(out, name);
       if (!val.isNull())
       {
           out << STRLIT("<VALUE>");
           append(out, val.getValue());
           out << STRLIT("</VALUE>\n");
       }
     _appendIParamValueElementEnd(out);     _appendIParamValueElementEnd(out);
 } }
  
   /* Output return value from Uint64Arg object as
      Value inside IRETURNVALUE
      If the state of the object is NULL output
      the parameter without value.  Else
      output the value
   */
   void XmlWriter::appendUint64ReturnValue(
       Buffer& out,
       const char* name,
       const Uint64Arg& val)
   {
       _appendIReturnValueElementBegin(out);
       out << STRLIT("<VALUE>");
       if (!val.isNull())
       {
           append(out, val.getValue());
       }
       out << STRLIT("</VALUE>\n");
       _appendIReturnValueElementEnd(out);
   }
   //EXP_PULL_END
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendStringIParameter() // appendStringIParameter()
Line 1910 
Line 2552 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendStringIParameter( void XmlWriter::appendStringIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const String& str)     const String& str)
 { {
     _appendIParamValueElementBegin(out, name);     _appendIParamValueElementBegin(out, name);
     out << "<VALUE>";      out << STRLIT("<VALUE>");
     appendSpecial(out, str);     appendSpecial(out, str);
     out << "</VALUE>\n";      out << STRLIT("</VALUE>\n");
     _appendIParamValueElementEnd(out);     _appendIParamValueElementEnd(out);
 } }
  
   // EXP_PULL_BEGIN
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendQualifierNameIParameter()  // appendStringIParameterIfNotEmpty()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendQualifierNameIParameter(  void XmlWriter::appendStringIParameterIfNotEmpty(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const String& qualifierName)      const String& str)
 { {
     // <!ELEMENT IPARAMVALUE (VALUE|VALUE.ARRAY|VALUE.REFERENCE      if (str != String::EMPTY)
     //     |INSTANCENAME|CLASSNAME|QUALIFIER.DECLARATION      {
     //     |CLASS|INSTANCE|VALUE.NAMEDINSTANCE)?>          appendStringIParameter(out,name,str);
       }
   }
   
   //------------------------------------------------------------------------------
   //
   // appendStringParameter()
     //     //
     // ATTN: notice that there is really no way to pass a qualifier name  //------------------------------------------------------------------------------
     // as an IPARAMVALUE element according to the spec (look above). So we  
     // just pass it as a class name. An answer must be obtained later.  
  
     _appendIParamValueElementBegin(out, name);  void XmlWriter::appendStringParameter(
     appendClassNameElement(out, qualifierName);      Buffer& out,
     _appendIParamValueElementEnd(out);      const char* name,
       const String& str)
   {
       _appendParamValueElementBegin(out, name);
       out << STRLIT("<VALUE>");
       appendSpecial(out, str);
       out << STRLIT("</VALUE>\n");
       _appendParamValueElementEnd(out);
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
   // appendStringIReturnValue()
   //
   //------------------------------------------------------------------------------
   
   void XmlWriter::appendStringIReturnValue(
       Buffer& out,
       const char* name,
       const String& str)
   {
       _appendIReturnValueElementWithNameBegin(out, name);
       out << STRLIT("<VALUE>");
       appendSpecial(out, str);
       out << STRLIT("</VALUE>\n");
       _appendIReturnValueElementEnd(out);
   }
   //EXP_PULL_END
   //------------------------------------------------------------------------------
   //
 // appendClassNameIParameter() // appendClassNameIParameter()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendClassNameIParameter( void XmlWriter::appendClassNameIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMName& className)     const CIMName& className)
 { {
Line 1977 
Line 2649 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendInstanceNameIParameter( void XmlWriter::appendInstanceNameIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMObjectPath& instanceName)     const CIMObjectPath& instanceName)
 { {
Line 1986 
Line 2658 
     _appendIParamValueElementEnd(out);     _appendIParamValueElementEnd(out);
 } }
  
 void XmlWriter::appendObjectNameIParameter(  
     Array<Sint8>& out,  
     const char* name,  
     const CIMObjectPath& objectName)  
 {  
     //  
     //  ATTN-CAKG-P2-20020726:  The following condition does not correctly  
     //  distinguish instanceNames from classNames in every case  
     //  The instanceName of a singleton instance of a keyless class also  
     //  has no key bindings  
     //  
     if (objectName.getKeyBindings ().size () == 0)  
     {  
         XmlWriter::appendClassNameIParameter(  
             out, name, objectName.getClassName());  
     }  
     else  
     {  
         XmlWriter::appendInstanceNameIParameter(  
             out, name, objectName);  
     }  
 }  
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // appendClassIParameter() // appendClassIParameter()
Line 2016 
Line 2665 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendClassIParameter( void XmlWriter::appendClassIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMConstClass& cimClass)     const CIMConstClass& cimClass)
 { {
Line 2032 
Line 2681 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendInstanceIParameter( void XmlWriter::appendInstanceIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMConstInstance& instance)     const CIMConstInstance& instance)
 { {
Line 2048 
Line 2697 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendNamedInstanceIParameter( void XmlWriter::appendNamedInstanceIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMInstance& namedInstance)     const CIMInstance& namedInstance)
 { {
Line 2067 
Line 2716 
 //     USE: Create parameter for getProperty operation //     USE: Create parameter for getProperty operation
 //========================================================== //==========================================================
 void XmlWriter::appendPropertyNameIParameter( void XmlWriter::appendPropertyNameIParameter(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& propertyName)     const CIMName& propertyName)
 { {
     _appendIParamValueElementBegin(out, "PropertyName");     _appendIParamValueElementBegin(out, "PropertyName");
     out << "<VALUE>" << propertyName << "</VALUE>\n";      out << STRLIT("<VALUE>") << propertyName << STRLIT("</VALUE>\n");
     _appendIParamValueElementEnd(out);     _appendIParamValueElementEnd(out);
 } }
  
Line 2082 
Line 2731 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendPropertyValueIParameter( void XmlWriter::appendPropertyValueIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMValue& value)     const CIMValue& value)
 { {
Line 2098 
Line 2747 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendPropertyListIParameter( void XmlWriter::appendPropertyListIParameter(
     Array<Sint8>& out,      Buffer& out,
     const CIMPropertyList& propertyList)     const CIMPropertyList& propertyList)
 { {
     _appendIParamValueElementBegin(out, "PropertyList");     _appendIParamValueElementBegin(out, "PropertyList");
Line 2109 
Line 2758 
     //     //
     if (!propertyList.isNull ())     if (!propertyList.isNull ())
     {     {
         out << "<VALUE.ARRAY>\n";          out << STRLIT("<VALUE.ARRAY>\n");
         for (Uint32 i = 0; i < propertyList.size(); i++)         for (Uint32 i = 0; i < propertyList.size(); i++)
         {         {
             out << "<VALUE>" << propertyList[i] << "</VALUE>\n";              out << STRLIT("<VALUE>") << propertyList[i] << STRLIT("</VALUE>\n");
         }         }
         out << "</VALUE.ARRAY>\n";          out << STRLIT("</VALUE.ARRAY>\n");
     }     }
  
     _appendIParamValueElementEnd(out);     _appendIParamValueElementEnd(out);
Line 2127 
Line 2776 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendQualifierDeclarationIParameter( void XmlWriter::appendQualifierDeclarationIParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMConstQualifierDecl& qualifierDecl)     const CIMConstQualifierDecl& qualifierDecl)
 { {
Line 2142 
Line 2791 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatHttpErrorRspMessage(  Buffer XmlWriter::formatHttpErrorRspMessage(
     const String& status,     const String& status,
     const String& cimError,     const String& cimError,
     const String& errorDetail)     const String& errorDetail)
 { {
     Array<Sint8> out;      Buffer out;
  
     appendHttpErrorResponseHeader(out, status, cimError, errorDetail);     appendHttpErrorResponseHeader(out, status, cimError, errorDetail);
  
     return out;     return out;
 } }
  
   // l10n - add content language support to the format methods below
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // XmlWriter::formatSimpleMethodReqMessage() // XmlWriter::formatSimpleMethodReqMessage()
Line 2161 
Line 2812 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 // ATTN-RK-P1-20020228: Need to complete copy elimination optimization // ATTN-RK-P1-20020228: Need to complete copy elimination optimization
 Array<Sint8> XmlWriter::formatSimpleMethodReqMessage(  Buffer XmlWriter::formatSimpleMethodReqMessage(
     const char* host,     const char* host,
     const CIMNamespaceName& nameSpace,     const CIMNamespaceName& nameSpace,
     const CIMObjectPath& path,     const CIMObjectPath& path,
Line 2169 
Line 2820 
     const Array<CIMParamValue>& parameters,     const Array<CIMParamValue>& parameters,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const String& authenticationHeader)      const String& authenticationHeader,
       const AcceptLanguageList& httpAcceptLanguages,
       const ContentLanguageList& httpContentLanguages,
       bool binaryResponse)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
     CIMObjectPath localObjectPath = path;     CIMObjectPath localObjectPath = path;
     localObjectPath.setNameSpace(nameSpace.getString());     localObjectPath.setNameSpace(nameSpace.getString());
     localObjectPath.setHost(String::EMPTY);     localObjectPath.setHost(String::EMPTY);
Line 2196 
Line 2850 
         localObjectPath.toString(),         localObjectPath.toString(),
         authenticationHeader,         authenticationHeader,
         httpMethod,         httpMethod,
         out.size());          httpAcceptLanguages,
           httpContentLanguages,
           out.size(),
           false,
           binaryResponse);
     tmp << out;     tmp << out;
  
     return tmp;     return tmp;
 } }
  
 Array<Sint8> XmlWriter::formatSimpleMethodRspMessage(  Buffer XmlWriter::formatSimpleMethodRspMessage(
     const CIMName& methodName,     const CIMName& methodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const Array<Sint8>& body)      const ContentLanguageList& httpContentLanguages,
 {      const Buffer& bodyParams,
     Array<Sint8> out;      const Buffer& body,
     Array<Sint8> tmp;      Uint64 serverResponseTime,
       Boolean isFirst,
       Boolean isLast)
   {
       Buffer out;
   
       if (isFirst == true)
       {
           // NOTE: temporarily put zero for content length. the http code
           // will later decide to fill in the length or remove it altogether
           appendMethodResponseHeader(
               out, httpMethod, httpContentLanguages, 0, serverResponseTime);
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleRspElementBegin(out);     _appendSimpleRspElementBegin(out);
     _appendMethodResponseElementBegin(out, methodName);     _appendMethodResponseElementBegin(out, methodName);
       }
   
       if (body.size() != 0)
       {
     out << body;     out << body;
       }
   
       if (isLast == true)
       {
     _appendMethodResponseElementEnd(out);     _appendMethodResponseElementEnd(out);
     _appendSimpleRspElementEnd(out);     _appendSimpleRspElementEnd(out);
     _appendMessageElementEnd(out);     _appendMessageElementEnd(out);
       }
  
     appendMethodResponseHeader(tmp, httpMethod, out.size());      return out;
     tmp << out;  
   
     return tmp;  
 } }
  
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // XmlWriter::formatSimpleMethodErrorRspMessage() // XmlWriter::formatSimpleMethodErrorRspMessage()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleMethodErrorRspMessage(  Buffer XmlWriter::formatSimpleMethodErrorRspMessage(
     const CIMName& methodName,     const CIMName& methodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const CIMException& cimException)     const CIMException& cimException)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
  
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleRspElementBegin(out);     _appendSimpleRspElementBegin(out);
Line 2248 
Line 2923 
     _appendSimpleRspElementEnd(out);     _appendSimpleRspElementEnd(out);
     _appendMessageElementEnd(out);     _appendMessageElementEnd(out);
  
     appendMethodResponseHeader(tmp, httpMethod, out.size());      appendMethodResponseHeader(
           tmp,
           httpMethod,
           cimException.getContentLanguages(),
           out.size(),
           false);
     tmp << out;     tmp << out;
  
     return tmp;     return tmp;
Line 2260 
Line 2940 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleIMethodReqMessage(  Buffer XmlWriter::formatSimpleIMethodReqMessage(
     const char* host,     const char* host,
     const CIMNamespaceName& nameSpace,     const CIMNamespaceName& nameSpace,
     const CIMName& iMethodName,     const CIMName& iMethodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const String& authenticationHeader,     const String& authenticationHeader,
     const Array<Sint8>& body)      const AcceptLanguageList& httpAcceptLanguages,
       const ContentLanguageList& httpContentLanguages,
       const Buffer& body,
       bool binaryResponse)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
  
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleReqElementBegin(out);     _appendSimpleReqElementBegin(out);
Line 2288 
Line 2971 
         nameSpace.getString(),         nameSpace.getString(),
         authenticationHeader,         authenticationHeader,
         httpMethod,         httpMethod,
         out.size());          httpAcceptLanguages,
           httpContentLanguages,
           out.size(),
           false,
           binaryResponse);
     tmp << out;     tmp << out;
  
     return tmp;     return tmp;
Line 2300 
Line 2987 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleIMethodRspMessage(  /*
       Formats a IMethod Response Message.  This function formats
       messages for chunking based on the isFirst and isLast parameters.
       If isFirst is set, it outputs headers and ResponseElement begin.
       It always sends the body.  If isLast is set,  it sends the rtnParams
       and the ResponseElement end followed by any parameter in the rtnParams.
       KS_PULL_TBD_TODO - Determine what we want to do with chunking. Since this
       This whole thing is based on the concept of each message sending a  single
       chunk and we will want in the future to modify so we can chose easily
       whether we want to chunk or not and send the chunks.
   */
   Buffer XmlWriter::formatSimpleIMethodRspMessage(
     const CIMName& iMethodName,     const CIMName& iMethodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const Array<Sint8>& body)      const ContentLanguageList& httpContentLanguages,
 {      const Buffer& rtnParams,
     Array<Sint8> out;      const Buffer& body,
     Array<Sint8> tmp;      Uint64 serverResponseTime,
       Boolean isFirst,
       Boolean isLast)
   {
       Buffer out;
   
       if (isFirst == true)
       {
           // NOTE: temporarily put zero for content length. the http code
           // will later decide to fill in the length or remove it altogether
           appendMethodResponseHeader(
               out, httpMethod, httpContentLanguages, 0, serverResponseTime);
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleRspElementBegin(out);     _appendSimpleRspElementBegin(out);
     _appendIMethodResponseElementBegin(out, iMethodName);     _appendIMethodResponseElementBegin(out, iMethodName);
   
           // output the start of the return tag. Test if there is response data
           // by:
           // 1. there is data on the first chunk OR
           // 2. there is no data on the first chunk but isLast is false implying
           //    there is more non-empty data to come. If all subsequent chunks
           //    are empty, then this generates and empty response.
           if (body.size() != 0 || isLast == false)
               _appendIReturnValueElementBegin(out);
       }
   
     if (body.size() != 0)     if (body.size() != 0)
     {     {
         _appendIReturnValueElementBegin(out);  
         out << body;         out << body;
       }
   
       if (isLast == true)
       {
           if (body.size() != 0 || isFirst == false)
         _appendIReturnValueElementEnd(out);         _appendIReturnValueElementEnd(out);
   
           // Insert any return parameters.
           if (rtnParams.size() != 0)
           {
               out << rtnParams;
     }     }
           // //EXP_PULL_END
   
     _appendIMethodResponseElementEnd(out);     _appendIMethodResponseElementEnd(out);
     _appendSimpleRspElementEnd(out);     _appendSimpleRspElementEnd(out);
     _appendMessageElementEnd(out);     _appendMessageElementEnd(out);
       }
  
     appendMethodResponseHeader(tmp, httpMethod, out.size());      return out;
     tmp << out;  
   
     return tmp;  
 } }
  
   
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // XmlWriter::formatSimpleIMethodErrorRspMessage() // XmlWriter::formatSimpleIMethodErrorRspMessage()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleIMethodErrorRspMessage(  Buffer XmlWriter::formatSimpleIMethodErrorRspMessage(
     const CIMName& iMethodName,     const CIMName& iMethodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const CIMException& cimException)     const CIMException& cimException)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
  
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleRspElementBegin(out);     _appendSimpleRspElementBegin(out);
Line 2351 
Line 3080 
     _appendSimpleRspElementEnd(out);     _appendSimpleRspElementEnd(out);
     _appendMessageElementEnd(out);     _appendMessageElementEnd(out);
  
     appendMethodResponseHeader(tmp, httpMethod, out.size());      appendMethodResponseHeader(tmp,
           httpMethod,
           cimException.getContentLanguages(),
           out.size(), false);
     tmp << out;     tmp << out;
  
     return tmp;     return tmp;
Line 2372 
Line 3104 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendEMethodRequestHeader( void XmlWriter::appendEMethodRequestHeader(
     Array<Sint8>& out,      Buffer& out,
     const char* requestUri,     const char* requestUri,
     const char* host,     const char* host,
     const CIMName& cimMethod,     const CIMName& cimMethod,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const String& authenticationHeader,     const String& authenticationHeader,
       const AcceptLanguageList& acceptLanguages,
       const ContentLanguageList& contentLanguages,
     Uint32 contentLength)     Uint32 contentLength)
 { {
     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };
  
     if (httpMethod == HTTP_METHOD_M_POST)     if (httpMethod == HTTP_METHOD_M_POST)
     {     {
         out << "M-POST " << requestUri << " HTTP/1.1\r\n";        out << STRLIT("M-POST ") << requestUri << STRLIT(" HTTP/1.1\r\n");
     }     }
     else     else
     {     {
         out << "POST " << requestUri << " HTTP/1.1\r\n";        out << STRLIT("POST ") << requestUri << STRLIT(" HTTP/1.1\r\n");
       }
       out << STRLIT("HOST: ") << host << STRLIT("\r\n"
                     "Content-Type: application/xml; charset=utf-8\r\n");
       OUTPUT_CONTENTLENGTH(out, contentLength);
   
       if (acceptLanguages.size() > 0)
       {
           out << STRLIT("Accept-Language: ") << acceptLanguages << STRLIT("\r\n");
       }
       if (contentLanguages.size() > 0)
       {
           out << STRLIT("Content-Language: ") << contentLanguages <<
               STRLIT("\r\n");
     }     }
     out << "HOST: " << host << "\r\n";  
     out << "Content-Type: application/xml; charset=\"utf-8\"\r\n";  #ifdef PEGASUS_DEBUG
     out << "Content-Length: " << contentLength << "\r\n";      // backdoor environment variable to turn OFF client requesting transfer
       // encoding. The default is on. to turn off, set this variable to zero.
       // This should be removed when stable. This should only be turned off in
       // a debugging/testing environment.
   
       static const char *clientTransferEncodingOff =
           getenv("PEGASUS_HTTP_TRANSFER_ENCODING_REQUEST");
       if (!clientTransferEncodingOff || *clientTransferEncodingOff != '0')
   #endif
       out << STRLIT("TE: chunked, trailers\r\n");
   
     if (httpMethod == HTTP_METHOD_M_POST)     if (httpMethod == HTTP_METHOD_M_POST)
     {     {
         out << "Man: http://www.hp.com; ns=";          out << STRLIT("Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=");
         out << nn <<"\r\n";          out << nn << STRLIT("\r\n");
         out << nn << "-CIMExport: MethodRequest\r\n";          out << nn << STRLIT("-CIMExport: MethodRequest\r\n");
         out << nn << "-CIMExportMethod: " << cimMethod << "\r\n";          out << nn << STRLIT("-CIMExportMethod: ") << cimMethod <<
               STRLIT("\r\n");
     }     }
     else     else
     {     {
         out << "CIMExport: MethodRequest\r\n";          out << STRLIT("CIMExport: MethodRequest\r\n"
         out << "CIMExportMethod: " << cimMethod << "\r\n";                        "CIMExportMethod: ") << cimMethod << STRLIT("\r\n");
     }     }
  
     if (authenticationHeader.size())     if (authenticationHeader.size())
     {     {
         out << authenticationHeader << "\r\n";          out << authenticationHeader << STRLIT("\r\n");
     }     }
     out << "\r\n";  
       out << STRLIT("\r\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2422 
Line 3181 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendEMethodResponseHeader( void XmlWriter::appendEMethodResponseHeader(
     Array<Sint8>& out,      Buffer& out,
     HttpMethod httpMethod,     HttpMethod httpMethod,
       const ContentLanguageList& contentLanguages,
     Uint32 contentLength)     Uint32 contentLength)
 { {
     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };     char nn[] = { '0' + (rand() % 10), '0' + (rand() % 10), '\0' };
  
     out << "HTTP/1.1 " HTTP_STATUS_OK "\r\n";      out << STRLIT("HTTP/1.1 " HTTP_STATUS_OK "\r\n"
     out << "Content-Type: application/xml; charset=\"utf-8\"\r\n";                    "Content-Type: application/xml; charset=utf-8\r\n");
     out << "Content-Length: " << contentLength << "\r\n";      OUTPUT_CONTENTLENGTH(out, contentLength);
   
       if (contentLanguages.size() > 0)
       {
           out << STRLIT("Content-Language: ") << contentLanguages <<
               STRLIT("\r\n");
       }
     if (httpMethod == HTTP_METHOD_M_POST)     if (httpMethod == HTTP_METHOD_M_POST)
     {     {
         out << "Ext:\r\n";          out << STRLIT("Ext:\r\n"
         out << "Cache-Control: no-cache\r\n";                        "Cache-Control: no-cache\r\n"
         out << "Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=";                        "Man: http://www.dmtf.org/cim/mapping/http/v1.0; ns=");
         out << nn <<"\r\n";          out << nn << STRLIT("\r\n");
         out << nn << "-CIMExport: MethodResponse\r\n\r\n";          out << nn << STRLIT("-CIMExport: MethodResponse\r\n\r\n");
     }     }
     else     else
     {     {
         out << "CIMExport: MethodResponse\r\n\r\n";          out << STRLIT("CIMExport: MethodResponse\r\n\r\n");
     }     }
 } }
  
Line 2455 
Line 3221 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendSimpleExportReqElementBegin( void XmlWriter::_appendSimpleExportReqElementBegin(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "<SIMPLEEXPREQ>\n";      out << STRLIT("<SIMPLEEXPREQ>\n");
 } }
  
 void XmlWriter::_appendSimpleExportReqElementEnd( void XmlWriter::_appendSimpleExportReqElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</SIMPLEEXPREQ>\n";      out << STRLIT("</SIMPLEEXPREQ>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2477 
Line 3243 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendEMethodCallElementBegin( void XmlWriter::_appendEMethodCallElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& name)     const CIMName& name)
 { {
     out << "<EXPMETHODCALL NAME=\"" << name << "\">\n";      out << STRLIT("<EXPMETHODCALL NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendEMethodCallElementEnd( void XmlWriter::_appendEMethodCallElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</EXPMETHODCALL>\n";      out << STRLIT("</EXPMETHODCALL>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2501 
Line 3267 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendEParamValueElementBegin( void XmlWriter::_appendEParamValueElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const char* name)     const char* name)
 { {
     out << "<EXPPARAMVALUE NAME=\"" << name << "\">\n";      out << STRLIT("<EXPPARAMVALUE NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendEParamValueElementEnd( void XmlWriter::_appendEParamValueElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</EXPPARAMVALUE>\n";      out << STRLIT("</EXPPARAMVALUE>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2520 
Line 3286 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::appendInstanceEParameter( void XmlWriter::appendInstanceEParameter(
     Array<Sint8>& out,      Buffer& out,
     const char* name,     const char* name,
     const CIMInstance& instance)     const CIMInstance& instance)
 { {
Line 2539 
Line 3305 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendSimpleExportRspElementBegin( void XmlWriter::_appendSimpleExportRspElementBegin(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "<SIMPLEEXPRSP>\n";      out << STRLIT("<SIMPLEEXPRSP>\n");
 } }
  
 void XmlWriter::_appendSimpleExportRspElementEnd( void XmlWriter::_appendSimpleExportRspElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</SIMPLEEXPRSP>\n";      out << STRLIT("</SIMPLEEXPRSP>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2561 
Line 3327 
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 void XmlWriter::_appendEMethodResponseElementBegin( void XmlWriter::_appendEMethodResponseElementBegin(
     Array<Sint8>& out,      Buffer& out,
     const CIMName& name)     const CIMName& name)
 { {
     out << "<EXPMETHODRESPONSE NAME=\"" << name << "\">\n";      out << STRLIT("<EXPMETHODRESPONSE NAME=\"") << name << STRLIT("\">\n");
 } }
  
 void XmlWriter::_appendEMethodResponseElementEnd( void XmlWriter::_appendEMethodResponseElementEnd(
     Array<Sint8>& out)      Buffer& out)
 { {
     out << "</EXPMETHODRESPONSE>\n";      out << STRLIT("</EXPMETHODRESPONSE>\n");
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2579 
Line 3345 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleEMethodReqMessage(  Buffer XmlWriter::formatSimpleEMethodReqMessage(
     const char* requestUri,     const char* requestUri,
     const char* host,     const char* host,
     const CIMName& eMethodName,     const CIMName& eMethodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const String& authenticationHeader,     const String& authenticationHeader,
     const Array<Sint8>& body)      const AcceptLanguageList& httpAcceptLanguages,
       const ContentLanguageList& httpContentLanguages,
       const Buffer& body)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
  
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleExportReqElementBegin(out);     _appendSimpleExportReqElementBegin(out);
Line 2606 
Line 3374 
         eMethodName,         eMethodName,
         httpMethod,         httpMethod,
         authenticationHeader,         authenticationHeader,
           httpAcceptLanguages,
           httpContentLanguages,
         out.size());         out.size());
     tmp << out;     tmp << out;
  
Line 2618 
Line 3388 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleEMethodRspMessage(  Buffer XmlWriter::formatSimpleEMethodRspMessage(
     const CIMName& eMethodName,     const CIMName& eMethodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const Array<Sint8>& body)      const ContentLanguageList& httpContentLanguages,
       const Buffer& body)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
  
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleExportRspElementBegin(out);     _appendSimpleExportRspElementBegin(out);
Line 2635 
Line 3406 
     _appendSimpleExportRspElementEnd(out);     _appendSimpleExportRspElementEnd(out);
     _appendMessageElementEnd(out);     _appendMessageElementEnd(out);
  
     appendEMethodResponseHeader(tmp, httpMethod, out.size());      appendEMethodResponseHeader(tmp,
           httpMethod,
           httpContentLanguages,
           out.size());
     tmp << out;     tmp << out;
  
     return tmp;     return tmp;
Line 2647 
Line 3421 
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
 Array<Sint8> XmlWriter::formatSimpleEMethodErrorRspMessage(  Buffer XmlWriter::formatSimpleEMethodErrorRspMessage(
     const CIMName& eMethodName,     const CIMName& eMethodName,
     const String& messageId,     const String& messageId,
     HttpMethod httpMethod,     HttpMethod httpMethod,
     const CIMException& cimException)     const CIMException& cimException)
 { {
     Array<Sint8> out;      Buffer out;
     Array<Sint8> tmp;      Buffer tmp;
  
     _appendMessageElementBegin(out, messageId);     _appendMessageElementBegin(out, messageId);
     _appendSimpleExportRspElementBegin(out);     _appendSimpleExportRspElementBegin(out);
Line 2664 
Line 3438 
     _appendSimpleExportRspElementEnd(out);     _appendSimpleExportRspElementEnd(out);
     _appendMessageElementEnd(out);     _appendMessageElementEnd(out);
  
     appendEMethodResponseHeader(tmp, httpMethod, out.size());      appendEMethodResponseHeader(
           tmp,
           httpMethod,
           cimException.getContentLanguages(),
           out.size());
     tmp << out;     tmp << out;
  
     return tmp;     return tmp;
Line 2672 
Line 3450 
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
 // //
 // _printAttributes()  
 //  
 //------------------------------------------------------------------------------  
   
 static void _printAttributes(  
     PEGASUS_STD(ostream)& os,  
     const XmlAttribute* attributes,  
     Uint32 attributeCount)  
 {  
     for (Uint32 i = 0; i < attributeCount; i++)  
     {  
         os << attributes[i].name << "=";  
   
         os << '"';  
         _appendSpecial(os, attributes[i].value);  
         os << '"';  
   
         if (i + 1 != attributeCount)  
             os << ' ';  
     }  
 }  
   
 //------------------------------------------------------------------------------  
 //  
 // _indent()  
 //  
 //------------------------------------------------------------------------------  
   
 static void _indent(PEGASUS_STD(ostream)& os, Uint32 level, Uint32 indentChars)  
 {  
     Uint32 n = level * indentChars;  
   
     for (Uint32 i = 0; i < n; i++)  
         os << ' ';  
 }  
   
 //------------------------------------------------------------------------------  
 //  
 // indentedPrint()  
 //  
 //------------------------------------------------------------------------------  
   
 void XmlWriter::indentedPrint(  
     PEGASUS_STD(ostream)& os,  
     const char* text,  
     Uint32 indentChars)  
 {  
     char* tmp = strcpy(new char[strlen(text) + 1], text);  
   
     XmlParser parser(tmp);  
     XmlEntry entry;  
     Stack<const char*> stack;  
   
     while (parser.next(entry))  
     {  
         switch (entry.type)  
         {  
             case XmlEntry::XML_DECLARATION:  
             {  
                 _indent(os, stack.size(), indentChars);  
   
                 os << "<?" << entry.text << " ";  
                 _printAttributes(os, entry.attributes, entry.attributeCount);  
                 os << "?>";  
                 break;  
             }  
   
             case XmlEntry::START_TAG:  
             {  
                 _indent(os, stack.size(), indentChars);  
   
                 os << "<" << entry.text;  
   
                 if (entry.attributeCount)  
                     os << ' ';  
   
                 _printAttributes(os, entry.attributes, entry.attributeCount);  
                 os << ">";  
                 stack.push(entry.text);  
                 break;  
             }  
   
             case XmlEntry::EMPTY_TAG:  
             {  
                 _indent(os, stack.size(), indentChars);  
   
                 os << "<" << entry.text << " ";  
                 _printAttributes(os, entry.attributes, entry.attributeCount);  
                 os << "/>";  
                 break;  
             }  
   
             case XmlEntry::END_TAG:  
             {  
                 if (!stack.isEmpty() && strcmp(stack.top(), entry.text) == 0)  
                     stack.pop();  
   
                 _indent(os, stack.size(), indentChars);  
   
                 os << "</" << entry.text << ">";  
                 break;  
             }  
   
             case XmlEntry::COMMENT:  
             {  
   
                 _indent(os, stack.size(), indentChars);  
                 os << "<!--";  
                 _appendSpecial(os, entry.text);  
                 os << "-->";  
                 break;  
             }  
   
             case XmlEntry::CONTENT:  
             {  
                 _indent(os, stack.size(), indentChars);  
                 _appendSpecial(os, entry.text);  
                 break;  
             }  
   
             case XmlEntry::CDATA:  
             {  
                 _indent(os, stack.size(), indentChars);  
                 os << "<![CDATA[...]]>";  
                 break;  
             }  
   
             case XmlEntry::DOCTYPE:  
             {  
                 _indent(os, stack.size(), indentChars);  
                 os << "<!DOCTYPE...>";  
                 break;  
             }  
         }  
   
         os << PEGASUS_STD(endl);  
     }  
   
     delete [] tmp;  
 }  
   
 //------------------------------------------------------------------------------  
 //  
 // XmlWriter::getNextMessageId() // XmlWriter::getNextMessageId()
 // //
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
  
   static IDFactory _messageIDFactory(1000);
   
 String XmlWriter::getNextMessageId() String XmlWriter::getNextMessageId()
 { {
     // ATTN: make thread-safe:      char scratchBuffer[22];
     static Uint32 messageId = 1000;      Uint32 n;
       const char * startP = Uint32ToString(scratchBuffer,
     messageId++;                                           _messageIDFactory.getID(),
                                            n);
     if (messageId < 1000)      return String(startP, n);
         messageId = 1001;  
   
     char buffer[16];  
     sprintf(buffer, "%d", messageId);  
     return buffer;  
 } }
  
 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------
Line 2839 
Line 3471 
 // 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_UNREACHABLE(PEGASUS_ASSERT(false);)
     }     }
  
     return "unknown";      return STRLIT("unknown");
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.83.4.1  
changed lines
  Added in v.1.169.4.5

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2