19 #ifndef INCLUDE_RCF_HTTPFRAMEFILTER_HPP
20 #define INCLUDE_RCF_HTTPFRAMEFILTER_HPP
24 #include <boost/shared_ptr.hpp>
26 #include <RCF/Filter.hpp>
27 #include <RCF/ByteBuffer.hpp>
34 const std::string & stringToSplit,
36 std::vector<std::string> & lines);
54 bool parseHttpMessage(
const char * pFrame, std::size_t bytesAvailable);
56 void getHttpStatus(std::string& httpStatus, std::string& httpStatusMsg);
57 void getHeaderValue(
const std::string& headerName, std::string& headerValue);
59 typedef std::vector< std::pair< std::string, std::string > > HeaderList;
60 HeaderList mHeaderList;
62 std::size_t mHeaderLen;
63 std::size_t mContentLen;
64 std::size_t mFrameLen;
65 std::string mHttpMessageHeader;
66 std::vector<std::string> mHeaderLines;
67 std::string mRequestLine;
68 std::string mResponseLine;
73 class HttpFrameFilter :
public Filter
78 HttpFrameFilter(std::size_t maxMessageLength);
82 const std::string serverAddr,
91 const ByteBuffer & byteBuffer,
92 std::size_t bytesRequested);
94 void write(
const std::vector<ByteBuffer> &byteBuffers);
96 void onReadCompleted(
const ByteBuffer &byteBuffer);
98 void onWriteCompleted(std::size_t bytesTransferred);
100 int getFilterId()
const;
102 virtual std::size_t getFrameSize();
104 const std::string & getHttpSessionId();
105 boost::uint32_t getHttpSessionIndex();
106 const std::string & getConnectionHeader();
108 void onError(
const Exception& e);
111 bool mChunkedResponseMode;
112 std::size_t mChunkedResponseCounter;
114 void tryParseHttpHeader();
115 void tryParseHttpChunkHeader();
121 void sendServerError(
int error);
123 void resizeReadBuffer(std::size_t newSize);
125 std::string mServerAddr;
129 std::string mHttpSessionId;
130 boost::uint32_t mHttpSessionIndex;
131 std::string mConnectionHeader;
132 std::string mTransferEncoding;
134 MemOstreamPtr mOsPtr;
135 std::vector<ByteBuffer> mWriteBuffers;
136 std::size_t mWritePos;
138 ByteBuffer mOrigReadBuffer;
139 std::size_t mOrigBytesRequested;
141 ReallocBufferPtr mReadBufferPtr;
142 std::size_t mBytesReceived;
143 std::size_t mReadPos;
145 bool mProtocolChecked;
146 std::size_t mChunkHeaderLen;
147 std::size_t mChunkLen;
148 std::size_t mMaxReadPos;
149 std::size_t mMaxMessageLength;
150 bool mMaxMessageLengthSet;
152 std::string mPrevHttpSessionId;
153 boost::uint32_t mPrevHttpSessionIndex;
155 HttpMessage mHttpMessage;
157 RecursionState<ByteBuffer, std::size_t> mRecursionStateRead;
162 #endif // ! INCLUDE_RCF_HTTPFRAMEFILTER_HPP