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]

Reply via email to