Add sendContent overload that takes a const char* and a length (#4276)

The web server currently lacks the ability to send a buffer. Only strings are supported.

This PR adds an overload to sendContent.
This commit is contained in:
Niklas Mollenhauer 2020-11-02 18:17:02 +01:00 committed by GitHub
parent 3054bdf5a5
commit f57c36782f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 4 deletions

View File

@ -463,20 +463,23 @@ void WebServer::send(int code, const String& content_type, const String& content
} }
void WebServer::sendContent(const String& content) { void WebServer::sendContent(const String& content) {
sendContent(content.c_str(), content.length());
}
void WebServer::sendContent(const char* content, size_t contentLength) {
const char * footer = "\r\n"; const char * footer = "\r\n";
size_t len = content.length();
if(_chunked) { if(_chunked) {
char * chunkSize = (char *)malloc(11); char * chunkSize = (char *)malloc(11);
if(chunkSize){ if(chunkSize){
sprintf(chunkSize, "%x%s", len, footer); sprintf(chunkSize, "%x%s", contentLength, footer);
_currentClientWrite(chunkSize, strlen(chunkSize)); _currentClientWrite(chunkSize, strlen(chunkSize));
free(chunkSize); free(chunkSize);
} }
} }
_currentClientWrite(content.c_str(), len); _currentClientWrite(content, contentLength);
if(_chunked){ if(_chunked){
_currentClient.write(footer, 2); _currentClient.write(footer, 2);
if (len == 0) { if (contentLength == 0) {
_chunked = false; _chunked = false;
} }
} }

View File

@ -130,6 +130,7 @@ public:
void setContentLength(const size_t contentLength); void setContentLength(const size_t contentLength);
void sendHeader(const String& name, const String& value, bool first = false); void sendHeader(const String& name, const String& value, bool first = false);
void sendContent(const String& content); void sendContent(const String& content);
void sendContent(const char* content, size_t contentLength);
void sendContent_P(PGM_P content); void sendContent_P(PGM_P content);
void sendContent_P(PGM_P content, size_t size); void sendContent_P(PGM_P content, size_t size);