@@ -714,32 +714,42 @@ size_t AsyncProgmemResponse::_fillBuffer(uint8_t *data, size_t len){
714714 * Response Stream (You can print/write/printf to it, up to the contentLen bytes)
715715 * */
716716
717- AsyncResponseStream::AsyncResponseStream (const String& contentType, size_t bufferSize){
717+ AsyncResponseStream::AsyncResponseStream (const String& contentType, size_t bufferSize) : _print(_content, bufferSize), _offset( 0 ) {
718718 _code = 200 ;
719719 _contentLength = 0 ;
720720 _contentType = contentType;
721- _content = new cbuf (bufferSize);
722721}
723722
724723AsyncResponseStream::~AsyncResponseStream (){
725- delete _content ;
724+ ;
726725}
727726
728727size_t AsyncResponseStream::_fillBuffer (uint8_t *buf, size_t maxLen){
729- return _content->read ((char *)buf, maxLen);
728+ size_t read = 0 ;
729+ while ((maxLen > 0 ) && !_content.empty ()) {
730+ auto & dbuf = _content.front ();
731+ auto to_read = std::min (dbuf.size () - _offset, maxLen);
732+ memcpy (buf, dbuf.data () + _offset, to_read);
733+ buf += to_read;
734+ maxLen -= to_read;
735+ read += to_read;
736+ _offset += to_read;
737+ if (_offset == dbuf.size ()) {
738+ _content.pop_front ();
739+ _offset = 0 ;
740+ }
741+ }
742+
743+ return read;
730744}
731745
732746size_t AsyncResponseStream::write (const uint8_t *data, size_t len){
733747 if (_started ())
734748 return 0 ;
735-
736- if (len > _content->room ()){
737- size_t needed = len - _content->room ();
738- _content->resizeAdd (needed);
739- }
740- size_t written = _content->write ((const char *)data, len);
741- _contentLength += written;
742- return written;
749+
750+ auto size = _print.write (data, len);
751+ _contentLength += size;
752+ return size;
743753}
744754
745755size_t AsyncResponseStream::write (uint8_t data){
0 commit comments