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(_) => {}
            }

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…