00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifndef OW_HTTPCHUNKEDOSTREAM_HPP_INCLUDE_GUARD_
00037 #define OW_HTTPCHUNKEDOSTREAM_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_BaseStreamBuffer.hpp"
00040 #include "OW_Array.hpp"
00041 #include "OW_AutoPtr.hpp"
00042 #include "OW_String.hpp"
00043 #ifdef OW_HAVE_OSTREAM
00044 #include <ostream>
00045 #elif defined(OW_HAVE_OSTREAM_H)
00046 #include <ostream.h>
00047 #else
00048 #include <iostream>
00049 #endif
00050
00051 namespace OW_NAMESPACE
00052 {
00053
00054 class OW_HTTP_API HTTPChunkedOStreamBuffer : public BaseStreamBuffer
00055 {
00056 public:
00057 HTTPChunkedOStreamBuffer(std::ostream& ostr);
00058 virtual ~HTTPChunkedOStreamBuffer();
00059
00060 protected:
00061 virtual int sync();
00062 private:
00063 std::ostream& m_ostr;
00064 virtual int buffer_to_device(const char* c, int n);
00065
00066 HTTPChunkedOStreamBuffer(const HTTPChunkedOStreamBuffer&);
00067 HTTPChunkedOStreamBuffer& operator=(const HTTPChunkedOStreamBuffer&);
00068
00069 friend class HTTPChunkedOStream;
00070 };
00072 class OW_HTTP_API HTTPChunkedOStreamBase
00073 {
00074 public:
00075 HTTPChunkedOStreamBase(std::ostream& ostr)
00076 : m_strbuf(ostr) {}
00077 HTTPChunkedOStreamBuffer m_strbuf;
00078 };
00080 class OW_HTTP_API HTTPChunkedOStream : private HTTPChunkedOStreamBase,
00081 public std::ostream
00082 {
00083 public:
00090 HTTPChunkedOStream(std::ostream& ostr);
00091
00092 ~HTTPChunkedOStream();
00093
00094 enum ESendLastChunkFlag
00095 {
00096 E_DISCARD_LAST_CHUNK,
00097 E_SEND_LAST_CHUNK
00098 };
00104 void termOutput(ESendLastChunkFlag sendLastChunk = E_SEND_LAST_CHUNK);
00108 std::ostream& getOutputStreamOrig() { return m_ostr; };
00114 void addTrailer(const String& key, const String& value);
00115 private:
00116 std::ostream& m_ostr;
00117
00118 #ifdef OW_WIN32
00119 #pragma warning (push)
00120 #pragma warning (disable: 4251)
00121 #endif
00122
00123 Array<String> m_trailers;
00124
00125 #ifdef OW_WIN32
00126 #pragma warning (pop)
00127 #endif
00128
00129
00130 HTTPChunkedOStream(const HTTPChunkedOStream&);
00131 HTTPChunkedOStream& operator=(const HTTPChunkedOStream&);
00132 };
00133
00134 }
00135
00136 #endif