client: Allow sending content in DONE state
authorHauke Mehrtens <[email protected]>
Sun, 6 Jul 2025 18:52:17 +0000 (20:52 +0200)
committerHauke Mehrtens <[email protected]>
Sun, 6 Jul 2025 22:58:07 +0000 (00:58 +0200)
Allow sending content even when the connection is in done state. When we
run into an error we will be in CLIENT_STATE_DONE state and have to
write some content to the client. Allow writing in normal DATA and in
DONE state.

This fixes http error 403 in LuCI.

Fixes: b3e3c05d6781 ("client: don't send stray EOF chunk on connection timeout")
Signed-off-by: Hauke Mehrtens <[email protected]>
utils.c

diff --git a/utils.c b/utils.c
index 5304c2acd3ae5579ffaca4b2a0147ed73f186487..e10d1dc3e7a4a7da5fdc725e199def1ee467209a 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -56,7 +56,8 @@ void uh_chunk_vprintf(struct client *cl, const char *format, va_list arg)
        va_list arg2;
        int len;
 
-       if (cl->state != CLIENT_STATE_DATA)
+       if (cl->state != CLIENT_STATE_DATA &&
+           cl->state != CLIENT_STATE_DONE)
                return;
 
        uloop_timeout_set(&cl->timeout, conf.network_timeout * 1000);
@@ -91,7 +92,8 @@ void uh_chunk_eof(struct client *cl)
        if (!uh_use_chunked(cl))
                return;
 
-       if (cl->state != CLIENT_STATE_DATA)
+       if (cl->state != CLIENT_STATE_DATA &&
+           cl->state != CLIENT_STATE_DONE)
                return;
 
        ustream_printf(cl->us, "0\r\n\r\n");