Main Page | Modules | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

XSECSafeBufferFormatter.hpp

Go to the documentation of this file.
00001 /*
00002  * Copyright 2002-2005 The Apache Software Foundation.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 /*
00018  * XSEC
00019  *
00020  * XSECSafeBufferFormatter := Class for formatting DOMStrings into SafeBuffers
00021  *
00022  * Author(s): Berin Lautenbach
00023  *
00024  * $Id: XSECSafeBufferFormatter.hpp,v 1.9 2005/02/03 13:53:54 milan Exp $
00025  *
00026  */
00027 
00028 #ifndef XSECSAFEBUFFERFORMATTER_INCLUDE
00029 #define XSECSAFEBUFFERFORMATTER_INCLUDE
00030 
00031 // XSEC includes
00032 
00033 #include <xsec/utils/XSECSafeBuffer.hpp>
00034 
00035 // Xerces includes
00036 
00037 #include <xercesc/framework/XMLFormatter.hpp>
00038 
00043 class sbFormatTarget : public XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatTarget
00044 {
00045 public:
00046     
00047     sbFormatTarget()  {m_offset = 0;}
00048     ~sbFormatTarget() {}
00049 
00050     void setBuffer (safeBuffer * toSet) {m_buffer = toSet;};
00051 
00052 
00053     // -----------------------------------------------------------------------
00054     //  Implementations of the format target interface
00055     //  Based on Xerces/Xalan example code
00056     // -----------------------------------------------------------------------
00057 
00058     void writeChars(const   XMLByte* const  toWrite,
00059                     const unsigned int    count,
00060                     XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter * const formatter)
00061     {
00062          m_buffer->sbMemcpyIn(m_offset, (char *) toWrite, (int) count);
00063          m_buffer->setBufferType(safeBuffer::BUFFER_CHAR);
00064          m_offset += count;
00065         (*m_buffer)[m_offset] = '\0';
00066     };
00067 
00068     void reset(void) {m_offset = 0;(*m_buffer)[0] = '\0';}
00069 
00070 private:
00071 
00072     sbFormatTarget(const sbFormatTarget& other);
00073     void operator=(const sbFormatTarget& rhs);
00074 
00075     safeBuffer                  * m_buffer;     // Buffer to write to
00076     unsigned int                m_offset;
00077     
00078 };
00079 
00088 class XSECSafeBufferFormatter {
00089 
00090     XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter     
00091                         * formatter;        // To actually perform the formatting
00092     safeBuffer          formatBuffer;       // Storage of translated strings
00093     sbFormatTarget      * sbf;              // Format target used by XMLFormatter
00094 
00095 public:
00096 
00097     // Constructor
00098 
00099     XSECSafeBufferFormatter(
00100         const XMLCh * const                     outEncoding,
00101         const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::EscapeFlags          
00102                 escapeFlags=XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::NoEscapes,
00103         const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRepFlags           
00104                 unrepFlags=XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRep_Fail
00105     );
00106 
00107     XSECSafeBufferFormatter(
00108         const char * const                      outEncoding,
00109         const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::EscapeFlags          
00110                 escapeFlags=XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::NoEscapes,
00111         const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRepFlags           
00112                 unrepFlags=XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRep_Fail
00113     );
00114 
00115     // Destructor
00116 
00117     ~XSECSafeBufferFormatter();
00118 
00119     // Reimplementation of XMLFormatter functions
00120 
00121     void  formatBuf (
00122         const XMLCh *const toFormat,
00123         const unsigned int count,
00124         const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::EscapeFlags 
00125                 escapeFlags=XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::DefaultEscape,
00126         const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRepFlags 
00127                 unrepFlags=XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::DefaultUnRep
00128     );      // Format a buffer
00129 
00130     XSECSafeBufferFormatter&  operator<< (
00131         const XMLCh *const toFormat);                   // Format a buffer
00132     
00133     XSECSafeBufferFormatter&  operator<< (
00134         const XMLCh toFormat);                          // Format a character
00135 
00136     const XMLCh*  getEncodingName ()const;              // Get current encoding
00137 
00138     void  setEscapeFlags (const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::EscapeFlags newFlags);
00139     void  setUnRepFlags (const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRepFlags newFlags);
00140 
00141     XSECSafeBufferFormatter&  operator<< (const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::EscapeFlags newFlags); 
00142     XSECSafeBufferFormatter&  operator<< (const XERCES_CPP_NAMESPACE_QUALIFIER XMLFormatter::UnRepFlags newFlags); 
00143 
00144     // Friends for working with safestrings
00145 
00146     friend safeBuffer& operator<< (safeBuffer &to, const XSECSafeBufferFormatter & from);
00147 
00148 private:
00149 
00150     // Unimplemented
00151 
00152     XSECSafeBufferFormatter() {};
00153 
00154     
00155 };
00156 
00159 #endif /* XSECSAFEBUFFERFORMATTER_INCLUDE */

Generated on Sun Jul 3 17:37:28 2005 for XML-Security-C by  doxygen 1.4.2