From bbc249233d7639e7416a1374a97bfe69bebf31a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Wed, 18 Dec 2024 17:49:26 -0500 Subject: [PATCH] oscquery: try a fix for #848 --- src/ossia/network/http/http_client.hpp | 56 ++++++++++++++------------ 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/src/ossia/network/http/http_client.hpp b/src/ossia/network/http/http_client.hpp index e99a8ae62b7..7b83991e84e 100644 --- a/src/ossia/network/http/http_client.hpp +++ b/src/ossia/network/http/http_client.hpp @@ -181,13 +181,32 @@ class http_get_request : public std::enable_shared_from_thishandle_read_content(err, size); + if(m_contentLength > 0) + { + if(m_contentLength == m_response.size()) + { + finish_read(boost::asio::error::eof, size); + } + else + { + boost::asio::async_read( + m_socket, m_response, boost::asio::transfer_exactly(m_contentLength - m_response.size()), + [self = shared_from_this()]( + const boost::system::error_code& err, std::size_t size) { + self->handle_read_content(err, size); }); + } + } + else + { + // Start reading remaining data until EOF. + boost::asio::async_read( + m_socket, m_response, boost::asio::transfer_all(), + [self = shared_from_this()]( + const boost::system::error_code& err, std::size_t size) { + self->handle_read_content(err, size); + }); + } } else { @@ -198,30 +217,17 @@ class http_get_request : public std::enable_shared_from_thishandle_read_content(err, size); - }); - return; - } - // else we fallthrough the processing case at the end - } - else if(err != boost::asio::error::eof) + if(!err || err == boost::asio::error::eof) + finish_read(err, size); + else { ossia::logger().error("HTTP Error: {}", err.message()); m_err(*this); - return; } + } - // err == boost::asio::error::eof or we reached content-length - // Write all of the data that has been read so far. + void finish_read(const boost::system::error_code& err, std::size_t size) + { const auto& dat = m_response.data(); auto begin = boost::asio::buffers_begin(dat); auto end = boost::asio::buffers_end(dat);