got rid of that fucking http crate for fags

doctorpavel
Dawid J. Kubis 3 years ago
parent 36f5eb943e
commit a8b61ee96c

18
Cargo.lock generated

@ -97,12 +97,6 @@ version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]] [[package]]
name = "bytesize" name = "bytesize"
version = "1.1.0" version = "1.1.0"
@ -310,17 +304,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "http"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "1.7.0" version = "1.7.0"
@ -352,7 +335,6 @@ version = "0.1.0"
dependencies = [ dependencies = [
"bytesize", "bytesize",
"comrak", "comrak",
"http",
"num_cpus", "num_cpus",
"sled", "sled",
"structopt", "structopt",

@ -8,10 +8,8 @@ edition = "2021"
[dependencies] [dependencies]
structopt = "0.3.25" structopt = "0.3.25"
comrak = "0.12.1" comrak = "0.12.1"
http = "0.2.5"
threadpool = "1.8.1" threadpool = "1.8.1"
num_cpus = "1.13.0" num_cpus = "1.13.0"
sled = "0.34.7" sled = "0.34.7"
thiserror = "1.0.30" thiserror = "1.0.30"
bytesize = "1.1.0" bytesize = "1.1.0"

@ -1,5 +1,5 @@
### Server Settings ### Rules
+ no bans + single page
+ threads might be deleted if they reach maximum storage + threads might be deleted if they reach maximum storage
capacity - the least active thread will then be removed. capacity - the least active thread will then be removed.
+ id's will be attached to every thread and every response + id's will be attached to every thread and every response

@ -1,4 +1,7 @@
mod routes; mod routes;
mod models;
use crate::models::Request;
use std::io::Read; use std::io::Read;
use std::net::{TcpListener, TcpStream}; use std::net::{TcpListener, TcpStream};
@ -6,11 +9,12 @@ use std::path::PathBuf;
use std::str; use std::str;
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
use http::request::Request;
use http::method::Method;
use structopt::StructOpt; use structopt::StructOpt;
use threadpool::ThreadPool; use threadpool::ThreadPool;
static INDEX: &str = include_str!("www/index.html");
static FAVICON: &'static [u8] = include_bytes!("www/favicon.ico");
#[derive(StructOpt, Debug)] #[derive(StructOpt, Debug)]
struct Opt { struct Opt {
#[structopt(short, long, default_value = "8000")] #[structopt(short, long, default_value = "8000")]
@ -26,60 +30,13 @@ struct Opt {
database: PathBuf, database: PathBuf,
} }
struct KchanError {
}
// very specific
// TODO less retarded implementation
// and get rid of unwraps
fn parse_request(text: &str) -> Request<String> {
let request = Request::builder();
let mut iter = text.lines();
let mut first = iter.nth(0).unwrap().split_whitespace();
let method = first.next().unwrap();
let uri = first.next().unwrap();
// now headers
let mut headers: Vec<(&str, &str)> = vec![];
for line in &mut iter {
println!("{}", line);
if line.is_empty() {
break;
};
let line: Vec<&str> = line.split(":").take(2).collect();
headers.push((line[0], line[1]));
}
let body: String = iter.fold(String::from(""), |a, b| format!("{}{}", a, b));
let mut request = request.method(method).uri(uri);
for header in headers {
request = request.header(header.0, header.1);
}
request.body(body).unwrap()
}
fn handle(mut stream: TcpStream) {
let ip = stream.peer_addr();
let mut buffer = [0; 1 << 10]; // 2 to the power of 10
stream.read(&mut buffer).unwrap();
let text = str::from_utf8(&buffer) fn handle(request: Request) {
.unwrap() // check admin priviledges
.trim_matches(0 as char) // gets rid of null at the end of buffer match request.method.as_str() {
.trim(); "GET" => "",
"POST" => "",
let request = parse_request(text); "DELETE" => "",
println!("{:?}", request);
match *request.method() {
Method::GET => "",
Method::POST => "",
Method::DELETE => "",
_ => "", _ => "",
}; };
} }
@ -93,10 +50,20 @@ fn main() {
// maybe send back here? // maybe send back here?
for stream in listener.incoming() { for stream in listener.incoming() {
let stream = stream.unwrap(); let mut stream = stream.unwrap();
pool.execute(|| { pool.execute(move || {
let ip = stream.peer_addr();
let mut buffer = [0; 1 << 10]; // 2 to the power of 10
stream.read(&mut buffer).unwrap();
let text = str::from_utf8(&buffer)
.unwrap()
.trim_matches(0 as char); // gets rid of null at the end of buffer
let request: Request = text.parse().unwrap();
handle(stream) handle(request)
}); });
} }
} }

@ -0,0 +1,36 @@
use std::str::FromStr;
pub struct Request {
pub method: String,
pub uri: String,
pub headers: Vec<(String, String)>,
pub body: String,
}
// TODO implement this with display and enums
impl FromStr for Request {
type Err = String;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let mut iter = s.lines();
let mut first = iter.nth(0).unwrap().split_whitespace();
let method = first.next().unwrap().to_string();
let uri = first.next().unwrap().to_string();
let mut headers: Vec<(String, String)> = vec![];
for line in &mut iter {
if line.is_empty() {
break;
}
let line: Vec<&str> = line.split(":").take(2).collect();
headers.push((line[0].into(), line[1].into()));
}
let body: String = iter.fold(String::new(), |a, b| format!("{}{}", a, b));
Ok(Self {
method,
uri,
headers,
body,
})
}
}

@ -1,6 +0,0 @@
use std::net::TcpListener;
use rayon::prelude::*;
Loading…
Cancel
Save