commit d4324233c774c258b6dde72488032f6ea0050a6e
parent c6b34055e9206148ccc4e9c0ce823a3dcc33fb80
Author: Johann150 <johann.galle@protonmail.com>
Date: Sat, 6 Mar 2021 23:25:21 +0100
make log lines more uniform
Ensure there is something logged for the request if reading it actually failed.
Instead just write an empty quoted string.
Diffstat:
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/src/main.rs b/src/main.rs
@@ -288,22 +288,31 @@ impl RequestHandle {
let mut len = 0;
// Read until CRLF, end-of-stream, or there's no buffer space left.
- loop {
- let bytes_read = self
- .stream
- .read(buf)
- .await
- .or(Err((59, "Request ended unexpectedly")))?;
+ //
+ // Since neither CR nor LF can be part of a URI according to
+ // ISOC-RFC 3986, we could use BufRead::read_line here, but that does
+ // not allow us to cap the number of read bytes at 1024+2.
+ let result = loop {
+ let bytes_read = if let Ok(read) = self.stream.read(buf).await {
+ read
+ } else {
+ break Err((59, "Request ended unexpectedly"));
+ };
len += bytes_read;
if request[..len].ends_with(b"\r\n") {
- break;
+ break Ok(());
} else if bytes_read == 0 {
- return Err((59, "Request ended unexpectedly"));
+ break Err((59, "Request ended unexpectedly"));
}
buf = &mut request[len..];
}
- let request =
- std::str::from_utf8(&request[..len - 2]).or(Err((59, "Non-UTF-8 request")))?;
+ .and_then(|()| std::str::from_utf8(&request[..len - 2]).or(Err((59, "Non-UTF-8 request"))));
+
+ let request = result.map_err(|e| {
+ // write empty request to log line for uniformity
+ write!(self.log_line, " \"\"").unwrap();
+ e
+ })?;
// log literal request (might be different from or not an actual URL)
write!(self.log_line, " \"{}\"", request).unwrap();