INNER CODE UNIT · Rust
read_request
eepnet/emissary · emissary-cli/src/proxy/http/mod.rs:225
async fn read_request(mut stream: TcpStream) -> Result<RequestContext, (TcpStream, HttpError)> {
let mut buffer = vec![0u8; 8192];
let mut nread = 0usize;
// read from `stream` until complete request has been received
loop {
nread += match stream.read(&mut buffer[nread..]).await {
Err(error) => return Err((stream, HttpError::Io(error.kind()))),
Ok(0) => return Err((stream, HttpError::Io(std::io::ErrorKind::BrokenPipe))),
Ok(nread) => nread,
};
let mut headers = [httparse::EMPTY_HEADER; 64];
match httparse::Request::new(&mut headers).parse(&buffer[..nread]) {
Err(_) => return Err((stream, HttpError::Malformed)),
Ok(request) if request.is_complete() => break,
Ok(_) => {}
}