mirror of
https://github.com/YGGverse/agate.git
synced 2026-04-09 04:55:27 +00:00
More error handling
This commit is contained in:
parent
edec8f08bc
commit
8d09b268f9
1 changed files with 19 additions and 11 deletions
30
src/main.rs
30
src/main.rs
|
|
@ -4,7 +4,7 @@ use {
|
||||||
prelude::*,
|
prelude::*,
|
||||||
task,
|
task,
|
||||||
},
|
},
|
||||||
async_tls::TlsAcceptor,
|
async_tls::{TlsAcceptor, server::TlsStream},
|
||||||
rustls::internal::pemfile::{certs, pkcs8_private_keys},
|
rustls::internal::pemfile::{certs, pkcs8_private_keys},
|
||||||
std::{
|
std::{
|
||||||
error::Error,
|
error::Error,
|
||||||
|
|
@ -49,27 +49,35 @@ fn main() -> Result {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn connection(acceptor: TlsAcceptor, stream: TcpStream) -> Result {
|
async fn connection(acceptor: TlsAcceptor, stream: TcpStream) -> Result {
|
||||||
let stream = acceptor.accept(stream).await?;
|
let mut stream = acceptor.accept(stream).await?;
|
||||||
|
let url = match parse_request(&mut stream).await {
|
||||||
let mut stream = async_std::io::BufReader::new(stream);
|
Ok(url) => url,
|
||||||
let mut request = String::new();
|
Err(e) => {
|
||||||
stream.read_line(&mut request).await?;
|
stream.write_all(b"50 Invalid request.\r\n").await?;
|
||||||
let url = Url::parse(request.trim())?;
|
return Err(e)
|
||||||
eprintln!("Got request: {:?}", url);
|
}
|
||||||
|
};
|
||||||
let mut stream = stream.into_inner();
|
|
||||||
match get(&url) {
|
match get(&url) {
|
||||||
Ok(response) => {
|
Ok(response) => {
|
||||||
stream.write_all(b"20 text/gemini\r\n").await?;
|
stream.write_all(b"20 text/gemini\r\n").await?;
|
||||||
stream.write_all(&response).await?;
|
stream.write_all(&response).await?;
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(e) => {
|
||||||
stream.write_all(b"40 Not found, sorry.\r\n").await?;
|
stream.write_all(b"40 Not found, sorry.\r\n").await?;
|
||||||
|
return Err(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn parse_request(stream: &mut TlsStream<TcpStream>) -> Result<Url> {
|
||||||
|
let mut stream = async_std::io::BufReader::new(stream);
|
||||||
|
let mut request = String::new();
|
||||||
|
stream.read_line(&mut request).await?;
|
||||||
|
let url = Url::parse(request.trim())?;
|
||||||
|
Ok(url)
|
||||||
|
}
|
||||||
|
|
||||||
fn get(url: &Url) -> Result<Vec<u8>> {
|
fn get(url: &Url) -> Result<Vec<u8>> {
|
||||||
let path: PathBuf = url.path_segments().unwrap().collect();
|
let path: PathBuf = url.path_segments().unwrap().collect();
|
||||||
let path = Path::new(".").join(path).canonicalize()?;
|
let path = Path::new(".").join(path).canonicalize()?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue