From 4010694d044da614159e02369ac8f59e9e9ed133 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Mon, 9 May 2016 09:37:44 +0800 Subject: [PATCH] POST handling dont autocomplete transaction Until now lws has finished the HTTP transaction when the POST body was completely received. However that needlessly makes it impossible to send a HTTP 200 and a response without a redirect. This changes lws behaviour after sending the LWS_CALLBACK_HTTP_BODY_COMPLETION callback to no longer terminate the HTTP transaction. If you want the old behaviour, you can terminate the transaction with lws_http_transaction_completed() in the LWS_CALLBACK_HTTP_BODY_COMPLETION callback. Otherwise it's now possible to call lws_callback_on_writable() from LWS_CALLBACK_HTTP_BODY_COMPLETION. Signed-off-by: Andy Green --- lib/handshake.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/lib/handshake.c b/lib/handshake.c index 1d362109..2bda5174 100644 --- a/lib/handshake.c +++ b/lib/handshake.c @@ -211,7 +211,7 @@ postbody_completion: goto bail; } - goto http_complete; + break; } break; @@ -241,20 +241,6 @@ read_ok: return buf - oldbuf; -http_complete: - lwsl_debug("%s: http_complete\n", __func__); - -#ifndef LWS_NO_SERVER - /* Did the client want to keep the HTTP connection going? */ - if (lws_http_transaction_completed(wsi)) - goto bail; -#endif - /* we may have next header set already, but return to event loop first - * so a heaily-pipelined http/1.1 connection cannot monopolize the - * service thread with GET hugefile.bin GET hugefile.bin etc - */ - goto read_ok; - bail: lwsl_debug("closing connection at lws_read bail:\n"); lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS);