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_HTTPChunkedIStream_HPP_INCLUDE_GUARD_
00037 #define OW_HTTPChunkedIStream_HPP_INCLUDE_GUARD_
00038 #include "OW_config.h"
00039 #include "OW_HTTPChunkException.hpp"
00040 #include "OW_BaseStreamBuffer.hpp"
00041 #include "OW_String.hpp"
00042 #include "OW_Map.hpp"
00043 #include "OW_AutoPtr.hpp"
00044 #include "OW_CIMProtocolIStreamIFC.hpp"
00045 #include "OW_HttpCommonFwd.hpp"
00046
00047 namespace OW_NAMESPACE
00048 {
00049
00050 class OW_HTTP_API HTTPChunkedIStreamBuffer : public BaseStreamBuffer
00051 {
00052 public:
00053 HTTPChunkedIStreamBuffer(std::istream& istr,
00054 HTTPChunkedIStream* chunkedIstr);
00055 void resetInput();
00056 ~HTTPChunkedIStreamBuffer();
00057 private:
00058 std::istream& m_istr;
00059 unsigned int m_inLen;
00060 unsigned int m_inPos;
00061 bool m_isEOF;
00062 virtual int buffer_from_device(char* c, int n);
00063 HTTPChunkedIStream* m_pChunker;
00064
00065 HTTPChunkedIStreamBuffer(const HTTPChunkedIStreamBuffer&);
00066 HTTPChunkedIStreamBuffer& operator=(const HTTPChunkedIStreamBuffer&);
00067 };
00068 class OW_HTTP_API HTTPChunkedIStreamBase
00069 {
00070 public:
00071 HTTPChunkedIStreamBase(std::istream& istr,
00072 HTTPChunkedIStream* chunkedIStr) : m_strbuf(istr, chunkedIStr) {}
00073 HTTPChunkedIStreamBuffer m_strbuf;
00074 };
00075 class OW_HTTP_API HTTPChunkedIStream : private HTTPChunkedIStreamBase,
00076 public CIMProtocolIStreamIFC
00077 {
00078 public:
00085 HTTPChunkedIStream(std::istream& istr);
00086 ~HTTPChunkedIStream();
00091 std::istream& getInputStreamOrig() { return m_istr; }
00097 Map<String, String> getTrailers() const { return m_trailerMap; }
00101 void resetInput();
00102
00103 virtual void checkForError() const;
00104 virtual String getTrailer(const String& key) const;
00105 private:
00106 std::istream& m_istr;
00107
00108
00109 #ifdef OW_WIN32
00110 #pragma warning (push)
00111 #pragma warning (disable: 4251)
00112 #endif
00113
00114 Map<String, String> m_trailerMap;
00115
00116 #ifdef OW_WIN32
00117 #pragma warning (pop)
00118 #endif
00119
00125 void buildTrailerMap();
00126
00127 HTTPChunkedIStream(const HTTPChunkedIStream&);
00128 HTTPChunkedIStream& operator=(const HTTPChunkedIStream&);
00129 friend class HTTPChunkedIStreamBuffer;
00130 };
00131
00132 }
00133
00134 #endif