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