herb/src/main.rs

56 lines
1.3 KiB
Rust
Raw Normal View History

2021-08-30 17:18:22 +01:00
use std::io::{Write, Read, BufReader, BufRead, Result};
2021-08-29 16:07:05 +01:00
use std::net::{TcpListener, TcpStream};
2021-08-30 16:17:11 +01:00
use std::fs;
use std::string::{String};
2021-08-30 17:18:22 +01:00
use std::str;
2021-08-30 16:17:11 +01:00
fn get_page() -> String {
// To-do: Make this able to load other pages
//
// The loaded page should be left immutable as it does
// not need to be modified by the server.
let filename = "index.html"; // BAD!!!
let page = fs::read_to_string(filename)
.expect("Page read failed!");
return page;
}
2021-08-29 16:07:05 +01:00
2021-08-30 17:18:22 +01:00
fn read_stream(mut stream: TcpStream) -> Result<TcpStream> {
let mut buffer = BufReader::new(stream.try_clone()?);
Ok(stream)
}
2021-08-29 16:07:05 +01:00
fn serve(mut stream: TcpStream) {
2021-08-30 16:17:11 +01:00
// To-do: Make a header generator to feed into response.
2021-08-30 17:18:22 +01:00
let mut request = Vec::new();
let mut reader = BufReader::new(&mut stream);
reader
.read_until(b'\n', &mut request)
.expect("Failed to read from stream");
println!("{}", String::from_utf8_lossy(&request));
2021-08-30 16:17:11 +01:00
let contents = get_page();
let header = "HTTP/1.1 200 OK\r\n\r\n";
let response = format!("{}{}", header, contents);
2021-08-29 16:07:05 +01:00
stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
}
fn main() -> std::io::Result<()> {
let listen = TcpListener::bind("127.0.0.1:8080")?;
for stream in listen.incoming() {
2021-08-30 17:18:22 +01:00
println!("Serving incoming stream.");
2021-08-29 16:07:05 +01:00
serve(stream?);
}
Ok(())
2021-08-29 15:18:20 +01:00
}