From 268f20023846f090150d1897fff00c4d8f35221e Mon Sep 17 00:00:00 2001 From: Dirk-Willem van Gulik Date: Fri, 16 Sep 2016 19:53:51 +0200 Subject: [PATCH] Allow for POSTs that are larger than a few 100 bytes. --- .../src/ESP8266HTTPClient.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp index 57563c29d6..7209e941f0 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp @@ -388,8 +388,23 @@ int HTTPClient::sendRequest(const char * type, uint8_t * payload, size_t size) // send Payload if needed if(payload && size > 0) { - if(_tcp->write(&payload[0], size) != size) { - return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + size_t byteswritten = 0; + uint8_t * p = payload; + while(byteswritten < size) { + int written; + int towrite = size; + // Note: this cap may be on the small size; but over about 2k will cause coredumps. + // + if (towrite > HTTP_TCP_BUFFER_SIZE) + towrite = HTTP_TCP_BUFFER_SIZE; + written = _tcp->write(&p[0], towrite); + if (written < 0) + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + else + if (written == 0) + return returnError(HTTPC_ERROR_CONNECTION_LOST); + byteswritten += size; + size -= written; } }