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:
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;