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_HTTPDEFLATEISTREAM_HPP_INCLUDE_GUARD_
00037 #define OW_HTTPDEFLATEISTREAM_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #ifdef OW_HAVE_ZLIB_H
00040 #include "OW_CIMProtocolIStreamIFC.hpp"
00041 #include "OW_BaseStreamBuffer.hpp"
00042 #include "OW_AutoPtr.hpp"
00043 #include "OW_IfcsFwd.hpp"
00044 #include <zlib.h>
00045
00046 namespace OW_NAMESPACE
00047 {
00048
00049 class OW_HTTP_API HTTPDeflateIStreamBuffer : public BaseStreamBuffer
00050 {
00051 public:
00052 HTTPDeflateIStreamBuffer(std::istream& istr);
00053 ~HTTPDeflateIStreamBuffer();
00054 protected:
00055 virtual int buffer_from_device(char *, int);
00056 private:
00057 std::istream& m_istr;
00058 z_stream m_zstr;
00059 enum { m_inBufSize = HTTP_BUF_SIZE };
00060
00061 Bytef m_inBuf[m_inBufSize];
00062
00063 HTTPDeflateIStreamBuffer(const HTTPDeflateIStreamBuffer&);
00064 HTTPDeflateIStreamBuffer& operator=(HTTPDeflateIStreamBuffer&);
00065 };
00067 class OW_HTTP_API HTTPDeflateIStreamBase
00068 {
00069 public:
00070 HTTPDeflateIStreamBase(std::istream& istr)
00071 : m_strbuf(istr) {}
00072 HTTPDeflateIStreamBuffer m_strbuf;
00073 };
00075 class OW_HTTP_API HTTPDeflateIStream : private HTTPDeflateIStreamBase,
00076 public CIMProtocolIStreamIFC
00077 {
00078 public:
00085 HTTPDeflateIStream(const CIMProtocolIStreamIFCRef& istr);
00090 CIMProtocolIStreamIFCRef getInputStreamOrig();
00091
00092 virtual void checkForError() const;
00093 private:
00094
00095 #ifdef OW_WIN32
00096 #pragma warning (push)
00097 #pragma warning (disable: 4251)
00098 #endif
00099
00100 CIMProtocolIStreamIFCRef m_istr;
00101
00102 #ifdef OW_WIN32
00103 #pragma warning (pop)
00104 #endif
00105
00106
00107 HTTPDeflateIStream(const HTTPDeflateIStream&);
00108 HTTPDeflateIStream& operator=(HTTPDeflateIStream&);
00109 };
00110
00111 }
00112
00113 #endif
00114 #endif // #ifdef OW_HAVE_ZLIB_H