refactor(h1): deref the read buffer only once in server parse

This commit is contained in:
Sean McArthur
2018-05-31 17:57:34 -07:00
parent 72f3ccd7c5
commit 89c5643713

View File

@@ -43,7 +43,8 @@ where
let mut headers: [httparse::Header; MAX_HEADERS] = unsafe { mem::uninitialized() };
trace!("Request.parse([Header; {}], [u8; {}])", headers.len(), buf.len());
let mut req = httparse::Request::new(&mut headers);
match req.parse(&buf)? {
let bytes = buf.as_ref();
match req.parse(bytes)? {
httparse::Status::Complete(len) => {
trace!("Request.parse Complete({})", len);
let method = Method::from_bytes(req.method.unwrap().as_bytes())?;
@@ -55,7 +56,7 @@ where
Version::HTTP_10
};
record_header_indices(buf.as_ref(), &req.headers, &mut headers_indices);
record_header_indices(bytes, &req.headers, &mut headers_indices);
let headers_len = req.headers.len();
(len, subject, version, headers_len)
}
@@ -550,7 +551,7 @@ where
trace!("Response.parse([Header; {}], [u8; {}])", headers.len(), buf.len());
let mut res = httparse::Response::new(&mut headers);
let bytes = buf.as_ref();
match try!(res.parse(bytes)) {
match res.parse(bytes)? {
httparse::Status::Complete(len) => {
trace!("Response.parse Complete({})", len);
let status = StatusCode::from_u16(res.code.unwrap())?;