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); }
////////////////////////////////////////////////////////////////////////////////////////////////// // Read data from ROM and send to web client ////////////////////////////////////////////////////////////////////////////////////////////////// void ESP8266WebServerEx::sendWebData(const char* data, size_t dsize, TDataProcessingHandler handler) { #define SEND_DATA_BUFFER_SIZE 1024 char *buf = (char*)malloc(SEND_DATA_BUFFER_SIZE*4+1); long n; size_t len = dsize; uint32 *p; uint32 *q; if ( !buf ) return; p = (uint32*)data; if ( ((unsigned long)dsize)&0x3 ) n = (dsize/4)+1; else n = (dsize/4); while (n>=SEND_DATA_BUFFER_SIZE) { q = (uint32*)buf; for (int i=0; i<SEND_DATA_BUFFER_SIZE; i++) { delay(0); *q = *p; p++; q++; } n -= SEND_DATA_BUFFER_SIZE; if ( handler ) (*handler)(buf,SEND_DATA_BUFFER_SIZE*4); sendContent_P(buf,SEND_DATA_BUFFER_SIZE*4); len -= SEND_DATA_BUFFER_SIZE*4; } if ( n ) { q = (uint32*)buf; while ( n-- ) { delay(0); *q = *p; p++; q++; } if ( handler ) (*handler)(buf,len); sendContent_P(buf,len); } free(buf); }
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); }
void ESP8266WebServer::sendContent_P(PGM_P content) { sendContent_P(content, strlen_P(content)); }