mirror of
https://github.com/YGGverse/titanit.git
synced 2026-03-31 17:15:30 +00:00
add route for gemini requests
This commit is contained in:
parent
a4f5c75bd0
commit
2532b3e11c
1 changed files with 163 additions and 140 deletions
43
src/main.rs
43
src/main.rs
|
|
@ -56,8 +56,12 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
let mut input = vec![0; 1024];
|
let mut input = vec![0; 1024];
|
||||||
match stream.read(&mut input) {
|
match stream.read(&mut input) {
|
||||||
Ok(0) => println!("[{}] [warning] [{peer}] Connection closed by peer", now()),
|
Ok(0) => println!("[{}] [warning] [{peer}] Connection closed by peer", now()),
|
||||||
Ok(l) => match request::Titan::from_bytes(&input[..l]) {
|
Ok(l) => {
|
||||||
Ok(titan) => {
|
match Request::from_bytes(&input[..l]) {
|
||||||
|
Ok(request) => {
|
||||||
|
match request {
|
||||||
|
Request::Gemini(gemini) => println!("request: {}", gemini.url), // @TODO
|
||||||
|
Request::Titan(titan) => {
|
||||||
// init memory pool
|
// init memory pool
|
||||||
let mut data: Vec<u8> = Vec::with_capacity(titan.size);
|
let mut data: Vec<u8> = Vec::with_capacity(titan.size);
|
||||||
loop {
|
loop {
|
||||||
|
|
@ -65,7 +69,10 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
let mut input = vec![0; argument.chunk];
|
let mut input = vec![0; argument.chunk];
|
||||||
match stream.read(&mut input) {
|
match stream.read(&mut input) {
|
||||||
Ok(0) => {
|
Ok(0) => {
|
||||||
println!("[{}] [warning] [{peer}] Connection closed by peer", now())
|
println!(
|
||||||
|
"[{}] [warning] [{peer}] Connection closed by peer",
|
||||||
|
now()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
Ok(l) => {
|
Ok(l) => {
|
||||||
data.extend(&input[..l]);
|
data.extend(&input[..l]);
|
||||||
|
|
@ -75,7 +82,8 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
|
|
||||||
// validate server-side limits
|
// validate server-side limits
|
||||||
if argument.size.is_some_and(|limit| total > limit) {
|
if argument.size.is_some_and(|limit| total > limit) {
|
||||||
const MESSAGE: &str = "Allowed max length limit reached";
|
const MESSAGE: &str =
|
||||||
|
"Allowed max length limit reached";
|
||||||
return send(
|
return send(
|
||||||
&response::failure::permanent::BadRequest {
|
&response::failure::permanent::BadRequest {
|
||||||
message: Some(MESSAGE.to_string()),
|
message: Some(MESSAGE.to_string()),
|
||||||
|
|
@ -84,9 +92,14 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
stream,
|
stream,
|
||||||
|result| match result {
|
|result| match result {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
println!("[{}] [warning] [{peer}] {MESSAGE}", now())
|
println!(
|
||||||
|
"[{}] [warning] [{peer}] {MESSAGE}",
|
||||||
|
now()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("[{}] [error] [{peer}] {e}", now())
|
||||||
}
|
}
|
||||||
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +108,8 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
if titan.size >= total {
|
if titan.size >= total {
|
||||||
// validate client-side limits
|
// validate client-side limits
|
||||||
if titan.size > total {
|
if titan.size > total {
|
||||||
const MESSAGE: &str = "Data size mismatch header declaration";
|
const MESSAGE: &str =
|
||||||
|
"Data size mismatch header declaration";
|
||||||
return send(
|
return send(
|
||||||
&response::failure::permanent::BadRequest {
|
&response::failure::permanent::BadRequest {
|
||||||
message: Some(MESSAGE.to_string()),
|
message: Some(MESSAGE.to_string()),
|
||||||
|
|
@ -104,9 +118,15 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
stream,
|
stream,
|
||||||
|result| match result {
|
|result| match result {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
println!("[{}] [warning] [{peer}] {MESSAGE}", now())
|
println!(
|
||||||
|
"[{}] [warning] [{peer}] {MESSAGE}",
|
||||||
|
now()
|
||||||
|
)
|
||||||
}
|
}
|
||||||
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
Err(e) => println!(
|
||||||
|
"[{}] [error] [{peer}] {e}",
|
||||||
|
now()
|
||||||
|
),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -213,6 +233,8 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Err(e) => send(
|
Err(e) => send(
|
||||||
&response::failure::temporary::General {
|
&response::failure::temporary::General {
|
||||||
message: Some("Internal server error".to_string()),
|
message: Some("Internal server error".to_string()),
|
||||||
|
|
@ -224,7 +246,8 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpS
|
||||||
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
},
|
}
|
||||||
|
}
|
||||||
Err(e) => send(
|
Err(e) => send(
|
||||||
&response::failure::temporary::General {
|
&response::failure::temporary::General {
|
||||||
message: Some("Internal server error".to_string()),
|
message: Some("Internal server error".to_string()),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue