refactor(http1): detect whether a Token parse error is for method or uri

This commit is contained in:
Sean McArthur
2019-07-03 14:59:03 -07:00
parent cf24765a22
commit 3446af020b

View File

@@ -86,8 +86,8 @@ impl Http1Transaction for Server {
trace!("Request.parse([Header; {}], [u8; {}])", headers.len(), buf.len());
let mut req = httparse::Request::new(&mut headers);
let bytes = buf.as_ref();
match req.parse(bytes)? {
httparse::Status::Complete(parsed_len) => {
match req.parse(bytes) {
Ok(httparse::Status::Complete(parsed_len)) => {
trace!("Request.parse Complete({})", parsed_len);
len = parsed_len;
subject = RequestLine(
@@ -106,9 +106,20 @@ impl Http1Transaction for Server {
record_header_indices(bytes, &req.headers, &mut headers_indices)?;
headers_len = req.headers.len();
//(len, subject, version, headers_len)
}
httparse::Status::Partial => return Ok(None),
Ok(httparse::Status::Partial) => return Ok(None),
Err(err) => return Err(match err {
// if invalid Token, try to determine if for method or path
httparse::Error::Token => {
if req.method.is_none() {
Parse::Method
} else {
debug_assert!(req.path.is_none());
Parse::Uri
}
},
other => other.into(),
}),
}
};