background image

{
if (!read_line(line))

return;
parse_request_link(line, method, uri, version);

state = read_header_field;
}

while (state == read_request_line)
{

if (!read_line(line))
return;

if (line.empty())
{

transfer_encoding = header.fields['Transfer-Encoding'];
if (transfer_encoding != b.chunkedb.)

{
content_length = header.fields['Content-Length'];

state = read_body;
}

else
state = read_chunk_header;

}
else

parse_header_field(line, header, value);
}

if (state == read_body)
{

request_body += read_buffer;
read_buffer.clear();

if (request_body.size() >= content_length)
state = read_finished;

return;
}

if (state == read_chunk_header)
{

if (!read_line(line))
return;

chunk_size = atoi(line);
if (chunk_size == 0)

{