| 86 | } |
| 87 | |
| 88 | ChunkedReadResult ChunkedReader::readChunk(fl::span<u8> out) { |
| 89 | using Status = ChunkedReadResult::Status; |
| 90 | if (mChunks.empty()) { |
| 91 | Status s = isFinal() ? Status::CHUNKED_FINAL : Status::CHUNKED_NO_DATA; |
| 92 | return ChunkedReadResult(s, fl::span<const u8>()); |
| 93 | } |
| 94 | const fl::vector<u8>& front = mChunks.front(); |
| 95 | if (out.size() < front.size()) { |
| 96 | // Caller's buffer is too small |
| 97 | return ChunkedReadResult(Status::CHUNKED_NO_DATA, fl::span<const u8>()); |
| 98 | } |
| 99 | memcpy(out.data(), front.data(), front.size()); |
| 100 | fl::span<const u8> written(out.data(), front.size()); |
| 101 | mChunks.erase(mChunks.begin()); |
| 102 | return ChunkedReadResult(Status::CHUNKED_DATA, written); |
| 103 | } |
| 104 | |
| 105 | size_t ChunkedReader::nextChunkSize() const { |
| 106 | if (mChunks.empty()) { |