X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuhttpd.git;a=blobdiff_plain;f=utils.c;h=1c21fc56eaddc555aac290000042ed2731411c4a;hp=3b868e3576805126a05283c9ce38ee60c407988c;hb=b965b8cc10f094ec0408d57b1bc9aeee0bca501c;hpb=1f4c517bb889413e55ccee466d9dfe79156092e8 diff --git a/utils.c b/utils.c index 3b868e3..1c21fc5 100644 --- a/utils.c +++ b/utils.c @@ -25,7 +25,7 @@ bool uh_use_chunked(struct client *cl) if (cl->request.version != UH_HTTP_VER_1_1) return false; - if (cl->request.method == UH_HTTP_MSG_HEAD) + if (cl->request.method == UH_HTTP_MSG_HEAD || cl->request.method == UH_HTTP_MSG_OPTIONS) return false; return true; @@ -35,6 +35,9 @@ void uh_chunk_write(struct client *cl, const void *data, int len) { bool chunked = uh_use_chunked(cl); + if (cl->state == CLIENT_STATE_CLEANUP) + return; + uloop_timeout_set(&cl->timeout, conf.network_timeout * 1000); if (chunked) ustream_printf(cl->us, "%X\r\n", len); @@ -49,6 +52,9 @@ void uh_chunk_vprintf(struct client *cl, const char *format, va_list arg) va_list arg2; int len; + if (cl->state == CLIENT_STATE_CLEANUP) + return; + uloop_timeout_set(&cl->timeout, conf.network_timeout * 1000); if (!uh_use_chunked(cl)) { ustream_vprintf(cl->us, format, arg); @@ -81,6 +87,9 @@ void uh_chunk_eof(struct client *cl) if (!uh_use_chunked(cl)) return; + if (cl->state == CLIENT_STATE_CLEANUP) + return; + ustream_printf(cl->us, "0\r\n\r\n"); }