From dc63bd691a11f610724fcd1e0e402af1c0d58b82 Mon Sep 17 00:00:00 2001 From: dvkt Date: Thu, 26 Dec 2019 21:56:56 -0800 Subject: [PATCH] send file --- src/server.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/server.rs b/src/server.rs index 483f324..9390f9a 100644 --- a/src/server.rs +++ b/src/server.rs @@ -40,7 +40,21 @@ async fn client_loop(mut stream: TcpStream, root: String) -> Result<()> { async fn respond(stream: &mut TcpStream, selector: &str, root: &str) -> Result<()> { let mut path = PathBuf::from(root); path.push(selector.replace("..", ".")); - let mut response = format!("iPath: {}\r\n", path.to_string_lossy()); + + let md = fs::metadata(path.clone()).await?; + if md.is_file() { + let mut f = fs::File::open(path).await?; + let mut buf = [0; 1024]; + let mut bytes = md.len(); + while bytes > 0 { + let n = f.read(&mut buf[..]).await?; + bytes -= n as u64; + stream.write_all(&buf).await?; + } + return Ok(()); + } + + let mut response = String::new(); let mut dir = fs::read_dir(path.clone()).await?; while let Some(Ok(entry)) = dir.next().await {