reduce some code duplication

This commit is contained in:
Dennis Luxen 2014-06-09 12:11:44 +02:00
parent f5b079b8e7
commit 47ab0cbf62

View File

@ -63,8 +63,11 @@ void Connection::start()
void Connection::handle_read(const boost::system::error_code &e, std::size_t bytes_transferred)
{
if (!e)
if (e)
{
return;
}
// no error detected, let's parse the request
CompressionType compression_type(noCompression);
boost::tribool result;
@ -88,6 +91,7 @@ void Connection::handle_read(const boost::system::error_code &e, std::size_t byt
switch (compression_type)
{
case deflateRFC1951:
//use deflate for compression
compression_header.name = "Content-Encoding";
compression_header.value = "deflate";
reply.headers.insert(reply.headers.begin(), compression_header);
@ -95,14 +99,9 @@ void Connection::handle_read(const boost::system::error_code &e, std::size_t byt
reply.setSize(compressed_output.size());
output_buffer = reply.HeaderstoBuffers();
output_buffer.push_back(boost::asio::buffer(compressed_output));
boost::asio::async_write(
TCP_socket,
output_buffer,
strand.wrap(boost::bind(&Connection::handle_write,
this->shared_from_this(),
boost::asio::placeholders::error)));
break;
case gzipRFC1952:
//use gzip for compression
compression_header.name = "Content-Encoding";
compression_header.value = "gzip";
reply.headers.insert(reply.headers.begin(), compression_header);
@ -110,24 +109,19 @@ void Connection::handle_read(const boost::system::error_code &e, std::size_t byt
reply.setSize(compressed_output.size());
output_buffer = reply.HeaderstoBuffers();
output_buffer.push_back(boost::asio::buffer(compressed_output));
boost::asio::async_write(
TCP_socket,
output_buffer,
strand.wrap(boost::bind(&Connection::handle_write,
this->shared_from_this(),
boost::asio::placeholders::error)));
break;
case noCompression:
//don't use any compression
reply.SetUncompressedSize();
output_buffer = reply.toBuffers();
break;
}
boost::asio::async_write(
TCP_socket,
output_buffer,
strand.wrap(boost::bind(&Connection::handle_write,
this->shared_from_this(),
boost::asio::placeholders::error)));
break;
}
}
else if (!result)
{ // request is not parseable
@ -150,7 +144,6 @@ void Connection::handle_read(const boost::system::error_code &e, std::size_t byt
boost::asio::placeholders::bytes_transferred)));
}
}
}
/// Handle completion of a write operation.
void Connection::handle_write(const boost::system::error_code &e)