diff --git a/docs/TODO.md b/docs/TODO.md
new file mode 100644
index 0000000..81bea3f
--- /dev/null
+++ b/docs/TODO.md
@@ -0,0 +1,9 @@
+# TODO
+- [ ] Router
+- [ ] HTTP code mapper
+- [ ] JS / CSS data
+- [ ] Media manager
+- [ ] Log system
+ - [ ] File management
+ - [ ] Auto-cleanup
+ - [ ] Transversal utility
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b04c8ca
--- /dev/null
+++ b/index.html
@@ -0,0 +1,11 @@
+
+
+
+
+
+ Document
+
+
+ HEY!
+
+
diff --git a/src/http.rs b/src/http.rs
new file mode 100644
index 0000000..7ec9c5c
--- /dev/null
+++ b/src/http.rs
@@ -0,0 +1,38 @@
+use std::fs;
+use std::io::prelude::*;
+use std::net::TcpStream;
+
+pub struct ProcessedResponse {
+ pub data: String,
+ status: u8,
+}
+
+pub fn process_petition(stream: &mut TcpStream) -> std::io::Result {
+ let mut buffer = [0; 1024];
+
+ let _amount = stream.read(&mut buffer)?;
+
+ let petition = String::from_utf8_lossy(&buffer[..]);
+
+ let petition = petition.split("\n");
+
+ for line in petition {
+ println!("PART: {}", line)
+ }
+
+ let response_status = "200 OK";
+
+ let response_content = fs::read_to_string("./index.html").unwrap();
+
+ let response: ProcessedResponse = ProcessedResponse {
+ data: format!(
+ "HTTP/1.1 {}\r\nContent-Length: {}\r\n\r\n{}",
+ response_status,
+ response_content.len(),
+ response_content
+ ),
+ status: 200,
+ };
+
+ Ok(response)
+}
diff --git a/src/main.rs b/src/main.rs
index 294c380..0aff297 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,17 +1,7 @@
use std::io::prelude::*;
-use std::net::{SocketAddr, TcpListener, TcpStream};
+use std::net::{SocketAddr, TcpListener};
-fn handle_petition(mut stream: TcpStream) -> std::io::Result<()> {
- let mut buffer = [0; 1024];
-
- let amount = stream.read(&mut buffer)?;
-
- println!(
- "Request: {} of {amount} bytes",
- String::from_utf8_lossy(&buffer[..])
- );
- Ok(())
-}
+mod http;
fn main() {
let addr = SocketAddr::from(([127, 0, 0, 1], 80));
@@ -21,8 +11,25 @@ fn main() {
println!("Server up and running!");
for stream in listener.incoming() {
- let _stream = stream.unwrap();
+ let mut _stream = stream.unwrap();
println!("Connection established!");
- let _result = handle_petition(_stream);
+ let response = http::process_petition(&mut _stream);
+
+ // TODO: manage error case
+ match response {
+ Ok(data) => {
+ let _amount = _stream.write(data.data.as_bytes()).unwrap();
+ }
+ Err(e) => {
+ println!("Error: {:?}", e);
+ let _amount = _stream
+ .write(
+ "HTTP/1.1 500 Internal Server Error\r\nContent-Length: 0\r\n\r\n"
+ .as_bytes(),
+ )
+ .unwrap();
+ }
+ }
+ _stream.flush().unwrap();
}
}