From 8012f6e9ebc7a02abe7e7bea1468f30c59dbf7ce Mon Sep 17 00:00:00 2001 From: Ulrich Lukas Date: Mon, 16 Nov 2020 07:10:08 +0100 Subject: [PATCH 1/2] Fix #888, AsyncEventSourceMessage::send() Tested with 16 kB message size: Respect number of already sent bytes in successive calls to AsyncEventSourceMessage::send() --- src/AsyncEventSource.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/AsyncEventSource.cpp b/src/AsyncEventSource.cpp index f2914df..4709d0b 100644 --- a/src/AsyncEventSource.cpp +++ b/src/AsyncEventSource.cpp @@ -137,16 +137,17 @@ size_t AsyncEventSourceMessage::ack(size_t len, uint32_t time) { return 0; } +// This could also return void as the return value is not used. +// Leaving as-is for compatibility... size_t AsyncEventSourceMessage::send(AsyncClient *client) { - const size_t len = _len - _sent; - if(client->space() < len){ - return 0; - } - size_t sent = client->add((const char *)_data, len); - if(client->canSend()) - client->send(); - _sent += sent; - return sent; + if (_sent >= _len) { + return 0; + } + const size_t len_to_send = _len - _sent; + auto position = reinterpret_cast(_data + _sent * sizeof(*_data)); + const size_t sent_now = client->write(position, len_to_send); + _sent += sent_now; + return sent_now; } // Client From d4bdf996c80fff46f7fbaa101ba52434b3fe974a Mon Sep 17 00:00:00 2001 From: Ulrich Lukas Date: Wed, 18 Nov 2020 11:55:28 +0100 Subject: [PATCH 2/2] fix #888 omit unnecessary sizeof() for char* --- src/AsyncEventSource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AsyncEventSource.cpp b/src/AsyncEventSource.cpp index 4709d0b..3ec2371 100644 --- a/src/AsyncEventSource.cpp +++ b/src/AsyncEventSource.cpp @@ -144,7 +144,7 @@ size_t AsyncEventSourceMessage::send(AsyncClient *client) { return 0; } const size_t len_to_send = _len - _sent; - auto position = reinterpret_cast(_data + _sent * sizeof(*_data)); + auto position = reinterpret_cast(_data + _sent); const size_t sent_now = client->write(position, len_to_send); _sent += sent_now; return sent_now;