diff options
author | metamuffin <metamuffin@disroot.org> | 2025-03-27 21:02:09 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-03-27 21:02:09 +0100 |
commit | 16ed59d53024784f5eeeff31591562e4cc9f2d29 (patch) | |
tree | d00442aa4aa1f4e108c68196a981309e632a023c /server | |
parent | 768b75e71949e84af120aaefa67134e55f2c0b0a (diff) | |
download | weareserver-16ed59d53024784f5eeeff31591562e4cc9f2d29.tar weareserver-16ed59d53024784f5eeeff31591562e4cc9f2d29.tar.bz2 weareserver-16ed59d53024784f5eeeff31591562e4cc9f2d29.tar.zst |
http/1.1
Diffstat (limited to 'server')
-rw-r--r-- | server/respack_http/src/main.rs | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/server/respack_http/src/main.rs b/server/respack_http/src/main.rs index be703bd..967c3c4 100644 --- a/server/respack_http/src/main.rs +++ b/server/respack_http/src/main.rs @@ -42,36 +42,35 @@ fn main() -> Result<()> { fn handle_conn(conn: TcpStream, store: Arc<ResourceStore>) -> Result<()> { let mut conn_read = BufReader::new(conn.try_clone()?); let mut conn_write = BufWriter::new(conn); + loop { + let mut buf = String::new(); + while !buf.ends_with("\r\n\r\n") { + conn_read.read_line(&mut buf)?; + } - let mut buf = String::new(); - while !buf.ends_with("\r\n\r\n") { - conn_read.read_line(&mut buf)?; - } - - let mut lines = buf.lines(); - let mut status = lines - .next() - .ok_or(anyhow!("HTTP status line missing"))? - .split(" "); - let _method = status.next().ok_or(anyhow!("HTTP method missing"))?; - let path = status.next().ok_or(anyhow!("HTTP path missing"))?; - let _httpver = status.next().ok_or(anyhow!("HTTP version missing"))?; - - let path = path - .strip_prefix("/") - .ok_or(anyhow!("path does not start on /"))?; + let mut lines = buf.lines(); + let mut status = lines + .next() + .ok_or(anyhow!("HTTP status line missing"))? + .split(" "); + let _method = status.next().ok_or(anyhow!("HTTP method missing"))?; + let path = status.next().ok_or(anyhow!("HTTP path missing"))?; + let _httpver = status.next().ok_or(anyhow!("HTTP version missing"))?; - let (code, ty, data) = handle_request(path, &store); + let path = path + .strip_prefix("/") + .ok_or(anyhow!("path does not start on /"))?; - write!(conn_write, "HTTP/1.0 {code} OK\r\n")?; - write!(conn_write, "content-type: {ty}\r\n")?; - write!(conn_write, "server: write! macros\r\n")?; - write!(conn_write, "content-length: {}\r\n", data.len())?; - write!(conn_write, "\r\n")?; - conn_write.write_all(&data)?; - conn_write.flush()?; + let (code, ty, data) = handle_request(path, &store); - Ok(()) + write!(conn_write, "HTTP/1.1 {code} OK\r\n")?; + write!(conn_write, "content-type: {ty}\r\n")?; + write!(conn_write, "server: write! macros\r\n")?; + write!(conn_write, "content-length: {}\r\n", data.len())?; + write!(conn_write, "\r\n")?; + conn_write.write_all(&data)?; + conn_write.flush()?; + } } fn handle_request(path: &str, store: &ResourceStore) -> (u16, &'static str, Vec<u8>) { |