reduce some code duplication
This commit is contained in:
parent
f5b079b8e7
commit
47ab0cbf62
@ -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
|
||||||
@ -149,7 +143,6 @@ void Connection::handle_read(const boost::system::error_code &e, std::size_t byt
|
|||||||
boost::asio::placeholders::error,
|
boost::asio::placeholders::error,
|
||||||
boost::asio::placeholders::bytes_transferred)));
|
boost::asio::placeholders::bytes_transferred)));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle completion of a write operation.
|
/// Handle completion of a write operation.
|
||||||
|
Loading…
Reference in New Issue
Block a user