agate

Simple gemini server for static files
git clone https://github.com/mbrubeck/agate.git
Log | Files | Refs | README

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:
Msrc/main.rs | 29+++++++++++++++++++----------
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();