From 0245a62f81f7d596838e80b3f342eae2deefcb17 Mon Sep 17 00:00:00 2001 From: Arda Cinar Date: Fri, 13 Jan 2023 19:55:20 +0300 Subject: [PATCH] LibGemini: Add a response length helper to Gemini::Job Unlike HTTP responses, Gemini responses do not have a length header or a delimiter for the end of a response. A response simply continues until the connection is closed and its length is the number of bytes received. So, the response length method only returns the result if it has finished --- Userland/Libraries/LibGemini/Job.cpp | 9 +++++++++ Userland/Libraries/LibGemini/Job.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/Userland/Libraries/LibGemini/Job.cpp b/Userland/Libraries/LibGemini/Job.cpp index 099b358a74..43412e1363 100644 --- a/Userland/Libraries/LibGemini/Job.cpp +++ b/Userland/Libraries/LibGemini/Job.cpp @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -223,4 +224,12 @@ void Job::finish_up() did_finish(move(response)); }); } + +ErrorOr Job::response_length() const +{ + if (m_state != State::Finished) + return AK::Error::from_string_literal("Gemini response has not finished"); + + return m_received_size; +} } diff --git a/Userland/Libraries/LibGemini/Job.h b/Userland/Libraries/LibGemini/Job.h index c4df2ec504..afa883721b 100644 --- a/Userland/Libraries/LibGemini/Job.h +++ b/Userland/Libraries/LibGemini/Job.h @@ -29,6 +29,8 @@ public: const URL& url() const { return m_request.url(); } Core::Stream::Socket const* socket() const { return m_socket; } + ErrorOr response_length() const; + protected: void finish_up(); void on_socket_connected();