keep alive working I feel like a god frfr (it's late an this is my personal project so if anyone is reading this (including my future self) why?)
This commit is contained in:
parent
40ccfa01d6
commit
a9ccdaf3f5
3 changed files with 20 additions and 7 deletions
|
|
@ -9,7 +9,7 @@ use std::{
|
|||
};
|
||||
|
||||
use crate::{
|
||||
request::ServerPath,
|
||||
request::Connection,
|
||||
response::{Response, ResponseCode, ResponseHeader},
|
||||
shared_enums::{Content, ContentType},
|
||||
};
|
||||
|
|
@ -30,12 +30,12 @@ fn main() -> std::io::Result<()> {
|
|||
println!("{req:?}");
|
||||
|
||||
let response = match req.path.path.to_string().as_str(){
|
||||
"css.css" => Response::new().with_code(ResponseCode::Ok).with_data(b"body{background-color: #000000;}".to_vec()).with_header(ResponseHeader::ContentType(Content::new(ContentType::Text(shared_enums::TextType::Css)))),
|
||||
"css.css" => Response::new().with_code(ResponseCode::Ok).with_data(b"body{background-color: #ff0000;}".to_vec()).with_header(ResponseHeader::ContentType(Content::new(ContentType::Text(shared_enums::TextType::Css)))),
|
||||
|
||||
_ => Response::new()
|
||||
.with_code(ResponseCode::Ok)
|
||||
.with_data(b"<!doctype html><html lang=\"en\"><head><link rel=\"stylesheet\" href=\"css.css\"><meta charset=\"UTF-8\"/><title>Hello World!</title></head><body><h1>Ahojky</h1><p>Jou jou jou</p></body></html>".to_vec())
|
||||
.with_header(ResponseHeader::ContentType(Content::html_utf8())),
|
||||
.with_header(ResponseHeader::ContentType(Content::html_utf8())).with_header(ResponseHeader::Connection(Connection::KeepAlive)),
|
||||
};
|
||||
|
||||
response.respond(&mut stream)?;
|
||||
|
|
@ -45,6 +45,7 @@ fn main() -> std::io::Result<()> {
|
|||
if req.headers.contains(&request::RequestHeader::Connection(
|
||||
request::Connection::Close,
|
||||
)) {
|
||||
println!("Connection closed");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,17 @@ pub enum Connection {
|
|||
Other(Box<str>),
|
||||
}
|
||||
|
||||
impl Connection {
|
||||
pub fn to_str(&self) -> Box<str> {
|
||||
match self {
|
||||
Connection::Close => "close".into(),
|
||||
Connection::KeepAlive => "keep-alive".into(),
|
||||
Connection::Upgrade => "Upgrade".into(),
|
||||
Connection::Other(o) => o.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub struct Upgrade {
|
||||
protocol: Protocol,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use std::{
|
|||
net::TcpStream,
|
||||
};
|
||||
|
||||
use crate::shared_enums::Content;
|
||||
use crate::{request::Connection, shared_enums::Content};
|
||||
|
||||
pub struct Response {
|
||||
http_version: Box<str>,
|
||||
|
|
@ -19,7 +19,8 @@ impl Response {
|
|||
output.extend_from_slice(b"\r\n");
|
||||
|
||||
if !self.data.is_empty() {
|
||||
output.extend_from_slice(b"\r\n");
|
||||
output.extend_from_slice(format!("Content-Length: {}", self.data.len()).as_bytes());
|
||||
output.extend_from_slice(b"\r\n\r\n");
|
||||
output.extend_from_slice(&self.data);
|
||||
}
|
||||
|
||||
|
|
@ -215,20 +216,20 @@ impl ResponseCode {
|
|||
}
|
||||
|
||||
pub enum ResponseHeader {
|
||||
ContentLength(u32),
|
||||
ContentType(Content),
|
||||
CacheControl(CacheControl),
|
||||
Connection(Connection),
|
||||
}
|
||||
|
||||
impl ResponseHeader {
|
||||
fn to_str(&self) -> Box<str> {
|
||||
type R = ResponseHeader;
|
||||
match self {
|
||||
R::ContentLength(length) => format!("Content-Length: {length}").into_boxed_str(),
|
||||
R::ContentType(content) => {
|
||||
format!("Content-Type: {}", content.to_str()).into_boxed_str()
|
||||
}
|
||||
R::CacheControl(c) => format!("Cache-Control: {}", c.to_str()).into_boxed_str(),
|
||||
R::Connection(c) => format!("Connection: {}", c.to_str()).into_boxed_str(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue