mirror of
https://github.com/YGGverse/agate.git
synced 2026-04-09 04:55:27 +00:00
add log_line to RequestHandle
There are still some problems with this, the error handling in handle_request will have to be changed to accomodated the new log_line.
This commit is contained in:
parent
aa17b5bc17
commit
3353989e7e
1 changed files with 30 additions and 21 deletions
51
src/main.rs
51
src/main.rs
|
|
@ -9,6 +9,7 @@ use {
|
||||||
borrow::Cow,
|
borrow::Cow,
|
||||||
error::Error,
|
error::Error,
|
||||||
ffi::OsStr,
|
ffi::OsStr,
|
||||||
|
fmt::Write,
|
||||||
fs::File,
|
fs::File,
|
||||||
io::BufReader,
|
io::BufReader,
|
||||||
net::SocketAddr,
|
net::SocketAddr,
|
||||||
|
|
@ -119,19 +120,37 @@ fn check_path(s: String) -> Result<String, String> {
|
||||||
|
|
||||||
struct RequestHandle {
|
struct RequestHandle {
|
||||||
pub stream: TlsStream<TcpStream>,
|
pub stream: TlsStream<TcpStream>,
|
||||||
|
pub log_line: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Handle a single client session (request + response).
|
/// Handle a single client session (request + response).
|
||||||
async fn handle_request(stream: TcpStream) -> Result {
|
async fn handle_request(stream: TcpStream) -> Result {
|
||||||
|
let log_line = format!(
|
||||||
|
"{} {}",
|
||||||
|
stream.local_addr().unwrap(),
|
||||||
|
if ARGS.log_ips {
|
||||||
|
stream
|
||||||
|
.peer_addr()
|
||||||
|
.expect("could not get peer address")
|
||||||
|
.to_string()
|
||||||
|
} else {
|
||||||
|
// Do not log IP address, but something else so columns still line up.
|
||||||
|
"-".into()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
let stream = TLS.accept(stream).await?;
|
let stream = TLS.accept(stream).await?;
|
||||||
|
|
||||||
let mut handle = RequestHandle { stream };
|
let mut handle = RequestHandle { stream, log_line };
|
||||||
|
|
||||||
match parse_request(&mut handle).await {
|
match parse_request(&mut handle).await {
|
||||||
Ok(url) => send_response(url, &mut handle).await?,
|
Ok(url) => send_response(url, &mut handle).await?,
|
||||||
Err((status, msg)) => send_header(&mut handle, status, msg).await?,
|
Err((status, msg)) => send_header(&mut handle, status, msg).await?,
|
||||||
}
|
}
|
||||||
handle.stream.shutdown().await?;
|
handle.stream.shutdown().await?;
|
||||||
|
|
||||||
|
log::info!("{}", handle.log_line);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -171,20 +190,9 @@ async fn parse_request(handle: &mut RequestHandle) -> std::result::Result<Url, (
|
||||||
buf = &mut request[len..];
|
buf = &mut request[len..];
|
||||||
}
|
}
|
||||||
let request = std::str::from_utf8(&request[..len - 2]).or(Err((59, "Non-UTF-8 request")))?;
|
let request = std::str::from_utf8(&request[..len - 2]).or(Err((59, "Non-UTF-8 request")))?;
|
||||||
if ARGS.log_ips {
|
|
||||||
log::info!(
|
// log literal request (might be different from or not an actual URL)
|
||||||
"Got request for {:?} from {}",
|
write!(handle.log_line, " \"{}\"", request).unwrap();
|
||||||
request,
|
|
||||||
handle
|
|
||||||
.stream
|
|
||||||
.get_ref()
|
|
||||||
.0
|
|
||||||
.peer_addr()
|
|
||||||
.expect("could not get peer address")
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
log::info!("Got request for {:?}", request);
|
|
||||||
}
|
|
||||||
|
|
||||||
let url = Url::parse(request).or(Err((59, "Invalid URL")))?;
|
let url = Url::parse(request).or(Err((59, "Invalid URL")))?;
|
||||||
|
|
||||||
|
|
@ -293,12 +301,13 @@ async fn list_directory(handle: &mut RequestHandle, path: &Path) -> Result {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn send_header(handle: &mut RequestHandle, status: u8, meta: &str) -> Result {
|
async fn send_header(handle: &mut RequestHandle, status: u8, meta: &str) -> Result {
|
||||||
use std::fmt::Write;
|
// add response status and response meta
|
||||||
let mut response = String::with_capacity(64);
|
write!(handle.log_line, " {} \"{}\"", status, meta)?;
|
||||||
write!(response, "{} {}", status, meta)?;
|
|
||||||
log::info!("Responding with status {:?}", response);
|
handle
|
||||||
response.push_str("\r\n");
|
.stream
|
||||||
handle.stream.write_all(response.as_bytes()).await?;
|
.write_all(format!("{} {}\r\n", status, meta).as_bytes())
|
||||||
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue