diff --git a/include/cinatra/coro_http_client.hpp b/include/cinatra/coro_http_client.hpp index f2ae71b5..720b21e3 100644 --- a/include/cinatra/coro_http_client.hpp +++ b/include/cinatra/coro_http_client.hpp @@ -1612,14 +1612,6 @@ class coro_http_client : public std::enable_shared_from_this { break; } - if (chunk_size == 0) { - // all finished, no more data - chunked_buf_.consume(CRCF.size()); - data.status = 200; - data.eof = true; - break; - } - if (additional_size < size_t(chunk_size + 2)) { // not a complete chunk, read left chunk data. size_t size_to_read = chunk_size + 2 - additional_size; @@ -1630,6 +1622,14 @@ class coro_http_client : public std::enable_shared_from_this { } } + if (chunk_size == 0) { + // all finished, no more data + chunked_buf_.consume(chunked_buf_.size()); + data.status = 200; + data.eof = true; + break; + } + data_ptr = asio::buffer_cast(chunked_buf_.data()); if (ctx.stream) { ec = co_await ctx.stream->async_write(data_ptr, chunk_size); diff --git a/include/cinatra/coro_http_connection.hpp b/include/cinatra/coro_http_connection.hpp index f0590379..6f25a9f1 100644 --- a/include/cinatra/coro_http_connection.hpp +++ b/include/cinatra/coro_http_connection.hpp @@ -524,13 +524,6 @@ class coro_http_connection chunked_buf_.consume(size); - if (chunk_size == 0) { - // all finished, no more data - chunked_buf_.consume(CRCF.size()); - result.eof = true; - co_return result; - } - if (additional_size < size_t(chunk_size + 2)) { // not a complete chunk, read left chunk data. size_t size_to_read = chunk_size + 2 - additional_size; @@ -542,6 +535,13 @@ class coro_http_connection } } + if (chunk_size == 0) { + // all finished, no more data + chunked_buf_.consume(chunked_buf_.size()); + result.eof = true; + co_return result; + } + data_ptr = asio::buffer_cast(chunked_buf_.data()); result.data = std::string_view{data_ptr, (size_t)chunk_size}; chunked_buf_.consume(chunk_size + CRCF.size());