libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 6f48db46b16579198fd48862fb8ec4829216ba2d
parent dab2db20fdee8f0604ba23fe7a28c047bf36c2c1
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date:   Thu, 19 Aug 2021 20:11:13 +0300

Added response flag to always send "Connection:" header

Diffstat:
Msrc/include/microhttpd.h | 20++++++++++++++------
Msrc/microhttpd/connection.c | 6++++--
2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h @@ -96,7 +96,7 @@ extern "C" * they are parsed as decimal numbers. * Example: 0x01093001 = 1.9.30-1. */ -#define MHD_VERSION 0x00097309 +#define MHD_VERSION 0x00097310 /* If generic headers don't work on your platform, include headers which define 'va_list', 'size_t', 'ssize_t', 'intptr_t', @@ -3126,12 +3126,12 @@ enum MHD_ResponseFlags * does not implement HTTP/1.1 features, but advertises HTTP/1.1 support. * @note Available since #MHD_VERSION 0x00097308 */ - MHD_RF_HTTP_1_0_COMPATIBLE_STRICT = 1, + MHD_RF_HTTP_1_0_COMPATIBLE_STRICT = 1 << 0, /** * The same as #MHD_RF_HTTP_1_0_COMPATIBLE_STRICT * @note Available since #MHD_VERSION 0x00093701 */ - MHD_RF_HTTP_VERSION_1_0_ONLY = 1, + MHD_RF_HTTP_VERSION_1_0_ONLY = 1 << 0, /** * Only respond in HTTP 1.0-mode. @@ -3145,19 +3145,27 @@ enum MHD_ResponseFlags * as chunked encoding in requests will be supported still). * @note Available since #MHD_VERSION 0x00097308 */ - MHD_RF_HTTP_1_0_SERVER = 2, + MHD_RF_HTTP_1_0_SERVER = 1 << 1, /** * The same as #MHD_RF_HTTP_1_0_SERVER * @note Available since #MHD_VERSION 0x00096000 */ - MHD_RF_HTTP_VERSION_1_0_RESPONSE = 2, + MHD_RF_HTTP_VERSION_1_0_RESPONSE = 1 << 1, /** * Disable sanity check preventing clients from manually * setting the HTTP content length option. * @note Available since #MHD_VERSION 0x00096702 */ - MHD_RF_INSANITY_HEADER_CONTENT_LENGTH = 4 + MHD_RF_INSANITY_HEADER_CONTENT_LENGTH = 1 << 2, + + /** + * Enable sending of "Connection: keep-alive" header even for + * HTTP/1.1 clients when "Keep-Alive" connection is used. + * Disabled by default for HTTP/1.1 clients as per RFC. + * @note Available since #MHD_VERSION 0x00097310 + */ + MHD_RF_SEND_KEEP_ALIVE_HEADER = 1 << 3 } _MHD_FIXED_FLAGS_ENUM; diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -1940,7 +1940,8 @@ build_header_response (struct MHD_Connection *connection) } else if (MHD_CONN_USE_KEEPALIVE == c->keepalive) { - if (MHD_HTTP_VER_1_0 == c->http_ver) + if ((MHD_HTTP_VER_1_0 == c->http_ver) || + (0 != (r->flags | MHD_RF_SEND_KEEP_ALIVE_HEADER))) { if (! buffer_append_s (buf, &pos, buf_size, MHD_HTTP_HEADER_CONNECTION ": Keep-Alive\r\n")) @@ -1954,7 +1955,8 @@ build_header_response (struct MHD_Connection *connection) if (! add_user_headers (buf, &pos, buf_size, r, MHD_HEADER_KIND, ! c->rp_props.chunked, (MHD_CONN_MUST_CLOSE == c->keepalive), - (MHD_HTTP_VER_1_0 == c->http_ver) && + ((MHD_HTTP_VER_1_0 == c->http_ver) || + (0 != (r->flags | MHD_RF_SEND_KEEP_ALIVE_HEADER))) && (MHD_CONN_USE_KEEPALIVE == c->keepalive))) return MHD_NO;