refactor(http1): detect whether a Token parse error is for method or uri
This commit is contained in:
@@ -86,8 +86,8 @@ impl Http1Transaction for Server {
|
|||||||
trace!("Request.parse([Header; {}], [u8; {}])", headers.len(), buf.len());
|
trace!("Request.parse([Header; {}], [u8; {}])", headers.len(), buf.len());
|
||||||
let mut req = httparse::Request::new(&mut headers);
|
let mut req = httparse::Request::new(&mut headers);
|
||||||
let bytes = buf.as_ref();
|
let bytes = buf.as_ref();
|
||||||
match req.parse(bytes)? {
|
match req.parse(bytes) {
|
||||||
httparse::Status::Complete(parsed_len) => {
|
Ok(httparse::Status::Complete(parsed_len)) => {
|
||||||
trace!("Request.parse Complete({})", parsed_len);
|
trace!("Request.parse Complete({})", parsed_len);
|
||||||
len = parsed_len;
|
len = parsed_len;
|
||||||
subject = RequestLine(
|
subject = RequestLine(
|
||||||
@@ -106,9 +106,20 @@ impl Http1Transaction for Server {
|
|||||||
|
|
||||||
record_header_indices(bytes, &req.headers, &mut headers_indices)?;
|
record_header_indices(bytes, &req.headers, &mut headers_indices)?;
|
||||||
headers_len = req.headers.len();
|
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(),
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user