diff --git a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp index 61b9a8e4ff..b04e8de07b 100644 --- a/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp +++ b/libraries/ESP8266HTTPClient/src/ESP8266HTTPClient.cpp @@ -676,8 +676,22 @@ int HTTPClient::sendRequest(const char * type, uint8_t * payload, size_t size) // send Payload if needed if(payload && size > 0) { - if(_client->write(&payload[0], size) != size) { - return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + size_t byteswritten = 0; + while(byteswritten < size) { + int written; + int towrite = size - byteswritten; + // 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(&payload[byteswritten], towrite); + if (written < 0) + return returnError(HTTPC_ERROR_SEND_PAYLOAD_FAILED); + else + if (written == 0) + return returnError(HTTPC_ERROR_CONNECTION_LOST); + byteswritten += written; + size -= written; } }