summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYves Fischer <yvesf-git@xapek.org>2018-11-26 18:41:48 +0100
committerYves Fischer <yvesf-git@xapek.org>2018-11-26 18:41:48 +0100
commit53df864f6d645dc34d4e0d2d16832b53af5789ea (patch)
tree5960f244ef3d782d880efaa53aa8c4de222fe927
parent63636d00ca56ee37f9cb9db3fece81d615e21a1a (diff)
downloadnginx-auth-totp-53df864f6d645dc34d4e0d2d16832b53af5789ea.tar.gz
nginx-auth-totp-53df864f6d645dc34d4e0d2d16832b53af5789ea.zip
tokio http-server changes
- close connection after first request - reserve bytes when writing response
-rw-r--r--src/http_server.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/http_server.rs b/src/http_server.rs
index 0e60e72..d4214a3 100644
--- a/src/http_server.rs
+++ b/src/http_server.rs
@@ -47,23 +47,25 @@ pub fn serve<
let state = state.clone();
let rx_task = rx.and_then(move |req| {
- let state = state.clone();
let state = tl_state.get_or(|| {
- debug!("Clone state");
Box::new(state.clone())
});
let handler = tl_handler.get_or(|| {
- debug!("Clone handler");
Box::new(handler.clone())
});
info!("{:?} {} {} {:?}", peer_addr, req.method(), req.uri(), req.version());
let response = handler.respond(&state, req);
- Box::new(future::ok(response))
- });
+ future::ok(response)
+ })
+ // We limit to one http-frame (request-response cycle)
+ // and do not heandle Connection: keep-alive.
+ // Nginx anyway does Connection: close for auth_request.
+ .take(1);
+
let tx_task = tx.send_all(rx_task)
.then(|res| {
- if let Err(e) = res {
- error!("failed to process connection; error = {:?}", e);
+ if let Err(r) = res {
+ error!("ERROR: {:?}", r)
}
Ok(())
});
@@ -89,6 +91,9 @@ impl Encoder for HttpFrame {
fn encode(&mut self, item: Response<String>, dst: &mut BytesMut) -> io::Result<()> {
use std::fmt::Write;
+ let estimated_size = item.headers().len() * 28 + 110 + item.body().len();
+ dst.reserve(estimated_size);
+
write!(BytesWrite(dst), "\
HTTP/1.1 {}\r\n\
Server: nginx-auth-totp\r\n\