refactor(h1): deref the read buffer only once in server parse
This commit is contained in:
@@ -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())?;
|
||||||
|
|||||||
Reference in New Issue
Block a user