bneradt commented on code in PR #13422:
URL: https://github.com/apache/trafficserver/pull/13422#discussion_r3639794514
##########
include/proxy/hdrs/HTTP.h:
##########
@@ -616,10 +629,70 @@ class HTTPHdr : public MIMEHdr
void mark_early_data(bool flag = true) const;
bool is_early_data() const;
+ /** Parse an HTTP/1.x request header incrementally from a raw buffer.
+ *
+ * Parses input data into the header's request fields. Call repeatedly with
the same @p parser
+ * until a result other than @c ParseResult::CONT is returned. When @c
ParseResult::DONE is
+ * returned, the request method, URL, version, and header fields are set on
this header.
+ *
+ * @param[in] parser Parser state. Must be the same
object on each call for a given message.
Review Comment:
in,out
##########
include/proxy/hdrs/HTTP.h:
##########
@@ -496,6 +496,19 @@ class HTTPHdr : public MIMEHdr
int print(char *buf, int bufsize, int *bufindex, int *dumpoffset) const;
+ /** Returns the serialized byte length of the HTTP header.
+ *
+ * The count includes the request-line (for requests) or status-line (for
+ * responses), all header fields, and the terminating blank line. The message
+ * body is not included.
Review Comment:
Does this also include `@` headers? I think so. It's probably good to
explicitly call those out since those aren't actually serialized, at least not
to the wire.
##########
include/proxy/hdrs/HTTP.h:
##########
@@ -616,10 +629,70 @@ class HTTPHdr : public MIMEHdr
void mark_early_data(bool flag = true) const;
bool is_early_data() const;
+ /** Parse an HTTP/1.x request header incrementally from a raw buffer.
+ *
+ * Parses input data into the header's request fields. Call repeatedly with
the same @p parser
+ * until a result other than @c ParseResult::CONT is returned. When @c
ParseResult::DONE is
+ * returned, the request method, URL, version, and header fields are set on
this header.
+ *
+ * @param[in] parser Parser state. Must be the same
object on each call for a given message.
+ * @param[in,out] start On entry, points to the first
unparsed byte; on return,
+ * advanced past all consumed bytes.
+ * @param[in] end One past the last available byte of
input.
+ * @param[in] eof @c true if no more data will follow
@p end.
+ * @param[in] strict_uri_parsing URI compliance level: @c 0 performs
no compliance check; @c 1 rejects
+ * the URI unless every character is a
valid RFC 3986 URI character; @c 2
+ * is more permissive, rejecting the
URI only if it contains whitespace or
+ * non-printable characters. Other
values behave like @c 0.
+ * @param[in] max_request_line_size Maximum byte length of the request
line; exceeding it returns
+ * @c ParseResult::ERROR.
+ * @param[in] max_hdr_field_size Maximum byte length of a single
header field; exceeding it
+ * returns @c ParseResult::ERROR.
+ *
+ * @return @c ParseResult::DONE if a complete valid request header has been
parsed;
+ * @c ParseResult::CONT if more data is required;
+ * @c ParseResult::ERROR on a protocol error or exceeded limit.
+ *
+ * @pre The header must be initialized with @c HTTPType::REQUEST polarity.
+ *
+ * @par Thread Safety
+ * Not thread-safe.
+ */
ParseResult parse_req(HTTPParser *parser, const char **start, const char
*end, bool eof, int strict_uri_parsing = 0,
size_t max_request_line_size = UINT16_MAX, size_t
max_hdr_field_size = 131070);
ParseResult parse_resp(HTTPParser *parser, const char **start, const char
*end, bool eof);
+ /** Parse an HTTP/1.x request header incrementally from an @c IOBufferReader.
+ *
+ * Reads and consumes data from @p r, parsing it into the header's request
fields. Call
+ * repeatedly with the same @p parser until a result other than @c
ParseResult::CONT is
+ * returned. When @c ParseResult::DONE is returned, the request method, URL,
version, and
+ * header fields are set on this header.
+ *
+ * @param[in] parser Parser state. Must be the same
object on each call for a given message.
+ * @param[in] r Source of input data; bytes consumed
by the parser are removed from
+ * the reader.
+ * @param[in,out] bytes_used Must be non-null; set to the number
of bytes consumed from @p r.
Review Comment:
`[out]`
##########
include/proxy/hdrs/HTTP.h:
##########
@@ -616,10 +629,70 @@ class HTTPHdr : public MIMEHdr
void mark_early_data(bool flag = true) const;
bool is_early_data() const;
+ /** Parse an HTTP/1.x request header incrementally from a raw buffer.
+ *
+ * Parses input data into the header's request fields. Call repeatedly with
the same @p parser
+ * until a result other than @c ParseResult::CONT is returned. When @c
ParseResult::DONE is
+ * returned, the request method, URL, version, and header fields are set on
this header.
+ *
+ * @param[in] parser Parser state. Must be the same
object on each call for a given message.
+ * @param[in,out] start On entry, points to the first
unparsed byte; on return,
+ * advanced past all consumed bytes.
+ * @param[in] end One past the last available byte of
input.
+ * @param[in] eof @c true if no more data will follow
@p end.
+ * @param[in] strict_uri_parsing URI compliance level: @c 0 performs
no compliance check; @c 1 rejects
+ * the URI unless every character is a
valid RFC 3986 URI character; @c 2
+ * is more permissive, rejecting the
URI only if it contains whitespace or
+ * non-printable characters. Other
values behave like @c 0.
+ * @param[in] max_request_line_size Maximum byte length of the request
line; exceeding it returns
+ * @c ParseResult::ERROR.
+ * @param[in] max_hdr_field_size Maximum byte length of a single
header field; exceeding it
+ * returns @c ParseResult::ERROR.
+ *
+ * @return @c ParseResult::DONE if a complete valid request header has been
parsed;
+ * @c ParseResult::CONT if more data is required;
+ * @c ParseResult::ERROR on a protocol error or exceeded limit.
+ *
+ * @pre The header must be initialized with @c HTTPType::REQUEST polarity.
+ *
+ * @par Thread Safety
+ * Not thread-safe.
+ */
ParseResult parse_req(HTTPParser *parser, const char **start, const char
*end, bool eof, int strict_uri_parsing = 0,
size_t max_request_line_size = UINT16_MAX, size_t
max_hdr_field_size = 131070);
ParseResult parse_resp(HTTPParser *parser, const char **start, const char
*end, bool eof);
+ /** Parse an HTTP/1.x request header incrementally from an @c IOBufferReader.
+ *
+ * Reads and consumes data from @p r, parsing it into the header's request
fields. Call
+ * repeatedly with the same @p parser until a result other than @c
ParseResult::CONT is
+ * returned. When @c ParseResult::DONE is returned, the request method, URL,
version, and
+ * header fields are set on this header.
+ *
+ * @param[in] parser Parser state. Must be the same
object on each call for a given message.
Review Comment:
in,out
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]