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_HTTPDEFLATEOSTREAM_HPP_INCLUDE_GUARD_
00037 #define OW_HTTPDEFLATEOSTREAM_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #ifdef OW_HAVE_ZLIB_H
00040 #include "OW_BaseStreamBuffer.hpp"
00041 #include "OW_AutoPtr.hpp"
00042 #include "OW_Types.hpp"
00043
00044 #ifdef OW_HAVE_OSTREAM
00045 #include <ostream>
00046 #elif defined(OW_HAVE_OSTREAM_H)
00047 #include <ostream.h>
00048 #else
00049 #include <iostream>
00050 #endif
00051
00052 #include <zlib.h>
00053
00054 namespace OW_NAMESPACE
00055 {
00056
00057 class OW_HTTP_API HTTPDeflateOStreamBuffer : public BaseStreamBuffer
00058 {
00059 public:
00060 HTTPDeflateOStreamBuffer(std::ostream& ostr);
00061 virtual ~HTTPDeflateOStreamBuffer();
00062 void termOutput();
00063 protected:
00064 virtual int sync();
00065 virtual int buffer_to_device(const char *, int) ;
00066 private:
00067 std::ostream& m_ostr;
00068 z_stream m_zstr;
00069 enum { m_outBufSize = HTTP_BUF_SIZE };
00070 Bytef m_outBuf[m_outBufSize];
00071 int flushOutBuf(int flush = 0);
00072 int writeToStream();
00073
00074 HTTPDeflateOStreamBuffer(const HTTPDeflateOStreamBuffer&);
00075 HTTPDeflateOStreamBuffer& operator=(const HTTPDeflateOStreamBuffer&);
00076 };
00078 class OW_HTTP_API HTTPDeflateOStreamBase
00079 {
00080 public:
00081 HTTPDeflateOStreamBase(std::ostream& ostr)
00082 : m_strbuf(ostr) {}
00083 HTTPDeflateOStreamBuffer m_strbuf;
00084 };
00086 class OW_HTTP_API HTTPDeflateOStream : private HTTPDeflateOStreamBase, public std::ostream
00087 {
00088 public:
00095 HTTPDeflateOStream(std::ostream& ostr);
00100 std::ostream& getOutputStreamOrig() { return m_ostr; };
00106 void termOutput() { m_strbuf.termOutput(); }
00107 private:
00108 std::ostream& m_ostr;
00109
00110 HTTPDeflateOStream(const HTTPDeflateOStream&);
00111 HTTPDeflateOStream& operator=(const HTTPDeflateOStream&);
00112 };
00113
00114 }
00115
00116 #endif
00117
00118 #endif // #ifdef OW_HAVE_ZLIB_H