mirror of
https://github.com/YGGverse/titanit.git
synced 2026-04-01 17:45:33 +00:00
send response on error
This commit is contained in:
parent
04a276116d
commit
a4f5c75bd0
1 changed files with 95 additions and 22 deletions
117
src/main.rs
117
src/main.rs
|
|
@ -38,8 +38,8 @@ fn main() -> Result<()> {
|
||||||
thread::spawn({
|
thread::spawn({
|
||||||
let argument = argument.clone();
|
let argument = argument.clone();
|
||||||
let peer = stream.peer_addr()?;
|
let peer = stream.peer_addr()?;
|
||||||
let stream = acceptor.accept(stream)?;
|
let mut stream = acceptor.accept(stream)?;
|
||||||
move || handle(argument, peer, stream)
|
move || handle(argument, peer, &mut stream)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Err(e) => println!("[{}] [error] Failed to accept connection: {e}", now()),
|
Err(e) => println!("[{}] [error] Failed to accept connection: {e}", now()),
|
||||||
|
|
@ -48,7 +48,7 @@ fn main() -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle(argument: Arc<Argument>, peer: SocketAddr, mut stream: TlsStream<TcpStream>) {
|
fn handle(argument: Arc<Argument>, peer: SocketAddr, stream: &mut TlsStream<TcpStream>) {
|
||||||
use titanite::*;
|
use titanite::*;
|
||||||
println!("[{}] [info] [{peer}] New connection", now());
|
println!("[{}] [info] [{peer}] New connection", now());
|
||||||
|
|
||||||
|
|
@ -129,44 +129,117 @@ fn handle(argument: Arc<Argument>, peer: SocketAddr, mut stream: TlsStream<TcpSt
|
||||||
now(),
|
now(),
|
||||||
pmt.path.to_string_lossy()
|
pmt.path.to_string_lossy()
|
||||||
),
|
),
|
||||||
Err(e) => {
|
Err(e) => println!(
|
||||||
println!(
|
"[{}] [warning] [{peer}] {e}",
|
||||||
"[{}] [warning] [{peer}] {e}",
|
now()
|
||||||
|
),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Err((tmp, e)) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some(
|
||||||
|
"Internal server error".to_string(),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
stream,
|
||||||
|
|result| {
|
||||||
|
match result {
|
||||||
|
Ok(()) => println!(
|
||||||
|
"[{}] [error] [{peer}] {e}",
|
||||||
now()
|
now()
|
||||||
)
|
),
|
||||||
|
Err(e) => println!(
|
||||||
|
"[{}] [error] [{peer}] {e}",
|
||||||
|
now()
|
||||||
|
),
|
||||||
|
};
|
||||||
|
if let Err(e) = tmp.delete() {
|
||||||
|
println!(
|
||||||
|
"[{}] [error] [{peer}] {e}",
|
||||||
|
now()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Err((tmp, e)) => {
|
},
|
||||||
println!("[{}] [error] [{peer}] {e}", now());
|
Err(e) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some("Internal server error".to_string()),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
stream,
|
||||||
|
|result| {
|
||||||
|
match result {
|
||||||
|
Ok(()) => {
|
||||||
|
println!("[{}] [error] [{peer}] {e}", now())
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("[{}] [error] [{peer}] {e}", now())
|
||||||
|
}
|
||||||
|
};
|
||||||
if let Err(e) = tmp.delete() {
|
if let Err(e) = tmp.delete() {
|
||||||
println!("[{}] [error] [{peer}] {e}", now());
|
println!("[{}] [error] [{peer}] {e}", now());
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
),
|
||||||
Err(e) => {
|
|
||||||
println!("[{}] [error] [{peer}] {e}", now());
|
|
||||||
if let Err(e) = tmp.delete() {
|
|
||||||
println!("[{}] [error] [{peer}] {e}", now());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
Err(e) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some("Internal server error".to_string()),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
stream,
|
||||||
|
|result| match result {
|
||||||
|
Ok(()) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
},
|
||||||
|
),
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => todo!("{e}"),
|
Err(e) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some("Internal server error".to_string()),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
stream,
|
||||||
|
|result| match result {
|
||||||
|
Ok(()) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
},
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => todo!("{e}"),
|
Err(e) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some("Internal server error".to_string()),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
stream,
|
||||||
|
|result| match result {
|
||||||
|
Ok(()) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
},
|
||||||
|
),
|
||||||
},
|
},
|
||||||
Err(e) => todo!("{e}"),
|
Err(e) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some("Internal server error".to_string()),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
stream,
|
||||||
|
|result| match result {
|
||||||
|
Ok(()) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
},
|
||||||
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send(data: &[u8], mut stream: TlsStream<TcpStream>, callback: impl FnOnce(Result<()>)) {
|
fn send(data: &[u8], stream: &mut TlsStream<TcpStream>, callback: impl FnOnce(Result<()>)) {
|
||||||
callback((|| {
|
callback((|| {
|
||||||
stream.write_all(data)?;
|
stream.write_all(data)?;
|
||||||
stream.flush()?;
|
stream.flush()?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue