00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CHUNKEDSTREAMBUF_H
00020 #define CHUNKEDSTREAMBUF_H
00021
00022 #include "pandabase.h"
00023
00024
00025 #ifdef HAVE_SSL
00026
00027 #include "httpChannel.h"
00028 #include "bioStreamPtr.h"
00029 #include "pointerTo.h"
00030
00031
00032
00033
00034
00035
00036
00037 class ChunkedStreamBuf : public streambuf {
00038 public:
00039 ChunkedStreamBuf();
00040 virtual ~ChunkedStreamBuf();
00041
00042 void open_read(BioStreamPtr *source, HTTPChannel *doc);
00043 void close_read();
00044
00045 protected:
00046 virtual int underflow(void);
00047
00048 private:
00049 size_t read_chars(char *start, size_t length);
00050 bool http_getline(string &str);
00051
00052 PT(BioStreamPtr) _source;
00053 size_t _chunk_remaining;
00054 bool _done;
00055 string _working_getline;
00056
00057 PT(HTTPChannel) _doc;
00058 int _read_index;
00059
00060 friend class IChunkedStream;
00061 };
00062
00063 #endif // HAVE_SSL
00064
00065 #endif