1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-04 18:03:20 +03:00

add ESP8266WebServer::sendContent_P with 'size_t size' argument for binary content

This commit is contained in:
Martin Ayotte 2015-09-06 13:27:12 -04:00
parent 389107f09d
commit 82748a872c
2 changed files with 30 additions and 0 deletions

View File

@ -221,6 +221,35 @@ void ESP8266WebServer::sendContent_P(PGM_P content) {
}
}
void ESP8266WebServer::sendContent_P(PGM_P content, size_t size) {
char contentUnit[HTTP_DOWNLOAD_UNIT_SIZE + 1];
contentUnit[HTTP_DOWNLOAD_UNIT_SIZE] = '\0';
while (content != NULL) {
size_t contentUnitLen;
PGM_P contentNext;
// due to the memcpy signature, lots of casts are needed
contentNext = (PGM_P)memcpy_P((void*)contentUnit, (PGM_VOID_P)content, HTTP_DOWNLOAD_UNIT_SIZE);
if (contentNext == NULL) {
// no terminator, more data available
content += HTTP_DOWNLOAD_UNIT_SIZE;
contentUnitLen = HTTP_DOWNLOAD_UNIT_SIZE;
}
else {
// reached terminator
contentUnitLen = contentNext - content;
content = NULL;
}
if (size < WIFICLIENT_MAX_PACKET_SIZE) contentUnitLen = size;
// write is so overloaded, had to use the cast to get it pick the right one
_currentClient.write((const char*)contentUnit, contentUnitLen);
}
}
String ESP8266WebServer::arg(const char* name) {
for (int i = 0; i < _currentArgCount; ++i) {
if (_currentArgs[i].key == name)

View File

@ -95,6 +95,7 @@ public:
void sendHeader(const String& name, const String& value, bool first = false);
void sendContent(const String& content);
void sendContent_P(PGM_P content);
void sendContent_P(PGM_P content, size_t size);
template<typename T> size_t streamFile(T &file, const String& contentType){
setContentLength(file.size());