The http parser in the burl project are improved versions of those in this project. We need a design document that explains the rationale behind each change.
The document should include (not limited to) changes like:
- The per-message buffer compaction is gone. head_parser continues building the next header at a lower address inside the circular buffer, so pipelined messages no longer pay a memmove between messages.
- The parser is now sans-I/O and public: a state machine that never suspends and never touches a stream, usable from any I/O model. Bodies can be retrieved without copying: pull hands out descriptors into the parser's own buffer, and commit_direct lets the stream read straight into caller-supplied memory, bypassing the parser's buffer entirely.
- message_reader binds a stream to a parser and drives it, satisfying capy::ReadStream, http::ReadSource, and http::BufferSource over the message body. The client is rebuilt on top of it, so users driving the parser themselves get the exact same implementation the library uses.
- The trailer fields of a chunked payload are now accessible: parse_trailer appends them, in the order received, to any fields container.
- Body limit management is reduced to a single remaining-octets counter. Every body operation parses the header implicitly when it has not been parsed yet, and flatten_body de-chunks the body in place incrementally instead of requiring it complete up front.
- The compression documentation is updated for the built-in decoders.
The http parser in the burl project are improved versions of those in this project. We need a design document that explains the rationale behind each change.
The document should include (not limited to) changes like: