Fixes #155: added max streambuf config items to limit large requests/responses if needed

This commit is contained in:
eidheim 2017-09-07 11:16:01 +02:00
commit 69f945f686
5 changed files with 116 additions and 57 deletions

View file

@ -76,13 +76,17 @@ namespace SimpleWeb {
if(!lock)
return;
if(!ec) {
std::shared_ptr<Response> response(new Response());
std::shared_ptr<Response> response(new Response(this->config.max_response_streambuf_size));
session->connection->set_timeout(this->config.timeout_connect);
asio::async_read_until(session->connection->socket->next_layer(), response->content_buffer, "\r\n\r\n", [this, session, response](const error_code &ec, size_t /*bytes_transferred*/) {
asio::async_read_until(session->connection->socket->next_layer(), response->streambuf, "\r\n\r\n", [this, session, response](const error_code &ec, size_t /*bytes_transferred*/) {
session->connection->cancel_timeout();
auto lock = session->connection->handler_runner->continue_lock();
if(!lock)
return;
if((!ec || ec == asio::error::not_found) && response->streambuf.size() == response->streambuf.max_size()) {
session->callback(session->connection, make_error_code::make_error_code(errc::message_size));
return;
}
if(!ec) {
if(!ResponseMessage::parse(response->content, response->http_version, response->status_code, response->header))
session->callback(session->connection, make_error_code::make_error_code(errc::protocol_error));