/* */ #ifndef _D_CHUNKED_ENCODING_H_ #define _D_CHUNKED_ENCODING_H_ #include "TransferEncoding.h" namespace aria2 { class ChunkedEncoding:public TransferEncoding { private: enum STATE { READ_SIZE, READ_DATA, FINISH }; size_t chunkSize; STATE state; unsigned char* strbuf; size_t strbufSize; unsigned char* strbufTail; /** * Returns 0 if the size of chunk is retrieved successfully, * otherwise returns non-zero value. */ int readChunkSize(unsigned char** pp); int readData(unsigned char** pp, unsigned char* buf, size_t& len, size_t maxlen); void addBuffer(const unsigned char* inbuf, size_t inlen); int readDataEOL(unsigned char** pp); public: ChunkedEncoding(); ~ChunkedEncoding(); void init(); void inflate(unsigned char* outbuf, size_t& outlen, const unsigned char* inbuf, size_t inlen); bool finished(); void end(); }; } // namespace aria2 #endif // _D_CHUNKED_ENCODING_H_