X-Git-Url: https://piware.de/gitweb/?p=learn-rust.git;a=blobdiff_plain;f=simple-http%2Fsrc%2Fmain.rs;fp=simple-http%2Fsrc%2Fmain.rs;h=0000000000000000000000000000000000000000;hp=0993075332c1c2335f135f45f0b1c875d7b5a783;hb=4d4ba2d5f703969851742798e79e16333fb9ca9a;hpb=30342e681c6db184ebca5aa2c30ee8bb7f60470d diff --git a/simple-http/src/main.rs b/simple-http/src/main.rs deleted file mode 100644 index 0993075..0000000 --- a/simple-http/src/main.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::io::prelude::*; - -use std::net::TcpListener; -use std::net::TcpStream; -use std::time::Duration; -use std::{fs, str, thread}; - -fn handle_connection(mut stream: TcpStream) { - let mut buffer = [0; 1024]; - - stream.read(&mut buffer).unwrap(); - - let buffer = match str::from_utf8(&buffer[..]) { - Ok(s) => s, - Err(e) => { - eprintln!("Invalid non-UTF8 request: {}\n{}", e, String::from_utf8_lossy(&buffer[..])); - return; - } - }; - println!("Request: {}", buffer); - - let path; - - // simple web server, just interested in first line - if let Some(line) = buffer.lines().next() { - let request: Vec<_> = line.split_whitespace().collect(); - if request.len() != 3 || request[0] != "GET" || request[2] != "HTTP/1.1" { - stream.write(b"HTTP/1.1 501 NOT IMPLEMENTED\r\n").unwrap(); - stream.flush().unwrap(); - return; - } - - path = request[1]; - } else { - eprintln!("Ignoring empty request: {}", buffer); - return; - } - - let (code, file) = if path == "/" || path == "/index.html" { - ("200 OK", "index.html") - } else if path == "/slow" { - thread::sleep(Duration::from_secs(5)); - ("200 OK", "index.html") - } else { - ("404 NOT FOUND", "404.html") - }; - - let text = fs::read_to_string(file).unwrap(); - - let response = format!( - "HTTP/1.1 {}\r\n\ - Content-Type: text/html\r\n\ - Content-Length: {}\r\n\r\n{}", - code, - text.len(), - text); - - stream.write(response.as_bytes()).unwrap(); - stream.flush().unwrap(); -} - -fn main() { - let listener = TcpListener::bind("127.0.0.1:7878").unwrap(); - - for stream in listener.incoming() { - let stream = stream.unwrap(); - thread::spawn(|| handle_connection(stream)); - } -}