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