From 5162e3b0ee7bd1d0fd6e75e1ca7993a1834b5291 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Sat, 30 May 2015 15:48:42 +0200 Subject: allow request handlers to disable chunked reponses Signed-off-by: Jo-Philipp Wich --- client.c | 4 +++- uhttpd.h | 1 + utils.c | 6 +++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/client.c b/client.c index 0d7029b..85d4625 100644 --- a/client.c +++ b/client.c @@ -50,7 +50,7 @@ void uh_http_header(struct client *cl, int code, const char *summary) cl->http_code = code; - if (!uh_use_chunked(cl)) + if (!cl->request.respond_chunked) enc = ""; if (r->connection_close) @@ -188,6 +188,8 @@ static int client_parse_request(struct client *cl, char *data) !conf.http_keepalive) req->connection_close = true; + req->respond_chunked = uh_use_chunked(cl); + return CLIENT_STATE_HEADER; } diff --git a/uhttpd.h b/uhttpd.h index 1c82d76..42385a6 100644 --- a/uhttpd.h +++ b/uhttpd.h @@ -111,6 +111,7 @@ struct http_request { int content_length; bool expect_cont; bool connection_close; + bool respond_chunked; uint8_t transfer_chunked; const struct auth_realm *realm; }; diff --git a/utils.c b/utils.c index 1092a7d..857e326 100644 --- a/utils.c +++ b/utils.c @@ -37,7 +37,7 @@ bool uh_use_chunked(struct client *cl) void uh_chunk_write(struct client *cl, const void *data, int len) { - bool chunked = uh_use_chunked(cl); + bool chunked = cl->request.respond_chunked; if (cl->state == CLIENT_STATE_CLEANUP) return; @@ -60,7 +60,7 @@ void uh_chunk_vprintf(struct client *cl, const char *format, va_list arg) return; uloop_timeout_set(&cl->timeout, conf.network_timeout * 1000); - if (!uh_use_chunked(cl)) { + if (!cl->request.respond_chunked) { ustream_vprintf(cl->us, format, arg); return; } @@ -88,7 +88,7 @@ void uh_chunk_printf(struct client *cl, const char *format, ...) void uh_chunk_eof(struct client *cl) { - if (!uh_use_chunked(cl)) + if (!cl->request.respond_chunked) return; if (cl->state == CLIENT_STATE_CLEANUP) -- cgit v1.2.3