summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client.c4
-rw-r--r--uhttpd.h1
-rw-r--r--utils.c6
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)