From 0b0d26e053d8fbef4efa6e97de7d905dabdb7a27 Mon Sep 17 00:00:00 2001 From: technyon Date: Sat, 18 Jun 2022 12:37:04 +0200 Subject: [PATCH] fix bug in W5500 code --- lib/WebServer/src/hardware/W5500EthClient.cpp | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/WebServer/src/hardware/W5500EthClient.cpp b/lib/WebServer/src/hardware/W5500EthClient.cpp index 4992fb2..29bef77 100644 --- a/lib/WebServer/src/hardware/W5500EthClient.cpp +++ b/lib/WebServer/src/hardware/W5500EthClient.cpp @@ -23,7 +23,36 @@ int W5500EthClient::setTimeout(uint32_t seconds) size_t W5500EthClient::write(const char *buffer, size_t size) { - return _ethClient->write(buffer, size); + if(size == 0) + { + return 0; + } + + const size_t chunkSize = 2048; // W5100.SSIZE in socket.cpp + + uint32_t index = 0; + uint32_t bytesLeft = 0; + size_t written = 0; + + do + { + bytesLeft = size - index; + if(bytesLeft >= chunkSize) + { + _ethClient->write(&buffer[index], chunkSize); + index = index + chunkSize; + written = written + chunkSize; + } + else + { + _ethClient->write(&buffer[index], bytesLeft); + index = index + bytesLeft; + written = written + bytesLeft; + } + } while (bytesLeft > 0); + + return written; +// return _ethClient->write(buffer, size); } IPAddress W5500EthClient::localIP()