Process up to len bytes from input buffer buf. Returns the number of bytes processed. Bytes left unprocessed means bytes left over after the final header delimiters.
Consume is a streaming processor. It may be called multiple times on one request and the full headers need not be available before processing can begin. If the end of the request was reached during this call to consume the ready flag will be set. Further calls to consume once ready will be ignored.
41 {
42 size_t bytes_processed;
43
44 if (m_ready) {return 0;}
45
49 m_ready = true;
50 }
51 return bytes_processed;
52 }
53
54
56
57
58 std::string::iterator begin = m_buf->begin();
59 std::string::iterator end;
60
61 for (;;) {
62
63 end = std::search(
64 begin,
65 m_buf->end(),
66 header_delimiter,
67 header_delimiter+sizeof(header_delimiter)-1
68 );
69
71
73
74 throw exception("Maximum header size exceeded.",
76 }
77
78 if (end == m_buf->end()) {
79
80
81 std::copy(begin,end,m_buf->begin());
82 m_buf->resize(static_cast<std::string::size_type>(end-begin));
84
86 }
87
88
89 if (end-begin == 0) {
90
91 if (m_method.empty() ||
get_header(
"Host").empty()) {
93 }
94
95 bytes_processed = (
96 len -
static_cast<std::string::size_type
>(m_buf->end()-end)
97 + sizeof(header_delimiter) - 1
98 );
99
100
101 m_buf.reset();
102
103
104
105
106
110 m_ready = true;
111 }
112 return bytes_processed;
113 } else {
114 m_ready = true;
115
116
117 return bytes_processed;
118 }
119 } else {
120 if (m_method.empty()) {
121 this->process(begin,end);
122 } else {
124 }
125 }
126
127 begin = end+(sizeof(header_delimiter)-1);
128 }
129}
size_t process_body(char const *buf, size_t len)
Process body data.
void process_header(std::string::iterator begin, std::string::iterator end)
Process a header line.
bool body_ready() const
Check if the parser is done parsing the body.
size_t m_body_bytes_needed
bool prepare_body()
Prepare the parser to begin parsing body data.
std::string const & get_header(std::string const &key) const
Get the value of an HTTP header.
@ request_header_fields_too_large
size_t const max_header_size
Maximum size in bytes before rejecting an HTTP header as too big.