From 0786061c24f724201ac26e6680432291501a6b22 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Fri, 6 Nov 2020 08:03:36 +0100 Subject: [PATCH] Serve files --- index.gmi | 1 + src/main.rs | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 index.gmi diff --git a/index.gmi b/index.gmi new file mode 100644 index 0000000..d710d75 --- /dev/null +++ b/index.gmi @@ -0,0 +1 @@ +Hello from index.gmi \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 9406030..a1b6cbd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,9 +12,11 @@ use std::thread; use url::Url; fn main() { - let mut file = File::open("identity.pfx").unwrap(); + let mut file = + File::open("identity.pfx").expect("File identity.pfx not found in current directory"); let mut identity = vec![]; - file.read_to_end(&mut identity).unwrap(); + file.read_to_end(&mut identity) + .expect("Cannot read identity.pfx"); let identity = Identity::from_pkcs12(&identity, "qqqq").unwrap(); // 1965 is the standard port for gemini @@ -31,9 +33,9 @@ fn main() { match stream { Ok(stream) => { let acceptor = acceptor.clone(); - thread::spawn(move || { - let stream = acceptor.accept(stream).unwrap(); - handle_client(stream); + thread::spawn(move || match acceptor.accept(stream) { + Ok(stream) => handle_client(stream), + Err(e) => println!("Can't handle stream: {}", e), }); } Err(_e) => println!("Error: {}", _e), @@ -67,9 +69,32 @@ fn handle_client(mut stream: TlsStream) { response.extend("\r\n".as_bytes()); - response.extend("Hello World!".as_bytes()); + let file_path = request + .path() + .chars() + .next() + .map(|c| &request.path()[c.len_utf8()..]) + .unwrap(); + + println!("Reading {}", file_path); + + let mut file = File::open(file_path).unwrap(); + if let Err(e) = file.read_to_end(&mut response) { + println!("Could not read file {}", file_path); + } if let Err(e) = stream.write(&response) { println!("Could not write to stream: {}", e); } } + +fn crop_letters(s: &mut String, pos: usize) { + match s.char_indices().nth(pos) { + Some((pos, _)) => { + s.drain(..pos); + } + None => { + s.clear(); + } + } +}