|
@@ -0,0 +1,40 @@
|
|
|
+
|
|
|
+use std::io::prelude::*;
|
|
|
+use std::net::TcpListener;
|
|
|
+use std::net::TcpStream;
|
|
|
+use std::fs::File;
|
|
|
+
|
|
|
+
|
|
|
+fn main() {
|
|
|
+ let listener = TcpListener::bind("127.0.0.1:8080").unwrap();
|
|
|
+
|
|
|
+ for stream in listener.incoming() {
|
|
|
+ let stream = stream.unwrap();
|
|
|
+
|
|
|
+ handle_connection(stream);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+fn handle_connection(mut stream: TcpStream) {
|
|
|
+ // assuming that 512 bytes will be enough for most request sizes
|
|
|
+ // this would be more complicated otherwise
|
|
|
+ // also, this is declared on the stack
|
|
|
+ let mut buffer = [0;512];
|
|
|
+
|
|
|
+ stream.read(&mut buffer).unwrap();
|
|
|
+
|
|
|
+ // hey, i'm reading a file!
|
|
|
+ let mut file = File::open("hello.html").unwrap();
|
|
|
+
|
|
|
+ let mut contents = String::new();
|
|
|
+ file.read_to_string(&mut contents).unwrap();
|
|
|
+
|
|
|
+ // slap that into a response
|
|
|
+ let response = format!("HTTP/1.1 200 OK\r\n\r\n{}", contents);
|
|
|
+
|
|
|
+ stream.write(response.as_bytes()).unwrap();
|
|
|
+ stream.flush().unwrap();
|
|
|
+
|
|
|
+ println!("Request: {}", String::from_utf8_lossy(&buffer[..]));
|
|
|
+}
|