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