void ESP8266WebServer::sendContent_P(PGM_P content) { 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 memccpy signature, lots of casts are needed contentNext = (PGM_P)memccpy_P((void*)contentUnit, (PGM_VOID_P)content, 0, 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 - contentUnit; content = NULL; } // write is so overloaded, had to use the cast to get it pick the right one _currentClient.write((const char*)contentUnit, contentUnitLen); } }
void ESP8266WebServer::send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength) { String header; char type[64]; memccpy_P((void*)type, (PGM_VOID_P)content_type, 0, sizeof(type)); _prepareHeader(header, code, (const char* )type, contentLength); sendContent(header); sendContent_P(content, contentLength); }
void ESP8266WebServer::send_P(int code, PGM_P content_type, PGM_P content) { size_t contentLength = 0; if (content != NULL) { contentLength = strlen_P(content); } String header; char type[64]; memccpy_P((void*)type, (PGM_VOID_P)content_type, 0, sizeof(type)); _prepareHeader(header, code, (const char* )type, contentLength); _currentClient.write(header.c_str(), header.length()); sendContent_P(content); }