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