diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..6d4a78d --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "FediverseServer" +version = "0.1.0" diff --git a/src/404.html b/src/404.html new file mode 100644 index 0000000..c283fe1 --- /dev/null +++ b/src/404.html @@ -0,0 +1,11 @@ + + + + + Ouch! + + +

404

+

Page not found.

+ + diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..fe442d6 --- /dev/null +++ b/src/index.html @@ -0,0 +1,11 @@ + + + + + Hello! + + +

Hello!

+

Hi from Rust

+ + diff --git a/src/main.rs b/src/main.rs index a51ebad..571fed6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,37 @@ -use std::net; +#![allow(non_snake_case)] +use std::net::{TcpListener, TcpStream}; +use std::io::{BufReader, prelude::*}; +use std::fs; -fn main() { - println!("Hello, world!"); +fn main() -> std::io::Result<()> { + let TCPlistener = TcpListener::bind("127.0.0.1:8080").unwrap(); + for Stream in TCPlistener.incoming() { + ServePage(Stream?); + } + Ok(()) +} + +fn ServePage(mut Stream: TcpStream) { + // Identifying information. + let Buffer = BufReader::new(&Stream); + let HTTPrequest: Vec<_> = Buffer.lines().map(|result| result.unwrap()).take_while(|line| !line.is_empty()).collect(); + println!("{HTTPrequest:#?}"); + + // Response. + #[allow(unused_assignments)] + let mut Status : &str = ""; + #[allow(unused_assignments)] + let mut Contents : String = "".to_string(); + + if HTTPrequest[0] == "GET / HTTP/1.1" { + Status = "HTTP/1.1 200 OK"; + Contents = fs::read_to_string("src/index.html").unwrap(); + } else { + Status = "HTTP/1.1 404 Not Found"; + Contents = fs::read_to_string("src/404.html").unwrap(); + } + let Length = Contents.len(); + let Response : String = format!("{Status}\r\nContent-Length: {Length}\r\n\r\n{Contents}"); + + Stream.write_all(Response.as_bytes()).unwrap(); }