forked from me-no-dev/ESPAsyncWebServer
Implement sending content from progmem
make the example editor run from progmem
This commit is contained in:
1 parent
7a1fd02cce
commit
d61cc2d130
9 files changed
+477
-77
No files matched your search
@@ -209,6 +209,8 @@ class AsyncWebServerRequest {
|
||||
void send(Stream &stream, String contentType, size_t len);
|
||||
void send(String contentType, size_t len, AwsResponseFiller callback);
|
||||
void sendChunked(String contentType, AwsResponseFiller callback);
|
||||
void send_P(int code, String contentType, const uint8_t * content, size_t len);
|
||||
void send_P(int code, String contentType, PGM_P content);
|
||||
|
||||
AsyncWebServerResponse *beginResponse(int code, String contentType=String(), String content=String());
|
||||
AsyncWebServerResponse *beginResponse(FS &fs, String path, String contentType=String(), bool download=false);
|
||||
@@ -217,6 +219,8 @@ class AsyncWebServerRequest {
|
||||
AsyncWebServerResponse *beginResponse(String contentType, size_t len, AwsResponseFiller callback);
|
||||
AsyncWebServerResponse *beginChunkedResponse(String contentType, AwsResponseFiller callback);
|
||||
AsyncResponseStream *beginResponseStream(String contentType, size_t bufferSize=1460);
|
||||
AsyncWebServerResponse *beginResponse_P(int code, String contentType, const uint8_t * content, size_t len);
|
||||
AsyncWebServerResponse *beginResponse_P(int code, String contentType, PGM_P content);
|
||||
|
||||
int headers(); // get header count
|
||||
bool hasHeader(String name);
|
||||
|
||||
@@ -673,6 +673,14 @@ AsyncResponseStream * AsyncWebServerRequest::beginResponseStream(String contentT
|
||||
return new AsyncResponseStream(contentType, bufferSize);
|
||||
}
|
||||
|
||||
AsyncWebServerResponse * AsyncWebServerRequest::beginResponse_P(int code, String contentType, const uint8_t * content, size_t len){
|
||||
return new AsyncProgmemResponse(code, contentType, content, len);
|
||||
}
|
||||
|
||||
AsyncWebServerResponse * AsyncWebServerRequest::beginResponse_P(int code, String contentType, PGM_P content){
|
||||
return beginResponse_P(code, contentType, (const uint8_t *)content, strlen_P(content));
|
||||
}
|
||||
|
||||
void AsyncWebServerRequest::send(int code, String contentType, String content){
|
||||
send(beginResponse(code, contentType, content));
|
||||
}
|
||||
@@ -701,6 +709,14 @@ void AsyncWebServerRequest::sendChunked(String contentType, AwsResponseFiller ca
|
||||
send(beginChunkedResponse(contentType, callback));
|
||||
}
|
||||
|
||||
void AsyncWebServerRequest::send_P(int code, String contentType, const uint8_t * content, size_t len){
|
||||
send(beginResponse_P(code, contentType, content, len));
|
||||
}
|
||||
|
||||
void AsyncWebServerRequest::send_P(int code, String contentType, PGM_P content){
|
||||
send(beginResponse_P(code, contentType, content));
|
||||
}
|
||||
|
||||
void AsyncWebServerRequest::redirect(String url){
|
||||
AsyncWebServerResponse * response = beginResponse(302);
|
||||
response->addHeader("Location",url);
|
||||
|
||||
@@ -81,6 +81,15 @@ class AsyncChunkedResponse: public AsyncAbstractResponse {
|
||||
size_t _fillBuffer(uint8_t *buf, size_t maxLen);
|
||||
};
|
||||
|
||||
class AsyncProgmemResponse: public AsyncAbstractResponse {
|
||||
private:
|
||||
const uint8_t * _content;
|
||||
public:
|
||||
AsyncProgmemResponse(int code, String contentType, const uint8_t * content, size_t len);
|
||||
bool _sourceValid(){ return true; }
|
||||
size_t _fillBuffer(uint8_t *buf, size_t maxLen);
|
||||
};
|
||||
|
||||
class cbuf;
|
||||
|
||||
class AsyncResponseStream: public AsyncAbstractResponse, public Print {
|
||||
|
||||
@@ -471,6 +471,27 @@ size_t AsyncChunkedResponse::_fillBuffer(uint8_t *data, size_t len){
|
||||
return _content(data, len, _sentLength);
|
||||
}
|
||||
|
||||
/*
|
||||
* Progmem Response
|
||||
* */
|
||||
|
||||
AsyncProgmemResponse::AsyncProgmemResponse(int code, String contentType, const uint8_t * content, size_t len){
|
||||
_code = code;
|
||||
_content = content;
|
||||
_contentType = contentType;
|
||||
_contentLength = len;
|
||||
}
|
||||
|
||||
size_t AsyncProgmemResponse::_fillBuffer(uint8_t *data, size_t len){
|
||||
size_t left = _contentLength - _sentLength;
|
||||
if (left > len) {
|
||||
memcpy_P(data, _content + _sentLength, len);
|
||||
return len;
|
||||
}
|
||||
memcpy_P(data, _content + _sentLength, left);
|
||||
return left;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Response Stream (You can print/write/printf to it, up to the contentLen bytes)
|
||||
|
||||
Reference in new issue
Block a user