LibCore: Add Content-Encoding handling to CHttpJob

This commit is contained in:
Marcel Schneider 2019-11-09 18:33:37 +01:00 committed by Andreas Kling
parent 4fe5503b17
commit c40935e79f
Notes: sideshowbarker 2024-07-19 17:43:26 +09:00

View file

@ -4,8 +4,37 @@
#include <stdio.h>
#include <unistd.h>
#include <CGzip.h>
#define CHTTPJOB_DEBUG
static ByteBuffer handle_content_encoding(const ByteBuffer& buf, const String& content_encoding)
{
dbg() << "CHttpJob::handle_content_encoding: buf has content_encoding = " << content_encoding;
if (content_encoding == "gzip") {
if (!Gzip::is_compressed(buf)) {
dbg() << "CHttpJob::handle_content_encoding: buf is not gzip compressed!";
}
dbg() << "CHttpJob::handle_content_encoding: buf is gzip compressed!";
auto uncompressed = Gzip::decompress(buf);
if (!uncompressed.has_value()) {
dbg() << "CHttpJob::handle_content_encoding: Gzip::decompress() failed. Returning original buffer.";
return buf;
}
dbg() << "CHttpJob::handle_content_encoding: Gzip::decompress() successful.\n"
<< " Input size = " << buf.size() << "\n"
<< " Output size = " << uncompressed.value().size();
return uncompressed.value();
}
return buf;
}
CHttpJob::CHttpJob(const CHttpRequest& request)
: m_request(request)
{
@ -113,6 +142,11 @@ void CHttpJob::finish_up()
}
m_received_buffers.clear();
auto content_encoding = m_headers.get("Content-Encoding");
if (content_encoding.has_value()) {
flattened_buffer = handle_content_encoding(flattened_buffer, content_encoding.value());
}
auto response = CHttpResponse::create(m_code, move(m_headers), move(flattened_buffer));
deferred_invoke([this, response](auto&) {
did_finish(move(response));
@ -146,4 +180,3 @@ void CHttpJob::shutdown()
remove_child(*m_socket);
m_socket = nullptr;
}