libmicrohttpd2

HTTP server C library (MHD 2.x, alpha)
Log | Files | Refs | README | LICENSE

commit bc9a93d25688ab357df77e6c2bb7cf18129b38eb
parent 4ce4f3a5c9d1258666ec1e2780200c44671c14b9
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
Date:   Mon,  8 Dec 2025 21:39:53 +0100

HTTP/1.x connection processing: sorted suspend/resume and data processing

Diffstat:
Msrc/mhd2/stream_process_states.c | 19+++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/mhd2/stream_process_states.c b/src/mhd2/stream_process_states.c @@ -331,11 +331,18 @@ mhd_conn_process_data (struct MHD_Connection *restrict c) struct MHD_Daemon *const d = c->daemon; bool daemon_closing; + if (c->suspended) + { + mhd_assert (! mhd_C_IS_HTTP2 (c)); + return true; + } + switch (process_http_comm_layer (c)) { case mhd_COMM_LAYER_OK: break; /* Process HTTP data */ case mhd_COMM_LAYER_PROCESSING: + mhd_assert (! c->resuming); return true; /* Too early for HTTP */ case mhd_COMM_LAYER_BROKEN: mhd_assert (c->dbg.closing_started); @@ -345,6 +352,12 @@ mhd_conn_process_data (struct MHD_Connection *restrict c) return false; } + if (c->resuming) + { + mhd_assert (! mhd_C_IS_HTTP2 (c)); + finish_resume (c); + } + #ifdef MHD_SUPPORT_HTTP2 if (mhd_C_IS_HTTP2 (c)) { @@ -358,9 +371,6 @@ mhd_conn_process_data (struct MHD_Connection *restrict c) mhd_assert (mhd_D_IS_HTTP1_ENABLED (d) || (! mhd_C_IS_HTTP2 (c)) || \ c->stop_with_error); - if (c->suspended) - return true; - if ((c->sk.state.rmt_shut_wr) && (mhd_HTTP_STAGE_START_REPLY > c->stage)) { if (0 == c->read_buffer_offset) @@ -374,9 +384,6 @@ mhd_conn_process_data (struct MHD_Connection *restrict c) } } - if (c->resuming) - finish_resume (c); - mhd_assert ((! mhd_SCKT_NET_ST_HAS_FLAG (c->sk.ready, mhd_SOCKET_NET_STATE_ERROR_READY)) || (mhd_SOCKET_ERR_NO_ERROR == c->sk.state.discnt_err));