mimetypes: add json and jsonp (distinct from js)
[project/uhttpd.git] / utils.c
diff --git a/utils.c b/utils.c
index 3b868e3..1092a7d 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -25,7 +25,11 @@ 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;
+
+       /* RFC2616 10.2.5, 10.3.5 */
+       if (cl->http_code == 204 || cl->http_code == 304)
                return false;
 
        return true;
@@ -35,6 +39,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 +56,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 +91,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");
 }