libmicrohttpd

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

commit 9e9af3728c9cc78c935633daa877a21010841fae
parent 84f0be5c249010235f4e2267cb8f77f6fc07d45a
Author: Christian Grothoff <christian@grothoff.org>
Date:   Fri, 10 Apr 2015 20:05:40 +0000

The issue reported below is correct, the fix is not.  The "!=" comparing the RF flag should simply have been "==".

Louis wrote:

There is a change of behavior between 0.9.37 and 0.9.38.
When a client adds a "Connection: close" header in 0.9.37, MHD adds a "Connection: close" header to its response and then 
close the connection (as suggested in rfc2616, section 8.1.2.1).
The "Connection: close" header is not added in 0.9.38.
I looked into the 0.9.38 code and the code that prevents the inclusion of the "Connection: close" header is at line 773 of connection.c.
 if ( ( (NULL != client_requested_close) ||
 (MHD_YES == connection->read_closed) ) &&
 (NULL == response_has_close) &&
 (0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY) ) )
 must_add_close = MHD_YES;

Shouldn't it read
 if ( ( (NULL != client_requested_close) ||
 (MHD_YES == connection->read_closed) ||
 (0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY) ) ) &&
 (NULL == response_has_close) )
 must_add_close = MHD_YES;

Thanks,

Louis Benoit






Diffstat:
MChangeLog | 4++++
Msrc/include/microhttpd.h | 2+-
Msrc/microhttpd/connection.c | 2+-
3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,7 @@ +Fri Apr 10 22:02:27 CEST 2015 + Fix logic to add "Connection: Close" that was broken in 0.9.38 + when adding MHD_RF_HTTP_VERSION_1_0_ONLY. -CG + Fri Apr 10 00:38:40 CEST 2015 Ensure fast termination in MHD_USE_THREAD_PER_CONNECTION mode on W32 by using signal pipe. -CG diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h @@ -130,7 +130,7 @@ typedef intptr_t ssize_t; * Current version of the library. * 0x01093001 = 1.9.30-1. */ -#define MHD_VERSION 0x00094002 +#define MHD_VERSION 0x00094003 /** * MHD-internal return code for "YES". diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c @@ -775,7 +775,7 @@ build_header_response (struct MHD_Connection *connection) if ( ( (NULL != client_requested_close) || (MHD_YES == connection->read_closed) ) && (NULL == response_has_close) && - (0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY) ) ) + (0 == (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY) ) ) must_add_close = MHD_YES; /* check if we should add a 'content length' header */