Web 29 Mar 2023 20:56:00 CEST
    Bumped version as the hotfix was released based on the separate branch. -EG

Sun Feb 26 05:49:30 PM CET 2023
    Fix potential DoS vector in MHD_PostProcessor discovered
    by Gynvael Coldwind and Dejan Alvadzijevic (CVE-2023-27371). -CG

Sun 26 Dec 2021 20:30:00 MSK
    Releasing GNU libmicrohttpd 0.9.75 -EG

December 2021
    Fixed Makefile warning on MinGW.
    Fixed compiler warning on MinGW.
    Fixed "configure" portability (for NetBSD).
    MSVC project cosmetics.
    MSVC fixed project to fix linker warning.
    Fixed compiler warning on some platforms.
    Further improved test_client_put_stop to get stable results on all
    platforms.
    Added workaround for platforms (like OpenBSD) where system monotonic clocks
    may jump forward and back.
    Added more checks in test_large_put, increased timeout (was too small for
    this test). -EG

Sun 19 Dec 2021 18:30:00 MSK
    Releasing GNU libmicrohttpd 0.9.74 -EG

December 2021
    Fixed doxy for MHD_suspend_connection().
    Some code improvements for new test test_client_put_stop.
    Added special log message if thread creation failed due to system limits.
    Fully restructured new_connection_process_() to correctly handle errors,
    fixed missing decrement of number of daemon connections if any error
    encountered, fixed app notification of connection termination when app has
    not been notified about connection start, fixed (highly unlikely) reset of
    the list of connections if reached daemon's connections limit.
    configure: fixed some compiler warnings reported in config.log.
    Fixed tests on FreeBSD to support system-limited rate of RST packets and
    'blackhole' system setting. -EG
    Fixed tests for libmagic to really use libmagic in examples. -CG
    Used tricks in code formatting to workaround uncrustify bugs.
    configure: improved compatibility with various shells.
    configure: added selective enable of sanitizers.
    Fixed compatibility with old GnuTLS versions.
    Fixed tests compatibility with old libcurl versions.
    Fixed busy-waiting in test_timeout (fixed CPU load spikes in the test).
    test_https_time_out: check rewritten, previously it is was no-op.
    test_upgrade{,_large}: fixed passing of socket value to GnuTLS on W32.
    Simplified Makefile for HTTPS tests.
    Added detection of old broken GnuTLS builds (on RHEL6 and clones) and
    disabled some tests broken with these builds.
    Muted compiler warnings with old libcurl versions.
    Reworked dlltool support: added support for weakened oversimplified
    half-broken llvm-dlltool
    Silenced MS lib tool warning and MS lib tool invocation.
    Added Makefiles rules for automatic regeneration of all required files if
    anything is missing.
    Added Makefile silent rules support for W32 RC and W32 static libs.
    Added local patches for autotools (mainly for libtool) to build MHD
    correctly on modern MinGW64/Clang.
    Updated HTTP headers macros from registry. -EG

November 2021
    Clarified comments and doxy for MHD_str* and related tests.
    MHD_uint32_to_strx(): rewritten for readability and minor optimization,
    used indexes instead of pointers.
    Documented in doxy how to use MHD_AccessHandlerCallback.
    mhd_sockets: added more network error codes.
    W32 socket pair: set TCP_NODELAY to avoid unwanted buffering and delays.
    Additional doxy fixes in microhttpd.h.
    Fixed blocking sockets setting in tests and examples for W32.
    Added checks for fcntl() results in tests and examples.
    Added series of tests based on simple HTTP client implementation developed
    for testing of MHD.
    Renamed 'early_response' connection flag to 'discard_request' and reworked
    handling of connection's flags.
    Clarified request termination reasons doxy, fixed reporting of
    MHD_REQUEST_TERMINATED_READ_ERROR (previously this code was not really used
    in reporting).
    Enforce all libcurl tests exit code to be zero or one.
    Rewritten client upload processing: removed redundant checks, fixed
    skipping of chunk closure when not data is not received yet, fixed skipping
    of the last LF in termination chunk, handle correctly chunk sizes with more
    than 16 digits (leading zeros are valid according to HTTP RFC), fixed
    handling of CRCR, LFCR, LFLF, and bare CR as single line delimiters, report
    error when invalid chunk format is received without waiting to receive
    (possibly missing) end of the line, reply to the client with special error
    if chunk size is too large to be handled by MHD (>16 EiB).
    Added error reply if client used too large request payload (>16 EiB).
    Fixed return value for MHD_FEATURE_AUTOSUPPRESS_SIGPIPE on W32, now it
    returns MHD_YES as W32 does not need sigpipe suppression.
    configure: reordered and improved headers detection. Some headers require
    other headers to be included before, now configure supports it.
    Added missing ifdef guard for <stdbool.h>.
    mhd_sockets: reordered includes for better compatibility.
    Some code readability and formatting improvements. -EG

October 2021
    Added test family test_toolarge to check correct handling of the buffers
    when the size of data is larger than free space.
    Fixed missing updated of read and write buffers sizes.
    Added detection and use of supported "noreturn" keyword for function
    declaration. It should help compiler and static analyser.
    Added support for leak sanitizer.
    Fixed analyser errors on W32.
    Partially reworked memory allocation from the pool, more robust
    implementation, always track read and write buffers.
    Added custom memory poisoning in memory pool with address sanitizer.
    Added missing update of the read buffer size.
    Addition for doxy for new behaviour of MHD_del_response_header().
    Added two tests with non-standard symbols in requests.
    Removed double close of connection with error in headers processing.
    Respond to the client with error if chunked request has broken chunked
    encoding as required by HTTP RFC instead of just closing the connection.
    Fixed request headers processing. Do not recognize bare CR as end of line.
    Fixed processing of CRCR, bare CR, LFCR, and LFLF as end of the line for
    request chunked encoding. Now only CRLF or bare LF are recognized as end
    of line.
    Added Lawrence Sebald to the AUTHORS file (iovec-based responses).
    Check for PAGESIZE and PAGE_SIZE macros and check whether they can be used
    for static variable initialization.
    Include "MHD_config.h" before all other includes to set macros required to
    be set before standard includes.
    Chunked response: abort with error if application returns more data than
    requested.
    Monotonic clock: use only native clock on W32 as all other clocks are just
    wrappers.
    W32: fixed builds with MSVC, added projects for VS2022, added MSVC
    universal project that use latest available toolset, use C17 if supported.
    Chunked response: fixed calculation of number of bytes left to send.
    microhttpd.h: doxy clarifications for sockets polling.
    Updated HTTP statuses, methods, and headers names from the registries.
    Further improved doxy for MHD_add_response_header().
    A few comments improvements and clarifications.
    Added internal connection's flag indicating discard of the request. -EG
    Websockets update by David Gausmann. -DG
    Fixed reported value for MHD_CONNECTION_INFO_CONNECTION_TIMEOUT.
    Minor code readability improvements in MHD_set_connection_option().
    Improved doxy for MHD_get_timeout().
    Memorypool: minor code improvements. -EG

September 2021
    Improved system includes headers detection and usage. Removed unused
    headers detection.
    Added indirect calculation of maximum values at compile time by
    using types size detection. These values are used only to mute
    compiler warnings.
    Fixed pre-compiler errors if various *_MAX macros defined with
    non-digits symbols not readable for pre-compiler.
    Limit number of used CPU cores in tests to 6, unless heavy tests are
    enabled.
    Disabled parallel tests with libcurl if heavy tests are enabled.
    configure: removed '--enable-sanitizer' and added '--enable-sanitizers'
    parameters. Added testing for supported sanitizers and enabling only
    supported sanitizers.
    Added support for run-time sanitizers settings for tests when
    sanitizers are enabled.
    Added support for undefined behavior sanitizer without run-time library.
    Fixed various undefined behavior sanitizer detected errors, improved
    portability.
    Fixed how bitwise NOT is used with enum, fixed portability.
    microhttpd.h: changed macros MHD_CONTENT_READER_* to use ssize_t.
    test_postprocessor: added more check, improved error reporting, added
    new test data.
    postprocessor: fixed undefined behavior (memcpy(), memmove() with zero
    size and NULL pointer).
    Updated copyright year in W32 DLLs.
    postprocessor: fixed empty key processing.
    test_postprocessor: added tests with hex-encoded values.
    postprocessor: fixed incomplete processing of the last part of hex-encoded
    value if data was broken into certain sized pieces.
    Used type specifiers for printf() from inttypes.h to improved compatibility
    with various run-time libs. Fallback to standard values if type specifiers
    are not defined.
    Added detection of used run-time library (MSVCRT/UCRT) on W32.
    testcurl: fixed incorrect case-insensitive match for method name. Method
    name must be checked by using case-sensitive match.
    microhttpd.h: clarified some doxy descriptions.
    Prevented potential double sending of error responses.
    Fixed application notification with MHD_REQUEST_TERMINATED_COMPLETED_OK
    when error response has been sent (MHD_REQUEST_TERMINATED_WITH_ERROR is
    used).
    Avoid trying to send error response if response is already being sent.
    Improved log error message when error response is processing. -EG

August 2021
    Silently drop "keep-alive" token from response "connection" header,
    "keep-alive" cannot be enforced and always enabled if possible.
    Further improved doxy for MHD_add_response_header().
    Added detection of the "Date:" header in the response headers set by
    app at response forming time.
    Disallow space in response header name, allow tab in response header
    value.
    Added internal MHD_uint8_to_str_pad() function.
    Used internal MHD_uint8_to_str_pad() in datestamp generation function.
    Added detection and reporting of incorrect "Upgrade" responses. -EG
    Fixed short busy waiting (up to one second) when connection is going
    to be closed. -AI
    Minor improvement for test_callback, test_get_chunked
    Fixed chunked responses with known size.
    Added two more tests for chunked response.
    Fixed chunked responses with predefined data (without data callback).
    Fixed calculation of the buffer size for the next response chunk.
    Completely rewritten reply header build function. The old version
    had several levels of hacks, was unmaintainable, did not follow
    HTTP specification in details; fixed used caseless header matching
    where case-sensitive matching must be used; removed two passes of
    header building. New version use clear logic and can be extended
    when needed.
    Changed behaviour: "Connection: keep-alive" is not being sent
    for HTTP/1.1 connection (as per HTTP RFC).
    test_get_chunked: fixed error reporting.
    HTTPS tests: fixed memory leaks if function failed.
    libcurl tests: improved handling of curl multi_*.
    Added two tests for correct choice of "Keep-Alive" or "Close".
    Simplified Makefile for testcurl.
    Fixed select() error handling in tests.
    microhttpd.h: minor macro formatting
    Changed behaviour: if response size is unknown and chunked encoding is
    allowed, chunked encoding is used even for non-keep-alive connection as
    required by HTTP RFC.
    Added two more tests for chunked replies.
    Simplified keepalive_possible(); added new value for MHD_ConnKeepAlive,
    added third state "Upgrade".
    Changed behaviour: used HTTP/1.1 replies for HTTP/1.0 requests as
    required by HTTP RFC. HTTP/1.0 reply still can be enforced by response
    flag.
    Added more doxy for MHD_ResponseFlags, added new names with the same
    values as old names: MHD_RF_HTTP_1_0_COMPATIBLE_STRICT and
    MHD_RF_HTTP_1_0_SERVER.
    Added new value MHD_RF_SEND_KEEP_ALIVE_HEADER to enforce sending of
    "Connection: keep-alive" even for HTTP/1.1 clients when keep-alive is
    used.
    test_get_close_keep_alive: added more combinations of parameters to
    check.
    Added separate flag for chunked response in connection instead of
    reusing the same flag as for chunked request.
    Added new connection's flag "stop_with_error".
    Fixed empty first line processing: the request could be not processed
    unless something else kicks next processing the same connection again.
    Added new connection states: MHD_CONNECTION_REQ_LINE_RECEIVING,
    MHD_CONNECTION_FULL_REQ_RECEIVED, MHD_CONNECTION_START_REPLY to
    simplify states logic.
    Changed write buffer allocation logic: as connection buffer size is
    known and fixed, use initially use full buffer for writing and reduce
    size of part used for writing if another allocation from the same
    buffer needs to be done. Implemented helper function to automatically
    reduce the size of read or write part to allocate buffer for other
    needs.
    Added define of NDEBUG if neither _DEBUG nor NDEBUG are defined.
    As accepted sockets inherit non-blocking flag from listening socket
    on all platform except Linux, track this state to use less number
    of syscalls.
    Fixed compiler and static analyser warnings.
    Moved HTTPS tests helper file to the HTTPS tests directory.
    Minor Makefiles cleanup.
    Added support for new monotonic clock ids.
    Added new internal monotonic clock function with milliseconds accuracy.
    Fixed support of custom connection timeout in thread-per-connection mode.
    Added more error checking to test_timeout.
    microhttpd.h: removed duplicated macro.
    Refined timeouts handling. Switched from seconds resolution to milliseconds
    resolution, added automatic detection and support of low-resolution system
    clock to avoid busy-waiting at connection expiration. Added log message
    for too large timeout period (> 146 million years) with trim to supported
    values. -EG

Wed 04 Aug 2021 06:56:52 PM CEST
    Introduce new MHD_CONNECTION_INFO_HTTP_STATUS. -CG

July 2021
    Added automatic response flags with detection when response
    is being formed.
    Added special processing for response "Connection" headers, combined
    multiple "Connection" headers into single header.
    Restructured MSVC project files.
    Changed MSVC project defaults to Vista+ (WinXP is still supported).
    Fixed copy-paste error in mhd_aligh.h, added support for MSVC.
    Added internal function for printing hex and decimals numbers.
    Reply chunked body handling fixes, used new internal functions
    instead of snprintf().
    Added automatic response flag when app sets chunked encoding header.
    New internal function for chunked reply footer forming. Unification with
    reply header forming function just over-complicated things and made
    function hardly maintainable.
    Added new function MHD_get_reason_phrase_len_for(), related tests and
    updated scripts for response phrases.
    Added more tests for chunked replies.
    Added function to reset connection state after finishing processing of
    request-reply to prepare for the next request.
    Added even more tests for chunked replies.
    Added internal function for printing uint64_t decimal numbers. -EG

June 2021
    Tests: implemented checking of response footer.
    Fixed loss of incoming data if more than half of buffer is
    used for the next request data.
    Fixed completely broken calculation of request header size.
    Chunked response: do not ask app callback for more data then
    it is possible to process (more than 16 MBytes).
    Check and report if app used wrong response code (>999 or <100)
    Refuse to add second "Transfer-Encoding" header.
    HTTPS tests: check whether all libcurl function succeeded.
    HTTPS tests: implemented new detection of TLS backend.
    HTTPS tests: fixed tests with new TLS defaults (SSL forbidden).
    Implemented detection of basic HTTP methods, fixed wrong
    caseless matching for HTTP method names.
    MHD_create_response_*() functions: improved doxy.
    MHD_add_response_header: added detailed comment about automatic
    headers.
    Do not allow responses with 1xx codes for HTTP/1.0 requests.
    Fixed used order of headers: now user response headers are used in
    the same order as was added by application.
    Added new internal function MHD_get_response_element_n_().
    Added detection of more compiler built-ins for bits rotations.
    Minor optimisation of caseless strings matching.
    Added MHD_str_remove_token_caseless_() function and tests.
    Added MHD_str_remove_tokens_caseless_() function and tests. -EG

May 2021
    Doxy description clarifications for MHD_get_timeout() and related
    functions.
    Added MHD_create_response_from_buffer_with_free_callback_cls().
    Added SHA-1 calculation (required for WebSockets).
    Added new internal header mhd_aligh.h for checking alignment of
    variables.
    Fixed SHA-256 and MD5 calculation with unaligned data.
    Added tests for hashes with unaligned data.
    Used compiler built-ins for bits rotations.
    Added detection of HTTP version at early stage.
    Added early response of unsupported HTTP version.
    Fixed wrong caseless matches for HTTP version strings.
    Added calculation of error responses at compile time (avoided
    repeated strlen() for known data). -EG

April 2021
    New test for reply chunked encoding. -EG

Mon 26 Apr 2021 02:09:46 PM CEST
    Importing experimental Websocket support by David Gausmann. -CG

Sun 25 Apr 2021 14:00:00 MSK
    Releasing GNU libmicrohttpd 0.9.73. -EG

Sat 24 Apr 2021 23:00:00 MSK
    Fixed build with Clang and Visual Studio.
    MSVS project files updated.
    Enabled bind port autodetection with MSVS builds. -EG

Fri 23 Apr 2021 14:27:00 MSK
    Fixed build without TLS lib.
    Fixed build without system poll() function.
    Fixed compiler warnings on 32-bit platforms.
    Fixed various compiler warnings. -EG

Thu 22 Apr 2021 12:32:00 MSK
    Fixed some typos.
    Force disable TCP_CORK, TCP_NOPUSH, and TCP_NODELAY before switching
    connection to "upgraded" mode.
    Improved portability of the test-suite for upgraded connections. -EG

Tue 20 Apr 2021 17:11:00 MSK
    Disabled NLS by default in configure. -EG

Mon 19 Apr 2021 18:58:00 MSK
    Fixed testzzuf/test_put_chanked to correctly use MHD.
    Added internal error code for TLS errors.
    Added all missing messages to the .pot file.
    Detect more types of errors for receiving data and report
    error description in the MHD log.
    Added support for ALPN on TLS connections if supported by
    used TLS library. -EG

Sun 18 Apr 2021 20:47:00 MSK
    Removed dead code.
    Limited iov-backed responses size to SSIZE_MAX as limited by
    system calls.
    Report error message in MHD log for send errors. -EG

Sat 17 Apr 2021 18:50:00 MSK
    Unified upgrade test behavior for all platforms.
    Some code simplification and unification.
    Compiler warning (false positive) fixed. -EG

Fri 16 Apr 2021 17:58:00 MSK
    Used run-time value if IOV_MAX if available.
    Fixed portability of error handling for sending functions.
    Detect pipes/unix sockets on fly and do not use TCP/IP specific
    functions with them.
    Fixed support of UNIX sockets on non-Linux kernels. -EG

Fri 16 Apr 2021 10:23:39 AM CEST
    Detect if a socket is a UNIX domain socket and do not try to play
    with TCP corking options in this case (avoids useless failed
    syscalls). -CG

Thu 15 Apr 2021 18:56:00 MSK
    Fixed configure '--enable-sanitizer' parameter.
    Stopped pushing of partial responses when limited by system maximum size
    for sendmsg(). -EG

Web 14 Apr 2021 22:20:00 MSK
    Fixed: use sendmsg() in POSIX-compatible way, do not try to send more
    than IOV_MAX elements per single call. -EG

Sun 11 Apr 2021 15:44:00 MSK
    Updated test TLS certificates to not expired modern versions, restored
    HTTPS examples compatibility with modern browsers.
    TCP_NODELAY is not pre-enabled for HTTPS connection as it actually
    does not speed-up TLS handshakes on moders OSes. -EG

Thu 01 Apr 2021 21:29:46 MSK
    Fixed MD5 digest authorization broken when compiled without variable
    length arrays support (notably with MSVC).
    Fixed and muted compiler warning.
    Deeper test with zzuf if configured with --enable-heavy-tests.
    Removed run-check of assert() in configure to avoid core dumps. -EG

Thu 01 Apr 2021 17:46:00 MSK
    Added new function MHD_run_wait() useful for single-threaded applications
    without other network activity.
    Added tests for the new function. -EG

Wed 17 Mar 2021 20:53:33 MSK
    Re-factored startup log parameters processing. Warn user if wrong logger
    could be used potentially.
    Added headers doxy with information about minimal MHD version when
    particular symbols were introduced.
    Added new daemon option to indicate SIGPIPE handling by application for
    daemons being run in application thread. -EG

Wed 24 Feb 2021 19:23:00 MSK
    SIGPIPE-related macro minor refactoring for readability.
    Added new response iov function (and related framework), based on the patch
    provided by Lawrence Sebald and Damon N. Earp from NASA. -EG

Thu 04 Feb 2021 06:41:34 PM CET
    Fix PostProcessor to always properly stop iteration when application callback
    tells it to do so. -CG

Sun 24 Jan 2021 21:30:00 MSK
    Added '--enable-heavy-tests' configure parameter.
    Minor configure.ac and Makefiles fixes. -EG

Tue 19 Jan 2021 17:59:00 MSK
    Fixed compatibility with autoconf. 2.70
    Updated M4 macros. -EG

Wed 06 Jan 2021 08:39:58 PM CET
    Return timeout of zero also for connections awaiting cleanup. -CG

Tue 29 Dec 2020 15:39:00 MSK
    Improved speed of TLS handshake by pre-enabling TCP_NODELAY. -EG

Mon 28 Dec 2020 21:36:00 MSK
    Releasing libmicrohttpd 0.9.72. -EG

Mon 28 Dec 2020 09:37:00 MSK
    Completely reworked and rewritten TCP_CORK, TCP_NOPUSH, TCP_NODELAY and
    MSG_MORE handling. Reduced number of sys-calls, fixed portability for
    FreeBSD, OpenBSD, NetBSD, Darwin, W32, Solaris.
    Removed usage of gnutls_record_cork() as it fully blocks stream until
    final block is ready.
    Fixed compatibility with C90 compilers.
    Really started using sendmsg() for header + body combined single-call
    response sending.
    Fixed sending of response body by sendmsg() when it shouldn't be sent,
    like responses for HEAD requests.
    Improved error handling for gnutls_record_send().
    Updated W32 resources for .DLLs.
    Fixed building with various disabled features (like messages, HTTPS,
    http-upgrade, authorization etc.)
    Fixed possible SIGPIPE generation when sendfile() is used (it was always
    possible on Linux that sendfile() produce SIGPIPE, now it's fixed).
    Several compiler warnings muted and/or fixed in the lib code and in
    the examples. -EG

Sun 01 Nov 2020 17:17:00 MSK
    Fixed conflict with system CPU_COUNT macro.
    Minor improvements of error reporting in MHD daemon.
    Fixed FTBFS with GnuTLS versions before 3.1.9
    Fixed test_add_conn for multi-CPU machines.
    Fixed analyzer warnings.
    Fixed use-after-free and resources leaks for upgraded connections
    in TLS mode with thread-per-connection. -EG

Sun 25 Oct 2020 19:31:00 MSK
    Fixed epoll mode without listening socket.
    Minor improvements of thread sync.
    Fixed broken sendfile on FreeBSD.
    Fixed broken MHD with thread-pool and without listening socket.
    Added four tests for MHD_add_connection().
    Fixed several resources leaks in error handlers.
    Re-implemented scheme of handling of externally added connections,
    fixed thread-safety. -EG

Wed 21 Oct 2020 10:00:58 AM CEST
    Corking should be OFF when sending the footer (#6610). -AP/CG

Wed 07 Oct 2020 11:07:00 MSK
    W32 default target version changed to Vista, XP is still supported.
    Minor fixes and additional asserts for memorypool.
    IPv6 tests are not used if IPv6 is disabled at run-time. -EG

Sun 27 Sep 2020 10:08:03 PM CEST
    Fixed incorrect triggering of epoll edge polling for
    "upgraded" TLS connections.  Fixed a few cases where
    gnutls_record_uncork() return value was still ignored,
    possibly causing buffer to not be flushed correctly. -CG

Sat 26 Sep 2020 08:18:02 PM CEST
    Make MHD_USE_NO_LISTEN_SOCKET work in conjunction with
    MHD internal threads. -CG/DE

Thu 24 Sep 2020 16:55:00 MSK
    Fixed compiler warnings on W32.
    Minor optimisation of MHD_YES/MHD_NO internal usage.
    Refactor and cleanup of internal debugging macros.
    Updated HTTP status codes, header names and methods from
    the registries.
    Fixed portability of test_upgrade_large.
    Minor testsuite fixes.
    Restored parallel build of libmicrohttpd (except tests). -EG

Fri 11 Sep 2020 10:08:22 PM CEST
    Fix crash problem in PostProcessor reported by MD. -CG
    Fix GnuTLS configure test to check for gnutls_record_uncork. -CG

Wed 19 Aug 2020 09:40:39 AM CEST
    Add logic to check on MHD_pool_reallocate() failure reported on the
    mailinglist (will NOT yet fix the issue). -CG

Sun 26 Jul 2020 01:56:54 PM CEST
    Add MHD_create_response_from_pipe() to allow creating a response based
    on data read from a pipe. -CG

Fri Jul 10 15:04:51 CEST 2020
    Fixed Postprocessor URL-encoded parsing if '%' fell on boundary. -CG/MD

Thu 02 Jul 2020 09:56:23 PM CEST
    Fixed return type of MHD_queue_basic_auth_fail_response. -CA/CG

Sun 28 Jun 2020 09:36:01 PM CEST
    Fix buffer overflow issue in URL parser.
    Releasing libmicrohttpd 0.9.71. -CG

Tue 16 Jun 2020 08:44:22 PM CEST
    Add logic to try again if GNUtls uncork() fails. -CG

Wed 10 Jun 2020 09:44:29 PM CEST
    Fixed PostProcessor bug discovered by MD, which given certain parser
    boundaries caused the returned values to be wrong. -CG/MD

Wed 08 Apr 2020 10:53:01 PM CEST
    Introduce `enum MHD_Result` for #MHD_YES/#MHD_NO to avoid using 'int' so much.
    Note that this change WILL cause compiler warnings until (most) MHD callbacks
    in application code change their return type from 'int' to 'enum MHD_Result'.
    That said, avoiding possible confusions of different enums is going to make
    the code more robust in the future. For conditional compilation, test
    for "MHD_VERSION >= 0x00097002". -CG

Tue 07 Apr 2020 02:58:39 PM BRT
    Fixed #5501 (Added example for how to provide a tiny threaded websocket server). -SC

Tue 31 Mar 2020 02:36:40 PM BRT
    Fixed #6142 (applied several spelling fixes). -DKG/-SC

Sat 07 Mar 2020 05:20:33 PM CET
    Fixed #6090 (misc. severe socket handling bugs on OS X). -CG

Sat 08 Feb 2020 09:12:54 PM CET
    Fixed 100-continue handling for PATCH method (#6068).
    Fixed FTBFS from wrong #endif position for certain builds (#6025).
    Fixed connection overflow issue when combining MHD_USE_NO_LISTEN_SOCKET
    with MHD_USE_THREAD_PER_CONNECTION (#6036).
    Updated m4 script to fix FTBFS when using -Werror=unused-but-set-parameter (#6078).
    Releasing libmicrohttpd 0.9.70. -CG

Thu Dec 26 14:43:27 CET 2019
    Adding fix for urlencoding of keys without values in
    post-processor logic. -CG

Tue 24 Dec 2019 03:32:18 PM CET
    Adding patch from Ethan Tuttle with test case for urlencoding
    in post-processor for keys without values. -CG/ET

Sun 15 Dec 2019 02:12:02 PM CET
    Fix send() call (affects Mac OS X). #5977 -CG/fbrault
    Releasing libmicrohttpd 0.9.69. -CG

Fri 29 Nov 2019 11:22:25 PM CET
    If application suspends a connection before we could send 100 CONTINUE,
    give application another shot at queuing a reply before the upload begins. -CG

Sat 26 Oct 2019 06:53:05 PM CEST
    Fix regression where MHD would fail to return an empty response
    when used with HTTPS.
    Releasing libmicrohttpd 0.9.68. -CG/TR

Fri 25 Oct 2019 02:31:59 PM CEST
    Introduce MHD_RF_INSANITY_HEADER_CONTENT_LENGTH. -CG

Thu 17 Oct 2019 04:50:52 PM CEST
    Integrate 0-byte send() method for uncorking for old FreeBSD/OS X
    systems into new mhd_send.c logic for uncorking.
    Releasing libmicrohttpd 0.9.67. -CG

Fri 18 Aug 2019 00:00:00 PM UTC
    Fixes and optimizations for the setsockopt handling:
    * Added: MHD_UPGRADE_ACTION_CORK_ON and MHD_UPGRADE_ACTION_CORK_OFF
      to enum MHD_UpgradeAction (turn corking on/off on the underlying
      socket).
    * Use calls and flags native to the system for corking and
      other operations, tested with performance improvements on
      FreeBSD, Debian Linux, NetBSD, and cygwin. In particular,
      this adds selective usage of MSG_MORE, NODELAY, TCP_NOPUSH,
      TCP_CORK. -ng0

Fri 09 Aug 2019 10:07:27 AM CEST
    Copy compiler and linker hardening flags from GNUnet (updating
    configure.ac). -CG

Thu 01 Aug 2019 01:23:36 PM CEST
    Releasing libmicrohttpd 0.9.66. -CG

Thu 01 Aug 2019 12:53:49 AM CEST
    Fix issue with discarding unhandled upload data discovered
    by Florian Dold. -CG

Mon 29 Jul 2019 08:01:50 PM CEST
    Fix hanging situation with large transmission over upgraded
    (i.e. Web socket) connection with epoll() and HTTPS enabled
    (as reported by Viet on the mailinglist). -CG

Thu 25 Jul 2019 02:40:12 PM CEST
    Fixing regression introduced in cc5032b85 (bit mask matching
    of the header kinds in MHD_lookup_connection_value()), as
    reported by Jose Bollo on the mailinglist. -CG/JB

Tue Jul 16 19:56:14 CEST 2019
    Add MHD_OPTION_HTTPS_CERT_CALLBACK2 to allow OCSP stapling
    and MHD_FEATURE_HTTPS_CERT_CALLBACK2 to check for. -TR

Fri Jul 05 2019 22:30:40 MSK
	Releasing libmicrohttpd 0.9.65. -EG

Sun Jun 23 2019 21:27:43 MSK
	Many fixes and improvements for connection-specific memory pool:
	* Added asserts;
	* Added testing of reallocation;
	* Reallocation code rewritten to avoid extra allocation, when
	  possible to reuse already allocated memory;
	* Large memory pools aligned to system page size;
	* Large memory pools on W32 are cleared more securely after use,
	  optimised usage of system memory.
	Better handled connection's memory shortage situations:
	* error response could be sent to client even if all buffer space
	  was used;
	* if buffer space become low when receiving, do not allocate last
	  buffer space and use small receive blocks instead.
	Improved sending speed by using all available buffer space for
	sending. -EG

Sun Jun 09 2019 20:27:04 MSK
	Releasing libmicrohttpd 0.9.64. -EG

Sun Jun 09 2019 20:03:16 MSK
	Updated HTTP headers, methods and status codes from registries,
	Added scripts to import new headers, methods and status codes from
	registries,
	Minor doxyget comment fix,
	Added missing MSVS project files to tarball.
	Reodered includes in microhttpd.h -EG

Mon 03 Jun 2019 11:45:52 PM CEST
	Apply MHD_-prefix to hash functions, even if they are not in the
	officially exported API. -CG/DB

Sun Jun 02 01:52:11 MSK 2019
	Support usage of SOCK_NOSIGPIPE on Solaris 11.4 and NetBSD 7+,
	finally avoid SIGPIPE on Solaris. -EG

Sat Jun 01 22:51:50 MSK 2019
	Do not report errors if AF_UNIX socket is used on *BSD. -EG

Thu May 30 23:32:09 MSK 2019
	Improved detection of 'getsockname()' in configure.
	Avoided using 'getsockname()' in code if not detected. -EG

Sun May 26 23:32:49 MSK 2019
	Fixed some tests on W32. -EG

Sun May 26 23:05:42 MSK 2019
	Better detection of sockaddr member in configure, fixed build on *BSD,
	Fixed compiler warnings,
	Updated and fixed libcurl tests. -EG

Tue May 21 22:12:43 MSK 2019
	Fixed doxygen comments,
	Avoid dropping 'const' qualifier in macros,
	Fixed some compiler warnings,
	Properly support automatic port detections on some platforms,
	Added checks for too long TLS parameters strings. -EG

Tue May 21 17:52:48 MSK 2019
	Spelling fixes. -EG

Mon May 20 15:39:35 MSK 2019
	Compiler warning fixes. -EG/CG
	Fixed example for non-64bits platforms. -EG

Wed May 15 23:51:49 MSK 2019
	Optimized and improved processing speed by using precalculated and
	already calculated lengths of strings. -EG

Wed May 15 14:54:00 MSK 2019
	Fixed build from source on GNU Hurd. -EG

Mon May  6 11:58:00 MSK 2019
	Updated README and COPYING files. MHD remains LGPLv2.1-licensed. -EG

Fri May  3 20:08:00 MSK 2019
	Store connection's keys and values with sizes;
	Speedup keys search be comparing key length first;
	Added functions for working with keys and values with binary zeros;
	Fixed test_postprocessor_amp to fail on problems. -EG

Wed May  1 16:40:00 MSK 2019
	Reverted change of MHD_KeyValueIterator, implemented MHD_KeyValueIteratorN
	with sizes for connection's key and value to get keys and values
	with binary zeros. -EG

Mon 29 Apr 2019 01:26:39 AM BRT
	Fixed signed/unsigned comparison in example http_chunked_compression.c. -SC/TR

Sun Apr 21 16:40:00 MSK 2019
	Improved compatibility with MSVC compilers;
	Fixed MHD compilation by Clang/LLVM in VS;
	Used MSVC intrinsics for bit rotations and bytes swap;
	Added project files for VS2019. -EG

Fri Apr 19 23:00:00 MSK 2019
	Rewritten SHA-256 calculations from scratch to avoid changing LGPL version;
	Added usage of GCC/Clang built-ins for bytes swap to significantly improve
	speed of MD5 and SHA-256 calculation on platforms with known endianness.
	Added test for SHA-256 calculations. -EG

Wed Apr 17 20:52:00 MSK 2019
	Refactoring of mhd5.c: optimized, dead code removed;
	Faster MD5 calculation on little endian platforms;
	Bit manipulations moved to separate header file.
	Added tests for MD5 calculations. -EG

Mon 15 Apr 2019 05:33:52 PM CEST
	Add MHD_USE_POST_HANDSHAKE_AUTH_SUPPORT and
	MHD_USE_INSECURE_TLS_EARLY_DATA flags. -CG

Thu Apr 11 11:37:00 MSK 2019
	Fixed MSVC 'Release' builds;
	Fixed usage of MSVC's assert. -EG

Wed Apr 10 14:31:00 MSK 2019
	Improved shell compatibility for 'bootstrap', removed bash-ism.
	Added wrapper script 'autogen.sh'. -EG

Mon 08 Apr 2019 03:06:05 PM CEST
	Fix close() checks as suggested by MK on the mailinglist
        (#3926). -MK/CG

Wed 20 Mar 2019 10:20:24 AM CET
	Adding additional "value_length" argument to MHD_KeyValueIterator
	callback to support binary zeros in values.  This is done in a
	backwards-compatible way, but may require adding a cast to existing
	code to avoid a compiler warning. -CG

Sun Feb 10 21:00:37 BRT 2019
	Added example for how to compress a chunked HTTP response. -SC

Sun 10 Feb 2019 05:03:44 PM CET
	Releasing libmicrohttpd 0.9.63. -CG

Sat 09 Feb 2019 01:51:02 PM CET
	Extended test_get to test URI logging and query string parsing
	to avoid regression fixed in previous patch in the future. -CG

Thu Feb  7 16:16:12 CET 2019
	Preliminary patch for the raw query string issue, to be tested. -CG

Tue Jan  8 02:57:21 BRT 2019
	Added minimal example for how to compress HTTP response. -SC

Wed Dec 19 00:06:03 CET 2018
	Check for GNUTLS_E_AGAIN instead of GNUTLS_E_INTERRUPTED when
	giving up on a TLS connection. -LM/CG

Thu Dec 13 22:48:14 CET 2018
	Fix connection timeout logic if in thread-per-connection mode the
	working thread takes longer than the timeout to queue the response. -CG

Tue Dec 11 09:58:32 CET 2018
	Add logic to avoid VLA arrays with compilers that do not support them. -CG

Sat Dec  8 23:15:53 CET 2018
	Fixed missing WSA_FLAG_OVERLAPPED which can cause W32 to block on
	socket races when using threadpool. (See very detailed description
	of the issue in the libmicrohttpd mailinglist post of today.) -JM

Sat Dec  8 22:53:56 CET 2018
	Added test for RFC 7616 and documented new API.
	Releasing libmicrohttpd 0.9.62. -CG

Sat Dec  8 17:34:58 CET 2018
	Adding support for RFC 7616, experimental, needs
	testing and documentation still! -CG

Fri Dec  7 12:37:17 CET 2018
	Add option to build MHD without any threads
	and MHD_FEATURE_THREADS to test for it.  -CG

Thu Dec  6 13:25:08 BRT 2018
	Renamed all occurrences from _model(s)_ to _mode(s)_. -SC

Thu Dec  6 12:50:11 BRT 2018
	Optimized the function MHD_create_response_from_callback() for
	Windows by increasing its internal buffer size and allowed to customize
	it via macro MHD_FD_BLOCK_SIZE. -SC

Thu Dec  6 02:11:15 BRT 2018
	Referenced the gnutls_load_file() function in the HTTPs examples. -SC

Wed Dec  5 18:08:59 CET 2018
	Fix regression causing URLs to be unescaped twice. -CG

Sun Nov 18 13:08:11 CET 2018
	Parse arguments with (properly) escaped URLs correctly.
	(making things work with recent cURL changes, #5473).
	Replace sprintf with snprintf in testcases.
	Releasing libmicrohttpd 0.9.61. -CG

Wed Nov 14 14:01:21 CET 2018
	Fix build issue with GnuTLS < 3.0. -CG

Mon Nov 12 19:50:43 CET 2018
	Fix #5473 (test case failure due to change in libcurl). -eworm

Thu Nov  8 14:53:27 CET 2018
	Add MHD_create_response_from_buffer_with_free_callback. -CG

Tue Nov  6 19:43:47 CET 2018
	Upgrading to gettext 0.19.8.
	Releasing libmicrohttpd 0.9.60. -CG

Thu Nov  1 16:29:59 CET 2018
	Enable using epoll() without listen socket. -JB

Sat Oct 20 12:44:16 CEST 2018
	In thread-per-connection mode, signal main thread for
	thread termination for instant clean-up and application
	notification about closed connections. -CG

Tue Oct 16 20:43:41 CEST 2018
	Add MHD_RF_HTTP_VERSION_1_0_RESPONSE option to make MHD
	act more like an HTTP/1.0 server. -GH

Fri Oct  5 18:44:45 CEST 2018
	MHD_add_response_header() now prevents applications from
	setting a "Transfer-Encoding" header to values other than
	"identity" or "chunked" as other transfer encodings are
	not supported by MHD. (Note that usually MHD will pick the
	transfer encoding correctly automatically, but applications
	can use the header to force a particular behavior.)
	Fixing #5411 (never set Content-length if Transfer-Encoding
	is given). -CG

Sat Jul 14 11:42:15 CEST 2018
	Add MHD_OPTION_GNUTLS_PSK_CRED_HANDLER to allow use of PSK with
	TLS connections. -CG/TM

Sat Jul 14 11:03:37 CEST 2018
	Integrate patch for checking digest authentication based on
	a digest, allowing servers to store passwords only hashed.
	Adding new function MHD_digest_auth_check_digest(). -CG/DB

Sat Mar 10 12:15:35 CET 2018
	Upgrade to gettext-0.19.8.1. Switching to more canonical
	gettext integration. -CG

Fri Mar  2 21:44:24 CET 2018
	Ensure MHD_RequestCompletedCallback is always called from
	the correct thread (even on shutdown and for upgraded connections). -CG

Tue Feb 27 23:27:02 CET 2018
	Ensure MHD_RequestCompletedCallback is also called for
	upgraded connections. -CG

Fri Feb 16 03:09:33 CET 2018
	Fixing #5278 as suggested by reporter. -CG/texec

Thu Feb  1 10:12:22 CET 2018
	Releasing GNU libicrohttpd 0.9.59. -CG

Thu Feb  1 08:39:50 CET 2018
	Fix masking operation. -CG/silvioprog

Mon Jan 29 17:33:54 CET 2018
	Fix deadlock when failing to prepare chunked response
	(#5260). -CG/ghaderer

Thu Jan  4 12:24:33 CET 2018
	Fix __clang_major__ related warnings for non-clang
	compilers reported by Tim on the mailinglist. -CG

Mon Dec 11 17:11:00 MSK 2017
	Fixed tests on platforms with huge number of CPUs.
	Doxygen configuration was updated.
	Various doxygen fixes. -EG

Mon Dec 07 21:08:00 MSK 2017
	Releasing GNU libmicrohttpd 0.9.58. -EG

Mon Dec 07 16:01:00 MSK 2017
	Fixed HTTPS tests on modern platforms. -EG

Mon Dec 04 15:43:00 MSK 2017
	Minor documentation installation fixes. -EG

Mon Nov 27 22:58:38 CET 2017
	Tolerate AF_UNIX when trying to determine our binding port
	from socket.  Use `sockaddr_storage` instead of trying to
	guess the sockaddr type before calling getsockname(). -CG

Mon Nov 27 22:24:00 MSK 2017
	Releasing GNU libmicrohttpd 0.9.57. -EG

Mon Nov 27 21:36:00 MSK 2017
	Updated README. -EG

Mon Nov 27 18:37:00 MSK 2017
	Corrected names in W32 DLL resources.
	Reordered and clarified configure summary message.
	Additional compiler warning mutes for builds with various configure
	parameters.
	Fixed tests on Cygwin.
	Used larger SETSIZE for Cygwin (same value as for native W32).
	Minor fixes for Cygwin.
	Added configure parameter to force disable usage of sendfile().
	Minor testsuite fixes.
	Really fixed builds with optimisation for size. -EG

Sat Nov 25 18:37:00 MSK 2017
	Fixed build with optimisation for size. -EG

Fri Nov 24 20:14:02 CET 2017
	Releasing GNU libmicrohttpd 0.9.56. -CG

Thu Nov 23 17:40:00 MSK 2017
	Added MHD_FEATURE_SENDFILE enum value and report. -EG

Thu Nov 23 08:56:00 MSK 2017
	Fixed receiving large requests in TLS mode with epoll.
	Improved GnuTLS and libgcrypt detection in configure, do not ignore
	flags in GNUTLS_{CFLAGS,LIBS} variables.
	Added special trick for Solaris/Openindiana to find GnuTLS-3 with
	right bitness.
	Added support for Solaris sendfile(3) function.
	Fixed dataraces with thread ID on W32 and pthread. Now check for
	correct thread in MHD_queue_response() works correctly.
	Fixed and silenced compiler warnings in tests and examples.
	Removed usage of TLS flags in examples where TLS is not required.
	Added support for MultiSSL in https tests with libcurl >= 7.56.0.
	Improved detection of OFF_T_MAX, SIZE_MAX. Added macros for
	SSIZE_MAX in mhd_limits.h. There are some platforms that really
	require those macros.
	Added support for Darwin's sendfile() function.
	Updated .gitignore files.
	Reworked mhd_sys_extentions.m4 with better support of modern
	platforms, more reliable detection of required macros, and
	detection of disabling of system-specific features by
	_XOPEN_SOURCE macro. -EG

Wed Nov  1 20:43:00 MSK 2017
	Mixed and muted many compiler warnings. Now GCC's flags
	-Wall -Wextra could be used for building.
	Fixed compilation of examples without libmagic.
	Better detection of libgnutls in configure.
	Reworked launch of nested configure in "po" directory to
	prevent useless reconfiguration.
	Fixed some wrong asserts.
	Enabled "test_options" test.
	Use "test_start_stop" without libcurl.
	Use chunks with sendfile() to prevent locking thread for
	single connection with large file.
	Added support for FreeBSD's sendfile with additional
	optimisations for FreeBSD 11.
	Refactoring and improvements for MHD_start_daemon_va() and
	MHD_stop_daemon().
	Fixed testing with GnuTLS >= 3.6.0. -EG

Mon Oct  9 22:38:07 CEST 2017
	Add MHD_free() to allow proper free()-ing of username/password
	data returned via MHD_digest_auth_get_username() or
	MHD_basic_auth_get_username_password() on Windows. -CG

Tue Sep 26 14:00:58 CEST 2017
	Fixing race involving setting "at_limit" flag. -CG

Tue Sep 08 21:39:00 MSK 2017
	Fixed build of examples when MHD build with non-pthread lib.
	MHD_queue_response(): added check for using in correct thread.
	Fixed sending responses larger 16 KiB in TLS mode with epoll.
	Improved doxy for MHD_get_timeout() and related functions.
	Minor internal refactoring. -EG

Tue Jul 23 11:32:00 MSK 2017
	Updated chunked_example.c to provide real illustration of usage of
	chunked encoding. -EG

Thu Jul 13 21:41:00 MSK 2017
	Restored SIGPIPE suppression in TLS mode.
	Added new value MHD_FEATURE_AUTOSUPPRESS_SIGPIPE so application could
	check whether SIGPIPE handling is required.
	Used GNUTLS_NONBLOCK for TLS sessions. -EG

Tue Jun 20 23:52:00 MSK 2017
	Libgcrypt is now optional and required only for old GnuTLS versions. -EG

Wed Jun 14 21:42:00 MSK 2017
	Added support for debug assert() and new configure parameter
	--enable-asserts for debug builds.
	Removed non-functional Symbian support. -EG

Mon Jun 05 23:34:00 MSK 2017
	More internal refactoring:
	merged MHD_tls_connection_handle_read/write() with non-TLS version,
	reduced and unified number of layers for network processing (before
	refactoring MHD_tls_connection_handle_read->MHD_connection_handle_read->
	do_read->recv_tls_adapter->GnuTLS->recv_param_adapter - 5 MHD layers;
	after refactoring MHD_connection_handle_read->recv_tls_adapter->GnuTLS -
	2 MHD layers),
	simplified and removed dead code from
	MHD_connection_handle_read/write() without functional change. -EG

Mon Jun 05 22:20:00 MSK 2017
	Internal refactoring:
	used TCP sockets directly with GnuTLS (performance improvement),
	moved some connection-related code from daemon.c to
	connection.c/connection_https.c,
	removed hacks around sendfile() and implemented correct support of
	sendfile(),
	removed do_read() and do_write() to reduce number of layer around send()
	and recv() and to improve readability and maintainability of code,
	implemented separate tracking of TLS layer state, independent of HTTP
	connection stage. -EG

Sun Jun 04 15:02:00 MSK 2017
	Improved thread-safety of MHD_add_connection() and
	internal_add_connection(), minor optimisations. -EG

Sun May 28 23:26:00 MSK 2017
	Releasing GNU libmicrohttpd 0.9.55. -EG

Sun May 21 18:48:00 MSK 2017
	Fixed build with disabled "UPGRADE".
	Fixed possible null-dereference in HTTPS test.
	Fixed compiler warning in process_request_body(), minor optimizations.
	Do not allow suspend of "upgraded" connections.
	Fixed returned value for MHD_CONNECTION_INFO_CONNECTION_SUSPENDED.
	Fixed removal from timeout lists of non-existing connections in
	cleanup_connection().
	Fixed double locking of mutex. -EG

Sun May 14 15:05:00 MSK 2017
	Fixed resuming connections and closing upgraded connections in select()
	mode with thread-per-connection. -EG

Sun May 14 14:49:00 MSK 2017
	Removed extra call to resume connections in MHD_run().
	Handle resumed connection without delay in epoll mode.
	Update states of resumed connection after resume in thread-per-connection
	mode.
	Fixed resuming connections and closing upgraded connections in poll()
	mode with thread-per-connection. -EG

Thu May 11 22:37:00 MSK 2017
	Faster start really processing data in resumed connections. -EG

Thu May 11 14:24:00 MSK 2017
	Do not add any "Connection" headers for "upgrade" connections. -EG

Wed May 10 23:09:00 MSK 2017
	Resume resuming connection before other processing in external polling
	mode. -EG

Tue May  9 23:16:00 MSK 2017
	Fixed: Do not add "Connection: Keep-Alive" header for "upgrade"
	connections. -EG

Tue May  9 21:01:00 MSK 2017
	Fixed: check all "Connection" headers of request for "Close" and "Upgrade"
	tokens instead of using only first "Connection" header with full string
	match. -EG

Tue May  9 12:28:00 MSK 2017
	Revert: continue match footers in MHD_get_response_header() for backward
	compatibility. -EG

Mon May  8 19:30:00 MSK 2017
	Fixed: use case-insensitive matching for header name in
	MHD_get_response_header(), match only headers (not footers). -EG

Fri May  5 20:57:00 MSK 2017
	Fixed null dereference when connection has "Upgrade" request and
	connection is not upgraded.  -JB/EG
	Better handle Keep-Alive/Close. -EG

Tue May  2 18:37:53 CEST 2017
	Update manual. -CG
	Add MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE.
	Releasing GNU libmicrohttpd 0.9.54. -CG

Thu Apr 27 22:31:00 CEST 2017
	Replaced flags MHD_USE_PEDANTIC_CHECKS and MHD_USE_PERMISSIVE_CHECKS by
	single option MHD_OPTION_STRICT_FOR_CLIENT. Flag MHD_USE_PEDANTIC_CHECKS
	is still supported. -EG

Tue Apr 26 15:11:00 CEST 2017
	Fixed shift in HTTP reasons strings.
	Added test for HTTP reasons strings. -EG

Tue Apr 25 19:11:00 CEST 2017
	Allow flag MHD_USE_POLL with MHD_USE_THREAD_PER_CONNECTION and without
	flag MHD_USE_INTERNAL_POLLING_THREAD for backward compatibility. -EG

Mon Apr 24 17:29:45 CEST 2017
	Enforce RFC 7230's rule on no whitespace by default,
	introduce new MHD_USE_PERMISSIVE_CHECKS to disable. -CG

Sun Apr 23 20:05:44 CEST 2017
	Enforce RFC 7230's rule on no whitespace in HTTP header
	field names if MHD_USE_PEDANTIC_CHECKS is set. -CG

Sun Apr 23 19:20:33 CEST 2017
	Replace remaining occurrences of sprintf() with
	MHD_snprintf_(). Thanks to Ram for pointing this out. -CG

Sat Apr 22 20:39:00 MSK 2017
	Fixed builds in Linux without epoll.
	Check for invalid --with-thread= configure parameters.
	Fixed support for old libgcrypt on W32 with W32 threads. -EG

Tue Apr 11 22:17:00 MSK 2017
	Releasing GNU libmicrohttpd 0.9.53. -EG

Mon Apr 10 19:50:20 MSK 2017
	HTTPS tests: skip tests instead of failing if HTTPS is not supported by
	libcurl.
	HTTPS tests: fixed return values so testsuite is able to correctly
	interpret it.
	Fixed ignored result of epoll test in test_https_get_select. -EG

Thu Apr 06 23:02:07 MSK 2017
	Make zzuf tests compatible with *BSD platforms. -EG

Thu Apr 06 22:14:22 MSK 2017
	Added warning for hypothetical extra large timeout.
	Fixed incorrect timeout calculation under extra rare conditions.
	Fixed accidental usage of IPv6 in testsuite in specific conditions. -EG

Wed Apr 05 14:14:22 MSK 2017
	Updated autoinit_funcs.h to latest upstream version with proper support of
	Oracle/Sun compiler. -EG

Wed Apr 05 12:53:26 MSK 2017
	Fixed some compiler warnings.
	Fixed error snprintf() errors detection in digestauth.c.
	Converted many run-time 'strlen()' to compile-time calculations. -EG

Sun Mar 26 13:49:01 MSK 2017
	Internal refactoring for simplification and unification.
	Minor optimizations and minor fixes.
	MHD_USE_ITC used again in thread pool mode. -EG

Sat Mar 25 20:58:24 CET 2017
	Remove dead MHD_strx_to_sizet-functions and associated
	test cases from code. -CG

Sat Mar 25 20:40:10 CET 2017
	Allow chunk size > 16 MB (up to 2^64-1). Ignore
	chunk extensions instead of triggering an error.
	(fixes #4967). -CG

Tue Mar 25 20:59:18 MSK 2017
	Check for invalid combinations of flags and options in
	MHD_start_daemon(). -EG

Tue Mar 21 13:51:04 CET 2017
	Use "-lrt" to link libmicrohttpd if we are using
	clock_gettime() as needed by glibc < 2.17. -CG

Tue Mar 21 13:42:07 CET 2017
	Allow chaining of suspend-resume calls withuot
	the application processing data from the network. -CG

Mon Mar 20 0:51:24 MSK 2017
	Added autoconf module for detection whatever shutdown of listening socket
	trigger select. This is only reliable method to use such feature as some
	platforms change behaviour from version to version. -EG

Sun Mar 19 13:57:30 MSK 2017
	Rewritten logic of handling "upgraded" TLS connections in epoll mode:
	used edge trigger instead of level trigger,
	upgraded "ready" connection are stored in DL-list,
	fixed handling of more than 128 ready connections,
	fixed busy-waiting for idle "upgraded" TLS connections. -EG

Fri Mar 17 10:45:31 MSK 2017
	If read buffer is full, MHD need to receive remote data and application
	suspended connection, do not fail while connection is suspended and give
	application one more chance to read data from buffer once connection is
	resumed. -EG

Thu Mar 16 23:45:29 MSK 2017
	Allow again to run MHD in external epoll mode by
	MHD_run_from_select() - this allow unification of user code
	and produce no harm for performance. Especially useful with
	MHD_USE_AUTO flag. -EG

Thu Mar 16 23:12:07 MSK 2017
	Idle connection should be disconnected *after* "timeout" number of
	second, not *before* this number. -EG/VT

Thu Mar 16 22:31:54 MSK 2017
	Unified update of last activity on connections.
	Update last activity only if something is really transmitted.
	Update last activity each time when something is transmitted.
	Removed early duplicated check for timeout on HTTPS connections.
	Removed update of last active time for connections without timeout.
	Fixed reset of timeout timer on resumed connections.
	Fixed never-expired timeouts on HTTPS connections.
	Fixed thread-safety of MHD_set_connection_option(). -EG

Thu Mar 16 21:05:08 MSK 2017
	Fixed minor bug resulted in slight slowdown of HTTPS connection
	handshake. -EG

Thu Mar 16 20:35:59 MSK 2017
	Improved thread-safety for DL-lists. -EG

Thu Mar 16 17:55:01 MSK 2017
	Fixed thread-safety of MHD_get_daemon_info() for
	MHD_DAEMON_INFO_CURRENT_CONNECTIONS. -EG

Thu Mar 16 16:49:07 MSK 2017
	Added ability to get actual daemon flags via MHD_get_daemon_info().
	Fixed test_upgrade to work in request mode.
	Fixed compiler warnings in test_upgrade. -EG

Wed Mar 15 23:29:59 MSK 2017
	Prevented socket read/write if connection is suspended.
	Added missing resets of 'connection->in_idle'.
	Reworked handling of suspended connection: ensure that
	connection is not disconnected by timeout, always
	updated read/write states right after suspending. -EG

Wed Mar 15 21:02:26 MSK 2017
	Added new enum value MHD_CONNECTION_INFO_CONNECTION_TIMEOUT
	to get connection timeout by MHD_get_connection_info(). -EG

Sat Mar 11 12:03:45 CET 2017
	Fix largepost example from tutorial to properly generate
	error pages. -CG
	Fix largepost example, must only queue replies either before upload
	happens or after upload is done, not while upload is ongoing

Fri Mar 10 16:37:12 CET 2017
	Fix hypothetical integer overflow for very, very large
	timeout values. -CG

Fri Mar 10 16:22:54 CET 2017
	Handle case that we do not listen at all more gracefully
	in MHD_start_daemon() and not pass '-1' to helper functions
	that expect a valid socket. -CG

Tue Mar  7 12:11:44 BRT 2017
	Updates file `.gitignore`.

Tue Mar  7 10:37:45 BRT 2017
	Updated the MHD_OPTION_URI_LOG_CALLBACK's documentation.

Mon Mar  6 21:46:59 BRT 2017
	Added the i18n example fixing #4924. -SC

Wed Mar 1 23:47:05 CET 2017
	Minor internal optimisations.
	Changed closure connection monitoring logic: now all connections are
	monitored for OOB data (which treated as error), connections are not
	monitored any more for incoming data if incoming data is not required for
	processing. except_fd_set is not optional now for MHD_get_fdset(),
	MHD_get_fdset2() and MHD_run_from_select().
	Improved connection processing in epoll mode: now connection can process
	both read and write each turn.
	Updated HTTP response codes; updated and added all missing standard HTTP
	headers names (and headers categories); updated and added all missing
	standard and additional HTTP methods. Now MHD return status
	MHD_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE (431) instead of old
	MHD_HTTP_REQUEST_ENTITY_TOO_LARGE (413) for very long header.
	Reworked handling of data pending in TLS buffers, resolved busy-waiting
	if incoming data is pending in TLS buffers and connection is in
	LOOP_INFO_WRITE mode.
	Do not clear 'ready' flag in epoll mode if send()/recv() result is
	EINTERRUPTED.
	Better detection of unready connection state: used less number of calls of
	recv()/send() in epoll mode.
	Configure: do not run gcrypt and GnuTLS tests if HTTPS is disabled by
	configure parameter.
	Fixed wrong value returned by MHD_get_timeout().
	All double-linked lists now walked from tail to head. As new items are
	added to head, this result in more uniform processing time.
	Improved sockets errors handling in epoll mode.
	OOB data on 'upgraded' sockets is treated as error. -EG

Thu Feb 16 11:20:05 CET 2017
	Replace tsearch configure check with code from gnulib. -CG

Wed Feb 15 13:35:36 CET 2017
	Fixing a few very rare race conditions for thread-pool or
	thread-per-connection operations during shutdown.
	Various minor cosmetic improvements.
	Fixed #4884 and #4888 (solaris portability issues). -CG

Wed Feb 08 22:33:10 MSK 2016
	Ported test_quiesce_stream to W32.
	Improved precompiler flags selection of OpenBSD.
	Fixed sending responses backed by files not supported by sendfile().
	Fixed thread safety for responses backed by file FD.
	Updated fileserver_example.
	Improved handling of 'upgraded' TLS forwarding in select() and poll()
	modes.
	Fixed processing of incoming TLS data in epoll mode if more than 128
	connections are active.
	Fixed accepting more than 128 incoming connection in epoll mode.
	Improved test_large_put, added poll() and epoll testing.
	Added test_large_put_inc for testing of incremental buffer processing.
	Rewritten epoll connection processing logic: handle all connection one
	time per turn instead of trying to handle all active connection until all
	pending data is dried. Result is more uniform connection processing
	period. -EG

Wed Nov 23 15:24:10 MSK 2016
	Used SO_REUSEADDR (on non-W32) alongside with SO_REUSEPORT if option
	MHD_OPTION_LISTENING_ADDRESS_REUSE was set. -EG

Wed Nov 23 12:48:23 MSK 2016
	Move all gettext-related staff to 'po' subdirectory.
	Excluded gettext files generation from normal build.
	Removed generated files from GIT. -EG

Tue Nov 15 19:08:43 MSK 2016
	Fixed forwarding "upgraded" TLS connections for
	chunks sizes larger than buffer size. -EG

Mon Nov 14 22:18:30 MSK 2016
	Fixed unintentional usage of SO_REUSEADDR on W32.
	Added support for SO_EXCLBIND on Solaris.
	Fixed using MHD with MHD_OPTION_LISTENING_ADDRESS_REUSE
	on Linux kernels before 3.9 (longterm 3.2 and 3.4
	are still supported). -EG

Sun Nov 13 19:16:38 CET 2016
	Fixed a few race issues on suspend-resume in cases where the
	application uses threads even though MHD did not (or at least
	had no internal need for locking). Also fixed DLL handling of
	the timeout list, avoiding manipulating it for suspended
	connections.  Finally, eliminated calling application logic
	on suspended connections (which before could happen under
	certain circumstances). -CG

Thu Nov 11 20:49:23 MSK 2016
	Added support for various forms of
	pthread_attr_setname_np() so thread names will be set
	more efficiently on certain platforms (Solaris, NetBSD etc.) -EG

Thu Nov 10 21:50:35 MSK 2016
	Added rejection in MHD_start_daemon() of invalid combinations
	of daemon flags.
	Added MHD_USE_AUTO and MHD_USE_AUTO_INTERNAL_THREAD for
	automatic selection of polling function depending on
	platform capabilities and requested mode. -EG

Thu Nov 10 17:49:56 MSK 2016
	Ported "upgrade" tests to W32 and other platforms, used
	"gnutls-cli" instead of "openssl" in tests, minor bugs
	fixed, added verbose reporting if requested.
	"Upgrade" processing - changed internal handling logic, improved
	and refactored, bugs fixed, fixed sigpipe on Darwin, added
	printing error to log, fixed compilation without HTTPS.
	Added 'configure' parameter "--disable-httpupgrade" for building
	minimal-sized MHD versions.
	Added feature check "MHD_FEATURE_UPGRADE".
	Responses destroyed (freed) earlier if possible.
	Added many remarks in code comments about thread safety.
	Some data races and other multithread-related issues are fixed,
	including usage of closed sockets (may resulted in accidental closing
	of wrong socket).
	SO_NOSIGPIPE is used on all platform which support it, not only
	on Darwin.
	Added support for suspending connections in thread-per-connection
	mode (itself almost useless, mostly to unify modes support).
	Fixed Inter-Thread Communication channel usage in epoll modes.
	Reworked daemon cleanups and handling MHD_stop_daemon(): resources
	are freed only by specific threads, data races and other fixes.
	Started usage of C99 standard 'bool' where supported with
	fallback to 'int'.
	Renamed many MHD flags. Now they are self-explainable and more
	obvious, like MHD_USE_INTERNAL_POLLING_THREAD instead of
	MHD_USE_SELECT_INTERNALLY. Old flag names are supported for
	backward compatibility.
	Improved processing of "fast" connections: now full sequence
	"read request - send reply headers - send reply body" is processed
	after single select()/poll(). If connection is slow, request is huge
	or response in not immediately ready - connection will be processed
	in "traditional" way.
	Added usage of "calloc()" where supported.
	Minor documentation fixes.
	Minor improvements and fixes. -EG
	"Upgrade" test fixes.
	Documentation updated.
	Added HTTP "Upgrade" example. -CG

Mon Oct 17 19:08:18 CEST 2016
	Fixed misc. issues relating to upgrade.
	Releasing experimental 0.9.52. -CG

Wed Oct 12 14:26:20 CEST 2016
	Migrated repository from Subversion to Git. -CG

Tue Oct 11 18:09:56 CEST 2016
	Deprecated MHD_USE_SSL, use MHD_USE_TLS instead. -CG

Tue Oct 11 18:14:40 MSK 2016
	Code internal refactoring: 'pipes' renamed to 'inter-thread
	communication (channels)/ITCs', as code can use different types
	of communications.
	Optimizations: ITCs now always created in non-blocking mode.
	Added configure parameter to choose ITC type.
	Updated documentation and comments.
	Minor errors fixed (related to heavy load). -EG

Thu Sep 22 17:51:04 CEST 2016
	Implementing support for eventfd() instead of pipe() for
	signaling (on platforms that support it); fixing #3557. -CG

Thu Sep 22 11:03:43 CEST 2016
	Simplify internal error handling logic by folding it into the
	MHD_socket_close_, MHD_mutex_lock_, MHD_mutex_unlock_ and
	MHD_mutex_destroy_ functions. -CG

Tue Sep 13 22:20:26 MSK 2016
	Added autoconf macro to enable maximum platform
	features. Fixed compiling on Solaris. -EG

Wed Sep  7 12:57:57 CEST 2016
	Fixing #4641. -Hawk

Wed Sep  7 00:28:59 CEST 2016
	Adding remaining "_"-markups for i18n (#4614). -CG

Tue Sep  6 23:39:56 CEST 2016
	Allow out-of-order nonces for digest authentication (#4636). -CG

Tue Sep  6 21:29:09 CEST 2016
	Martin was right, "socket_context" should be "void *"
	in `union MHD_ConnectionInfo`.  -MS

Sun Sep  4 18:16:32 CEST 2016
	Fixing potential memory leak (#4634). -CG

Sun Sep  4 17:25:45 CEST 2016
	Tests for "Upgrade" logic are now in place and passing.
	However, still need to make sure code is portable. -CG

Sat Sep  3 11:56:20 CEST 2016
	Adding logic for handling HTTP "Upgrade" in thread-per-connection
	mode. Also still untested. -CG

Sat Aug 27 21:01:43 CEST 2016
	Adding a few extra safety checks around HTTP "Upgrade"
	(against wrong uses of API), and a testcase. -CG

Sat Aug 27 20:07:53 CEST 2016
	Adding completely *untested* logic for HTTP "Upgrade"
	handling. -CG

Sat Aug 27 18:20:38 CEST 2016
	Releasing libmicrohttpd 0.9.51. -CG

Tue Aug 23 22:54:07 MSK 2016
	Internal refactoring: W32 compatibility layer was finally
	replaced with several specialized abstraction layers for
	sockets, control pipes (inter-thread communication) and
	generic functions. Now all major platform functions
	(including threads and mutex) are implemented in thin
	abstraction layers.
	Improved performance on W32 due to eliminating
	translation of error to POSIX codes and using W32 codes
	directly (through macros).
	Improved error reporting on all platforms.
	Improved error handling and reporting on Darwin.
	Minor fixes. -EG

Tue Aug 16 15:14:30 MSK 2016
	Minor improvement for monotonic clock.
	Minor configure fix for non-bash shells. -EG

Mon Aug 15 13:06:52 CEST 2016
	Fixed possible crash due to write to read-only region of
	memory given ill-formed HTTP request (write was otherwise
	harmless, writing 0 to where there was already a 0).
	Fixed issue with closed connection slots not immediately
	being available again for new connections if we reached
	our connection limit.
	Avoid even accept()ing connections in certain thread modes
	if we are at the connection limit and
	MHD_USE_PIPE_FOR_SHUTDOWN is available. -CG

Wed Aug 10 16:42:57 MSK 2016
	Moved threads, locks and mutex abstraction to separate files,
	some minor errors fixed, added support for thread name functions
	on various platforms, added configure flag for disable thread
	naming. -EG

Sat Jul 23 20:45:51 CEST 2016
	Added macro detection of speed/size compiler optimization.
	Added different implementation of functions in mhd_str.c for
	size optimization. Enabled automatically if compiler size
	optimization is detected or MHD_FAVOR_SMALL_CODE is defined.
	Added unit tests for all mhd_str.c functions. -EG

Sat Jul 16 21:54:49 CEST 2016
	Warn user if they sent connection into blocking
	state by not processing all POST data, not suspending,
	and not running in external select mode. -CG

Fri Jul  8 21:35:07 CEST 2016
	Fix FIXME in tutorial. -CG

Fri Jul  8 15:57:06 CEST 2016
	Adding support for 308 status code. -CG

Sat Jun 25 13:49:31 CEST 2016
	Use shutdown to trigger select on NetBSD. -EG

Thu Jun  2 09:55:50 CEST 2016
	Releasing libmicrohttpd 0.9.50. -CG

Wed Jun  1 21:59:34 CEST 2016
	Do not send "Content-Length" header for 1xx/204/304 status codes. -CG

Tue May 17 13:32:21 CEST 2016
	Allow clients to determine whether a connection is suspended;
	introduces MHD_CONNECTION_INFO_CONNECTION_SUSPENDED. -CG/FC

Sun May 15 12:17:25 CEST 2016
	Fix handling system or process resource limit exhaustion upon
	accept(). -CG/CP

Thu May 12 08:42:19 CEST 2016
	Fix handling of partial writes in MHD_USE_EPOLL_LINUX_ONLY; only
	consider sockets returning EAGAIN as unready. -CG/CP

Mon May  2 06:08:26 CEST 2016
	Adding logic to help address FE performance issue as
	discussed on the mailinglist with subject
        "single-threaded daemon, multiple pending requests, responses batched".
	The new logic is only enabled when MHD_USE_EPOLL_TURBO is set.
	Note that some additional refactoring was also done to clean up
	the code and avoid code duplication, which may have actually fixed
	an unrelated issue with HTTPS and a POLL-style event loop. -CG

Sat Apr 30 10:22:37 CEST 2016
	Added clarifications to manual based on questions on list. -CG

Sat Apr 23 20:12:01 CET 2016
	Tests perf_get_concurrent and test_concurrent_stop ported to use
	pthread instead of fork(). Added more error detections. -EG

Sat Apr 23 16:06:30 CET 2016
	Improved test_quiesce test. -EG

Sat Apr 23 15:39:38 CET 2016
	Notify other threads in MHD_quiesce_daemon() so listen socket FD
	is removed from awaiting select() and poll(). -EG

Sat Apr 23 14:17:15 CET 2016
	Revert "shutdown trigger select" on Darwin. Fixed daemon shutdown
	on Darwin without "MHD_USE_PIPE_FOR_SHUTDOWN" option. -EG

Fri Apr 22 14:29:28 CET 2016
	Fixed race conditions when stopping quiesced daemon with thread
	pool. -EG

Wed Apr 20 18:12:30 CET 2016
	Fixed macros in sysfdsetsize.c which could prevent compiling with
	non-default FD_SETSIZE.
	Fixed comments in mhd_str.c.
	Updated test_post.c to not ignore specific error on W32 if libcurl
	is built with workaround for WinSock bug. -EG

Mon Apr 18 19:35:14 CET 2016
	Fixed data races leading to inability in rare situations to
	resume suspended connection. -EG

Tue Apr 13 21:46:01 CET 2016
	Removed unneeded locking for global timeout list in
	MHD_USE_THREAD_PER_CONNECTION mode.
	Added 'simplepost' and 'largepost' examples to VS projects.
	Added strtoXX() locale-independent replacement functions.
	Added more error checking and minor fixes in digest auth
	functions - should improve security.
	Ignored specific errors in 'test_post' test until libcurl
	will implement workaround for WinSock bug.
	Fixed handling of caller-supplied socket with
	MHD_OPTION_LISTEN_SOCKET (regression in 0.9.49).
	Minor fixes.
	Various cosmetics and comments fixes. -EG

Sat Apr 09 13:05:42 CET 2016
	Releasing libmicrohttpd 0.9.49. -EG

Fri Apr 08 18:32:17 CET 2016
	Some minor internal fixes, addition error checking and
	micro optimizations.
	Reworked usage of sockets shutdown() - now work equally
	on all platforms, disconnection should be "more graceful". -EG

Tue Mar 15 21:52:27 CET 2016
	Do not crash if pthread_create() fails. -DD

Tue Mar 15 20:29:34 CET 2016
	Do not use eready DLL data structure unless
	we are actually using epoll(). -DD/CG

Fri Feb  5 20:43:11 CET 2016
	Fixed testsuite compile warning on W32.
	Added check test for triggering poll() on
	listen socket. -EG

Thu Feb  4 11:38:11 CET 2016
	Added some buffer overrun protection.
	Fixed handling of malformed URI with spaces. -EG

Wed Feb  3 15:41:57 CET 2016
	Make signal-pipe non-blocking and drain it. -CG

Sat Jan 30 15:49:07 CET 2016
	Fix running select() with empty fdsets on W32. -EG

Mon Jan 25 13:45:50 CET 2016
	Added check test for triggering select() on
	listen socket. -EG

Thu Jan 21 19:35:18 CET 2016
	Fixed old bug with making sockets non-blocking on
	various platforms so now sockets are really
	non-blocking on all supported platforms.
	Reworked and fixed code for using SOCK_CLOEXEC,
	SOCK_NONBLOCK and EPOLL_CLOEXEC resulting in
	fewer used system calls. -EG

Tue Jan 19 20:59:59 CET 2016
	Cleaned up and optimized with minor fixes code for
	making sockets non-blocking non-inheritable. -EG

Tue Jan 19 11:14:18 CET 2016
	Removed workaround for Cygwin non-blocking sockets:
	handling non-blocking sockets were fixed in Cygwin
	and libmicrohttpd how uses non-blocking sockets on
	all platforms. -EG

Mon Jan 18 23:54:45 CET 2016
	Cleaned up examples to avoid giving oversimplified code
	that may lead to complications if adopted naively. -CG

Sun Jan 17 11:18:55 CET 2016
	Do no refuse to send response if sendfile() failed with
	EINVAL (common error for files located on SMB/CIF). -EG

Sat Jan 16 19:14:39 CET 2016
	Use US-ASCII only (instead of user locale settings) when
	performing caseless string comparison as required by
	standard. -EG

Tue Jan 12 16:10:09 CET 2016
	Fixed declaraion of MHD_get_reason_phrase_for(). -EG

Mon Jan 11 19:58:50 CET 2016
	Configure.ac small fixes and refactoring. -EG

Fri Dec 18 15:54:50 CET 2015
	Releasing libmicrohttpd 0.9.48. -CG

Tue Dec  15 18:35:55 CET 2015
	Improved compatibility with VS2010 and other older
	compilers. -EG

Tue Dec  8 21:48:44 CET 2015
	Default backlog size for listen socket was changed from
	32 to SOMAXCONN, added new option MHD_OPTION_LISTEN_BACKLOG_SIZE
	to override default backlog size.
	If not all connections can be handled by MHD_select() than
	at least some of connections will be processed instead of
	failing without any processing.
	Fixed redefenition of FD_SETSIZE on W32 so select() will
	work with 2000 connections instead of 64.
	Better handled redefenition of FD_SETSIZE on all
	platforms. -EG

Sat Dec  5 17:30:45 CET 2015
	Close sockets more aggressively in multi-threaded
	mode (possibly relevant for idle servers). -CG

Fri Dec  4 13:53:05 CET 2015
	Releasing libmicrohttpd 0.9.47. -CG

Thu Dec  3 18:21:44 CET 2015
	Reworked VS project files. Used x64 build tools by
	default, many optimizations, fixes.
	Added project files for VS 2015. -EG

Tue Dec  1 14:05:13 CET 2015
	SPDY is dead, killing experimental libmicrospdy. -CG

Tue Dec  1 10:01:12 CET 2015
	New logic for controlling socket buffer modes.
	Eliminated delay before last packet in response and before
	"100 Continue" response on all platforms. Also response
	header are pushed to client without waiting for response
	body. -EG

Wed Nov 25 17:02:53 CET 2015
	Remove 200ms delay observable with keep-alive on Darwin
	and *BSD platforms. -EG

Tue Nov 10 15:25:48 CET 2015
	Fix issue with shutdown if connection was resumed just
	before shutdown. -FC

Fri Nov  6 22:54:38 CET 2015
	Fixing the buffer shrinkage issue, this time with test. -CG
	Releasing libmicrohttpd 0.9.46. -CG

Tue Nov  3 23:24:52 CET 2015
	Undoing change from Sun Oct 25 15:29:23 CET 2015
	as the original code was counter-intuitive but
	correct, and the new code does break pipelining.
	Ignore empty lines at the beginning of an HTTP
	request (more tolerant implementation). -CG

Sat Oct 31 15:52:52 CET 2015
	Releasing libmicrohttpd 0.9.45. -CG

Tue Oct 27 12:08:02 CET 2015
	Rework deprecation maros: fix errors with old GCC versions,
	improved support for old clang and new GCC. -EG

Sun Oct 25 23:05:32 CET 2015
	Return correct header kind in MHD_get_connection_values()
	even if a bitmask is used for the "kind" argument. -FC/CG

Sun Oct 25 15:29:23 CET 2015
	Fixing transient resource leak affecting long-lived
	connections with a lot of keep-alive and HTTP request
	pipelining under certain circumstances (which reduced
	the receive window).
	Fixed assertion failure triggered by a race in
	thread-per-connection mode on shutdown in rare
	circumstances. -CG

Mon Oct  5 11:53:52 CEST 2015
	Deduplicate code between digestauth and connection
	parsing logic for URI arguments, shared code moved
	to new MHD_parse_arguments_ function in internal.c. -CG

Thu Oct  1 21:22:05 CEST 2015
	Releasing libmicrohttpd 0.9.44. -CG

Wed Sep 30 21:05:38 CEST 2015
	Various fixes for W32 VS project files. -EG

Fri Sep 25 09:49:10 CEST 2015
	Fix digest authentication with URL arguments where
	value-less keys are given before the last argument.
	Thanks to MA for reporting. -CG

Tue Sep 22 19:17:54 CEST 2015
	Do not use shutdown() on listen socket if MHD_USE_PIPE_FOR_SHUTDOWN
	is set. -CG

Wed Sep 16 11:06:02 CEST 2015
	Releasing libmicrohttpd 0.9.43. -CG

Wed Sep  2 16:50:31 CEST 2015
 	Call resume_suspended_connections() when the user is running
	its own mainloop and calls MHD_run_from_select() to support
	resuming connections with external select. -FC

Sun Aug 30 14:53:51 CEST 2015
	Correct documentation as to when MHD_USE_EPOLL_LINUX_ONLY
	is allowed. -CG

Thu Aug 27 09:38:44 CEST 2015
	Reimplement monotonic clock functions for better
	support various platforms.
	Print more information during configure. -EG

Fri Aug 14 14:13:55 CEST 2015
	Export MHD_get_reason_phrase_for() symbol. -CG

Sat Aug  8 12:19:47 CEST 2015
	Added checks for overflows and buffer overruns, fixed
	possible buffer overrun.
	Updated md5 implementation.
	Fixed many compiler warning (mostly for VC compiler). -EG

Tue Aug  4 13:50:23 CEST 2015
	Fix failure to properly clean up timed out connections
	if running in external select mode without listen socket,
	which caused busy waiting until new connections arrived.
	(Fixes #3924, thanks to slimp for reporting and testcase). -CG

Sun Aug  2 19:08:20 CEST 2015
	Ignore close() errors on sockets except for EBADF,
	fixes #3926. -CG

Sat Jun 27 22:16:27 CEST 2015
	Make sure to decrement connection counter before
	calling connection notifier so that
	MHD_DAEMON_INFO_CURRENT_CONNECTIONS does not
	present stale information (relevant if this is
	used for termination detection of a daemon
	stopped via MHD_quiesce_daemon()). Thanks to
	Markus Doppelbauer for reporting. -CG

Fri Jun 26 23:17:20 CEST 2015
	Fix (automatic) handling of HEAD requests with
	MHD_create_response_from_callback() and HTTP/1.1
	connection keep-alive. Thanks to Cristian Klein
	for reporting. -CG

Tue Jun 09 18:30:17 CEST 2015
	Add new functions MHD_create_response_from_fd64() and
	MHD_create_response_from_fd_at_offset64(). -EG

Thu Jun  4 13:37:05 CEST 2015
	Fixing memory leak in digest authentication. -AW

Wed Jun 03 21:23:47 CEST 2015
	Add deprecation compiler messages for deprecated functions
	and macros. -EG

Fri May 29 12:23:01 CEST 2015
	Fixing digest authentication when used in combination
	with escaped characters in URLs. -CG/AW

Wed May 13 11:49:09 CEST 2015
	Releasing libmicrohttpd 0.9.42. -CG

Wed May 13 11:33:59 CEST 2015
	Fix off-by-one in MHD_start_daemon_va() error handling logic
	when initialization of threads for thread pool fails for some
	reason. -CG/JC

Thu May  7 17:05:46 CEST 2015
	Add support for poll() in W32. -EG

Wed May  6 18:07:38 CEST 2015
	Fix #3784: actually implement MHD_CONNECTION_INFO_SOCKET_CONTEXT. -asherkin

Thu Apr 30 00:03::49 CEST 2015
	Releasing libmicrohttpd 0.9.41. -CG

Thu Apr 30 00:02:33 CEST 2015
	Fix issue where resumed connections would not continue
	unless other requests are active in certain
	event-loop modes. Thanks to Mike Castillo for reporting. -CG

Wed Apr 15 03:16:18 CEST 2015
	Fixing issue #3753 (testcase issue). -CG

Wed Apr 15 00:30:34 CEST 2015
	Fix looping issue when using MHD_USE_POLL_INTERNALLY
	and a client times out. -LB

Sun Apr 12 21:48:50 CEST 2015
	Fix looping issue when combining MHD_USE_EPOLL_LINUX_ONLY
	with HTTPS and slow clients. -CG

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

Thu Apr  9 09:01:15 CEST 2015
	Fixing issue with undrained signal pipe when using
	MHD_USE_SELECT_INTERNALLY and MHD_USE_POLL in combination
	with MHD_resume_connection(), causing 100% CPU usage. -DD

Tue Apr  7 00:12:36 CEST 2015
	Releasing libmicrohttpd 0.9.40. -CG

Sat Apr  4 18:28:24 CEST 2015
	Fix potential deadlock issue in MHD_USE_THREAD_PER_CONNECTION
	mode if shutdown is initiated while connections are active. -CG

Sat Apr  4 17:48:13 CEST 2015
	Fix issue in thread-pool mode where a MHD_stop_daemon()
	might not reach threads that stopped listening because
	we hit the maximum number of concurrent connections and
	the option MHD_USE_PIPE_FOR_SHUTDOWN was also not used.
	Testcase added as well. -CG

Fri Apr  3 12:55:31 CEST 2015
	Update HTTPS testcases to avoid SSLv3, as SSLv3 is dead.

Fri Apr  3 12:25:28 CEST 2015
	Do not enforce FD_SETSIZE-limit on worker control
	pipe when using MHD_USE_EPOLL_LINUX_ONLY (#3751). -MH/CG

Tue Mar 31 10:28:26 CEST 2015
	Adding MHD_OPTION_NOTIFY_CONNECTION,
	MHD_CONNECTION_NOTIFY_STARTED,
	MHD_CONNECTION_NOTIFY_CLOSED and
	MHD_CONNECTION_INFO_SOCKET_CONTEXT to allow
	applications to trigger operations when TCP
	connections start or end, instead of just
	exposing HTTP requests starting and ending. -RG/CG

Thu Feb 26 09:55:43 CET 2015
	Fixing bug that prevented MHD_OPTION_HTTPS_MEM_DHPARAMS
	from working within a MHD_OPTION_ARRAY. -DD

Sun Feb  8 01:24:38 CET 2015
	Adding MHD_OPTION_HTTPS_KEY_PASSWORD as proposed by
	Andrew Basile. -CG/AB

Wed Feb  4 20:34:22 CET 2015
	Fix issue where for HTTP/1.0-clients that set
	Connection: Keep-Alive header a response of
	indefinite size was generated with chunked encoding. -CG

Sun Jan 18 20:09:06 CET 2015
	Fix potential infinite loop on shutdown in multi-threaded mode
	under certain conditions. -CG

Mon Dec 22 16:33:18 CET 2014
	Releasing 0.9.39. -CG

Mon Dec 22 13:02:36 CET 2014
	Fix generated compiler flags for Solaris Studio linker (#3584). -CG

Sat Dec 20 00:35:40 CET 2014
	Adding MHD_http_unescape() to public API (#3585). -CG
	Updating documentation to document
	MHD_is_feature_supported(). -CG

Thu Dec  4 00:43:10 CET 2014
	If "Connection: upgrade" is requested, do not add
	"Connection: Keep-Alive" in the response. -GJ

Tue Nov 18 13:52:29 CET 2014
	Call MHD_cleanup_connections() during MHD_DAEMON_INFO_CURRENT_CONNECTIONS
	processing for more accurate results. -MS

Wed Oct 29 20:45:21 CET 2014
	Adding MHD_OPTION_LISTENING_ADDRESS_REUSE option allowing clients
	to force allowing re-use of the address:port combination
	(SO_REUSEPORT). -MS

Wed Oct 29 16:27:05 CET 2014
	Adding MHD_DAEMON_INFO_CURRENT_CONNECTIONS to allow clients
	to query the number of active connections. -MS

Fri Oct  3 14:28:58 CEST 2014
	Releasing 0.9.38. -CG

Mon Sep 29 22:25:34 CEST 2014
	Properly decode '+' in URL-encoded POST data. -CG/KM

Fri Sep 12 17:32:09 CEST 2014
	Fix --disable-dauth configure option (#3543). -doostee

Thu Jun 26 21:06:04 CEST 2014
	Fix failure to terminate 'instantly' in thread-per-connection
	mode if there is a client with open connections.
	Thanks to Kenneth Mastro for reporting. -CG

Sun Jun 22 12:22:08 CEST 2014
	Actually, avoid locking on response as responses must
	not be modified in a connection-specific way; instead
	modify the connection's data buffer to add missing
	responses headers.  If we are forced to add
	"Connection: close", suppress output of conflicting
	application-provided "Connection: Keep-Alive" header. -CG

Sun Jun 22 00:22:08 CEST 2014
	Lock on response if adding headers, needed if response
	object is shared across threads and connections. -CG

Thu Jun 19 17:32:32 CEST 2014
	Ensure that listen FD is bound to epoll FD even before
	MHD_run() is called if running with MHD_USE_EPOLL_LINUX_ONLY
	in combination with 'external select' mode.  Thanks to
	Marcos Pindado Sebastian for reporting. -CG

Sun Jun  8 15:10:44 CEST 2014
	Add 'MHD_set_response_options' as a way to set per-response
	flags.  Add flag to force HTTP 1.0-only conservative
	behavior, in particular suppressing adding "Connection"
	headers. -CG

Mon Jun  2 00:03:28 CEST 2014
	Added back unescaping for URI path (#3413) but without
	unescaping '+' (#3371) to remain compatible with
	MHD 0.9.34 and before.  Note that applications providing
	a custom MHD_OPTION_UNESCAPE_CALLBACK are no longer expected
	to replace '+' with ' ', as that is now done separately for
	the locations where this transformation is appropriate.
	Releasing 0.9.37. -CG

Wed May 28 15:30:56 CEST 2014
	Properly applying patch that was supposed to be
	committed on "May  2 20:22:45 CEST 2014" to address
	infinite loop (DoS) when HTTP connection is reset (#3392). -GM

Sun May 25 20:18:27 CEST 2014
	Fixed W32 build issues. -EG
	Releasing 0.9.36. -CG

Sat May 17 06:47:00 CEST 2014
	Fix notifying client about completed request twice
	under certain circumstances. -CG

Tue May 13 18:24:37 CEST 2014
	Fix accidental transmission of footer termination '\r\n'
	for responses with zero byte payload and non-chunked
	encoding (#3397).  Thanks to amatus for reporting. -CG

Sun May  4 11:05:26 CEST 2014
	Fix gnutls header check to make it cross-compile aware. -BK

May  2 20:22:45 CEST 2014
	Fix infinite loop (DoS) when HTTP connection is reset (#3392). -GM
	Fix possible issue from combination of epoll and suspend/resume
	logic if edge trigger event is lost; also simplify logic to
	maintain simpler invariants on the epoll state. -CG
	Use OpenSSL cipher list "HIGH" in libmicrospdy (#3391). -CG
	Releasing 0.9.35. -CG

Thu Apr 10 09:39:38 CEST 2014
	Removed unescaping for URI path (#3371) as '+' should not
	be converted to space in accordance with
	http://www.w3.org/TR/html401/appendix/notes.html#ampersands-in-uris
	and http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
	Note that we now also no longer convert '#38;' to '&'; if needed,
	the application needs to apply unescaping to the path of the URI
	itself (before, MHD unescaped '#38;' but not '&amp;', so this
	inconsistency was now resolved by simply not unescaping anything
	before the first '&'). -CG

Tue Apr 08 15:35:44 CET 2014
	Added support for W32 native threads.
	Added --with-threads=LIB configure parameter. -EG

Mon Apr  7 13:25:30 CEST 2014
	Add MHD_OPTION_HTTPS_MEM_DHPARAMS to allow applications
	to enable PFS. -HB/CG

Tue Apr 01 07:10:23 CET 2014
	Added usage of native mutex on W32. -EG

Sat Mar 29 16:12:03 CET 2014
	Added MHD_is_feature_supported() function. -EG

Thu Mar 27 14:47:54 CET 2014
	Used larger FD_SETSIZE internally on W32.
	Extended API to work with non-default FD_SETSIZE. -EG

Tue Mar 25 12:53:55 CET 2014
	Fix limiting by IPv6 address. -EG

Tue Mar 25 09:06:13 CET 2014
	Added more FD_SETSIZE checks.
	Implemented FD_SETSIZE checks for W32. -EG

Wed Mar 05 13:15:05 CET 2014
	Cleanup and refactoring of configure.ac.
	m4 macros updated.
	Custom configure macros replaced with autoconf archive macros.
	SPDY disabled by default on W32.
	Changed configure flag from '--disable-pipe' to
	'--enable-socketpair'.
	Added configure flags '--disable-doc' and '--disable-examples'.
	Narrowed down external lib specific compiler and linker flags
	usage. -EG

Wed Feb 26 17:42:34 CET 2014
	Refactoring of configure.ac: custom macros replaced with macros
	from Autoconf Archive.
	Minor corrections of configure.ac.
	Excluded pthread flags from global flags, pthread now used only
	where required.
	W32: fixed .dll resource compilation with '-isystem' CPPFLAG.
	W32: improved header compatibility with MSVC.
	W32: now tested on Win64, compiled by MinGW-w64. -EG

Mon Feb 24 23:13:53 CET 2014
	Added support for TCP FASTOPEN. -SHT
	Releasing 0.9.34. -CG

Thu Feb 20 14:17:05 CET 2014
	W32: Added creation of libmicrohttpd.lib, libmicrohttpd.def,
	libmicrohttpd.exp and libmicrohttpd-static.lib for easy use
	compiled MHD with MSVC.
	W32: Use MS lib.exe tool if available for creating MSVC staff.
	W32: Added .dll information resource. -EG

Tue Feb 18 19:46:45 CET 2014
	Removed dependency on plibc for simpler compilation for W32.
	Added configure option "--disable-pipes" to use socketpairs
	instead of pipes for signalling to child threads. Pipes are
	always disabled on W32.
	Some code refactoring. -EG

Sat Feb  8 15:08:35 CET 2014
	Corrected some uses of 'int' vs. 'size_t'. -EG/CG

Wed Jan 22 09:44:33 CET 2014
	MHD_USE_DUAL_STACK in libmicrohttpd currently just *inhibits
	setting* the IPV6_V6ONLY socket option, but per Microsoft's
	documentation the default on Windows is that this is enabled, thus
	MHD_USE_DUAL_STACK will not work (since it leaves the
	default). libmicrohttpd should probably just unconditionally set
	IPV6_V6ONLY to the desired value when the option is available. -LJ

Wed Jan  1 21:38:18 CET 2014
	Allow Keep-Alive with HTTP 1.0 (if explicitly requested),
	and automatically set "Connection: Keep-Alive" in response
	in this case as well. -CG

Tue Dec 24 12:27:39 CET 2013
	Adding explicit annotations to hide symbols that are not for
	export in the C code (gcc 4.0 or higher only). -CG

Sun Dec 22 14:54:30 CET 2013
	Adding a few lines to avoid warnings from picky compilers. -CG

Sat Dec 21 17:26:08 CET 2013
	Fixed an issue with a missing argument in the postexample.
	Fixed issue with bogus offset increment involving sendfile
	on GNU/Linux.  Adding support for SNI.
	Releasing 0.9.33. -CG

Mon Dec  9 21:41:57 CET 2013
	Fix for per-worker daemon pipes enabled with
	MHD_USE_SUSPEND_RESUME that were not closed in
	MHD_stop_daemon. -MH

Sat Dec  7 00:44:49 CET 2013
	Fixing warnings and build issue if --disable-https is given
	to configure. -CG

Tue Dec  3 21:25:56 CET 2013
	Security fix: do not read past 0-terminator when unescaping
	strings (thanks to Florian Weimer for reporting).
	Releasing 0.9.32. -CG

Tue Dec  3 21:05:38 CET 2013
	Signaling n times for shutdown works, but for resume we need to
	wake up the correct daemon. Even if we signal n times in that
	case also, there's no guarantee that some daemon can't run
	through its select loop more than once before the daemon we want
	to wake up gets a chance to read.  Thus we need a signal pipe
	per thread in the thread pool IF MHD_suspend_connection is used.
	This introduces a new flag MHD_USE_SUSPEND_RESUME to add those
	additional pipes and only allow MHD_suspend_connection to be
	used in conjunction with this flag.

	Also, as MHD_resume_connection() will be called on a non-daemon
	thread, but none of the queue insert/delete calls are thread safe,
	we need to be concerned about (a) corrupting the queue, and (b)
	having to add mutex protection around every access to the queues,
	including loops through timer queues, etc. This wasn't a problem
	before adding resume; even suspend should be safe since it happens
	in a callback from the daemon.

	I think it's easier to (a) have MHD_suspend_connection() move the
	connection to a suspended queue, (b) have MHD_resume_connection()
	mark the connection as resuming, and then (c) do all the actual
	queue manipulations in MHD_select (poll, epoll, etc.) to move the
	resumed connections back to their normal queues, in response to
	the wake up. The changes are simpler & cleaner. There is a cost to
	the basic select loop that is avoided by making suspend/resume a
	startup option. The per-worker pipes can then also be enabled only
	with that option set. -MH

Fri Nov 29 20:17:03 CET 2013
	Eliminating theoretical stack overflow by limiting length
	of URIs in authentication headers to 32k (only applicable
	if the application explicitly raised the memory limits,
	and only applies to MHD_digest_auth_check). Issue was
	reported by Florian Weimer. -CG

Tue Nov 26 01:26:15 CET 2013
	Fix race on shutdown signal with thread pool on non-Linux
	systems by signalling n times for n threads. -CG

Sun Nov 24 13:41:15 CET 2013
	Introduce state to mark connections in suspended state (with
	epoll); add missing locking operations in MHD_suspend_connection.
	Fix definition of MHD_TLS_CONNECTION_INIT.  -MH/JC

Wed Oct 30 09:34:20 CET 2013
	Fixing issue in PostProcessor when getting partial boundary
	at the beginning, expanding test suite. -CG

Sun Oct 27 15:19:44 CET 2013
	Implementing faster processing of upload data in multipart
	encoding (thanks to performance analysis by Adam Homolya). -CG

Thu Oct 24 10:40:03 CEST 2013
	Adding support for connection flow control via
	MHD_suspend_connection and MHD_resume_connection. -CG

Sat Oct 19 16:40:32 CEST 2013
	Releasing libmicrohttpd 0.9.31. -CG

Mon Sep 23 20:24:48 CEST 2013
	Fixing build issues on OS X with CLOCK_MONOTONIC not being
	implemented on OS X. -CG

Mon Sep 23 14:15:00 CEST 2013
	Make libmicrohttpd play nicely with upcoming libgcrypt 1.6.0. -CG

Fri Sep 20 17:01:37 CEST 2013
	Improved configure checks for cURL. -CG

Wed Sep 18 18:29:24 CEST 2013
	Signal connection termination as OK (and not as ERROR) if the
	stream was terminated by the callback returning
	MHD_CONTENT_READER_END_OF_STREAM. Also, release response
	mutex before calling the termination callback, to avoid
	possible deadlock if the client destroys the response in
	the termination callback (due to non-recursiveness of the
	lock). -CG

Wed Sep 18 14:31:35 CEST 2013
	Adding #define MHD_HTTP_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN. -CG

Tue Sep 17 21:32:47 CEST 2013
	Also pass MHD connection handle in URI log callback. -CG

Fri Sep  6 10:00:44 CEST 2013
	Improved check for proper OpenSSL version for
	libmicrospdy. -CG

Wed Sep  4 17:23:15 CEST 2013
	Set IPV6_V6ONLY socket option correctly when IPv6 is
	enabled (MHD_USE_IPv6) but not dual stack
	(MHD_USE_DUAL_STACK) -MW

Mon Sep  2 22:59:45 CEST 2013
	Fix use-after-free in epoll()-mode on read error.
	Releasing libmicrohttpd 0.9.30. -CG

Sun Sep  1 21:55:53 CEST 2013
	Fixing build issues on FreeBSD. -CG

Fri Aug 30 13:53:04 CEST 2013
	Started to implement #3008 (RFC 2616, section 8.1.4
	says HTTP server SHOULD terminate connection if the
	client closes it for writing via TCP FIN, so we should
	continue to try to read and react differently
	if recv() returns zero). -CG

Wed Aug 28 18:40:47 CEST 2013
	Fix #3007 (build issue if messages are disabled). -CG

Tue Aug 27 18:39:08 CEST 2013
	Fix build issue if SOCK_NONBLOCK/EPOLL_CLOEXEC are not
	defined (as is the case on older glibc versions). -CG

Fri Aug 23 14:28:02 CEST 2013
	Releasing libmicrohttpd 0.9.29. -CG

Mon Aug 12 23:51:18 CEST 2013
	Updated manual, documenting W32 select/shutdown issue. -CG

Sat Aug 10 21:01:18 CEST 2013
	Fixed #2983. -CG

Sat Aug 10 20:39:27 CEST 2013
	Use 'errno' to indicate why 'MHD_add_connection' failed
	(#2984). -CG

Sat Aug 10 17:31:31 CEST 2013
	Disable use of 'shutdown' on W32 always as winsock
	doesn't properly behave with half-closed connections
	(see http://www.chilkatsoft.com/p/p_299.asp). -CG/LRN

Thu Aug  8 07:55:07 CEST 2013
	Fixing issue with pipelining not working as desired. -CG

Wed Aug  7 08:17:40 CEST 2013
	Removing dependency on liberty (on W32). -MC

Fri Aug  2 20:55:47 CEST 2013
	Fix HTTP 1.1 compliance with respect to not returning
	content-length headers for successful "CONNECT" requests.
	Note that for unsuccessful "CONNECT" requests with an
	empty response body, users must now explicitly set the
	content-length header. -CG

Sun Jul 28 16:35:17 CEST 2013
	Fixing build issue (missing #ifdef) in conjunction with
	--disable-messages. -blueness

Sat Jul 20 12:35:40 CEST 2013
	Fixing combination of MHD_USE_SSL and MHD_USE_EPOLL_LINUX_ONLY. -CG

Fri Jul 19 09:57:27 CEST 2013
	Fix issue where connections were not cleaned up when
	'MHD_run_from_select' was used.  Adding experimental
	TURBO mode.
	Releasing libmicrohttpd 0.9.28. -CG

Sun Jul 14 19:57:56 CEST 2013
	Removing 'shutdown' calls that happen just before close or
	that are for read-only and for a client that has already
	stopped sending anyway (thus reducing number of system calls
	slightly). -CG

Sun Jul 14 19:37:37 CEST 2013
	Name MHD worker threads on glibc >= 2.12. -,L4X[o](B

Fri Jul  5 12:05:01 CEST 2013
	Added MHD_OPTION_CONNECTION_MEMORY_INCREMENT to allow users
	to specify a custom value for incrementing read buffer
	sizes (#2899). -MH

Fri Jun 28 14:05:15 CEST 2013
	If we shutdown connection for reading on POST due to error,
	really do not process further requests even if we already
	read the next request from the connection.  Furthermore, do
	not shutdown connections for reading on GET/HEAD/etc. just
	because	the application queued a response immediately ---
	reserve that behavior for PUT/POST. -CG

Tue Jun 25 15:08:30 CEST 2013
	Added option 'MHD_USE_DUAL_STACK' to support a single
	daemon for IPv4 and IPv6 without the application having
	to do the binding. -CG

Mon Jun 24 22:33:34 CEST 2013
	Finished integration with epoll, including benchmarking and
	documentation. -CG

Sun Jun 23 15:28:13 CEST 2013
	Added option 'MHD_USE_PIPE_FOR_SHUTDOWN' to cleanly support
	'MHD_quiesce_daemon' with thread pools and per-connection
	threads (we then need a pipe for shutdown, but if
	'MHD_quiesce_daemon' is not used, we do not want to
	require the use of a pipe; introducing the pipe after
	the threads have been started can also fail, so the
	application needs to tell us early on). -CG

Sat Jun 22 20:24:17 CEST 2013
	Removed locking calls for thread modes that do not need them.
	Reorganized way to obtain connection's event loop state.
	Added sorted XDLL for connections with default timeout to
	avoid having to loop over all connections to determine current
	timeout (custom per-connection timeouts are in another list
	which is iterated each time). -CG

Fri Jun 21 20:55:48 CEST 2013
	Preparing build system and tests for epoll support. -CG

Tue May 21 14:34:36 CEST 2013
	Improving configure tests for OpenSSL and spdylay to
	avoid build errors in libmicrospdy code if those libraries
	are not present. -CG

Mon May 20 12:29:35 CEST 2013
	Added MHD_CONNECTION_INFO_CONNECTION_FD to allow clients
	direct access to connection socket; useful for COMET
	applications that need to disable NAGLE (#2886). -CG

Mon May 15 12:49:01 CEST 2013
	Fixing #2859. -CG

Sun May  5 21:44:08 CEST 2013
	Merged libmicrospdy code with libmicrohttpd build system
	(no major changes to libmicrospdy itself yet). -CG

Sun May  5 20:13:59 CEST 2013
	Improved documentation and code style a bit.
	Releasing libmicrohttpd 0.9.27. -CG

Thu Apr 25 13:08:10 CEST 2013
	Added 'MHD_quiesce_daemon' to allow application to stop
	processing new incoming connections while finishing
	ongoing requests. -CG

Sun Mar 31 23:17:13 CEST 2013
	Added MHD demonstration code 'src/examples/demo.c'. -CG

Sun Mar 31 20:27:48 CEST 2013
	Adding new API call 'MHD_run_from_select' to allow programs
	running in 'external select mode' to reduce the number of
	'select' calls by a factor of two. -CG

Sun Mar 31 20:03:48 CEST 2013
	Performance improvements, updated documentation.
	Make better use of available memory pool memory for
	reading (especially important for large POST uploads);
	improve post processor speed by internally adjusting the
	buffer size by 4 bytes to ensure "round" IO sizes given
	a "round" post processor buffer size argument.  Note
	that applications that previously added 4 bytes to the
	post processor buffer size might now perform worse.
	Using the new 'demo' example, POST upload speed
	increased from ~90 MB/s to ~120 MB/s for a large file
	(note that the improvement comes from better aligned
	disk IO; without disk IO, the speed was (and remains)
	at ~1500 MB/s on this system). -CG

Fri Mar 29 16:44:29 CET 2013
	Renaming testcases to consistently begin with test_;
	Changing build system to build examples in doc/.
	Releasing libmicrohttpd 0.9.26. -CG

Thu Mar  7 10:13:08 CET 2013
	Fix bug in postprocessor URL parser (#2818). -jgresula

Mon Mar  4 13:45:35 CET 2013
	Fix dropping of SSL connections if uptime is less than
        MHD_OPTION_CONNECTION_TIMEOUT due to integer underflow (#2802). -greed

Fri Mar  1 01:11:57 CET 2013
	Fully initialize cleanup mutex struct for each thread (#2803). -Ulion

Wed Feb  6 01:51:52 CET 2013
	Releasing libmicrohttpd 0.9.25. -CG

Fri Feb  1 10:19:44 CET 2013
	Handle case where POST data contains "key=" without value
	at the end and is not new-line terminated by invoking the
	callback with the "key" during MHD_destroy_post_processor (#2733). -CG

Wed Jan 30 13:09:30 CET 2013
	Adding more 'const' to allow keeping of reason phrases in ROM.
	(see mailinglist). -CG/MV

Tue Jan 29 21:27:56 CET 2013
	Make code work with PlibC 0.1.7 (which removed plibc_init_utf8).
	Only relevant for W32. Fixes #2734. -CG

Sat Jan 26 21:26:48 CET 2013
	Fixing regression introduced Jan 6 (test on data_size instead
	of total_size. -CG

Fri Jan 11 23:21:55 CET 2013
	Also return MHD_YES from MHD_destroy_post_processor if
	we did not get '\r\n' in the upload. -CG

Sun Jan  6 21:10:13 CET 2013
	Enable use of "MHD_create_response_from_callback" with
	body size of zero. -CG

Tue Dec 25 16:16:30 CET 2012
	Releasing libmicrohttpd 0.9.24. -CG

Tue Dec 18 21:18:11 CET 2012
	Given both 'chunked' encoding and 'content-length',
	ignore the 'content-length' header as per RFC. -ES

Thu Dec  6 10:14:44 CET 2012
	Force adding "Connection: close" header to response if
	client asked for connection to be closed (so far, we
	did close the connection, but did not send the
	"Connection: close" header explicitly, which some clients
	seem to dislike. (See discussion on mailinglist).
	Also, if there is already a transfer-encoding other
	than 'chunked' set by the application, we also now close
	the connection if the response is of unknown size. -CG

Wed Dec  5 19:22:26 CET 2012
	Fixing parameter loss of POST parameters with IE8 and Chrome
	in the PostProcessor as the code failed to properly handle
	partial data. -MM

Fri Nov  9 21:36:46 CET 2012
	Releasing libmicrohttpd 0.9.23. -CG

Thu Nov  8 22:32:59 CET 2012
	Ship our own version of tsearch and friends if not provided by platform,
	so that MHD works nicely on Android. -JJ

Mon Oct 22 13:05:01 CEST 2012
	Immediately do a second read if we get a full buffer from
	TLS as there might be more data in the TLS buffers even if
	there is no activity on the socket. -CG

Tue Oct 16 01:33:55 CEST 2012
	Consistently use "#ifdef" and "#ifndef" WINDOWS, and not
	sometimes "#if". -CG

Sat Sep  1 20:51:21 CEST 2012
	Releasing libmicrohttpd 0.9.22. -CG

Sat Sep  1 20:38:35 CEST 2012
	Adding configure option to allow selecting support for basic
	and digest authentication separately (#2525). -CG

Thu Aug 30 21:12:56 CEST 2012
	Fixing URI argument parsing when string contained keys without
	equals sign (i.e. '&bar&') in the middle of the argument (#2531).
	Also replacing 'strstr' with more efficient 'strchr' when
	possible. -CG

Tue Aug 21 14:36:17 CEST 2012
	Use "int" instead of "enum X" in 'va_arg' calls to be nice to
	compilers that use 'short' (i.e. 8 or 16 bit) enums but pass
	enums still as "int" in varargs. (See discussion on mailinglist). -CG/MV

Tue Aug 21 14:31:54 CEST 2012
	Reduce default size in post processor buffer (for small systems;
	performance impact on large systems should be minimal). -CG/MV

Thu Jul 19 21:48:42 CEST 2012
	Releasing libmicrohttpd 0.9.21. -CG

Thu Jul 19 11:34:50 CEST 2012
	Consistently use 'panic' function instead of ever directly
	calling 'abort ()'.  Eliminating unused mutex in SSL mode.
	Removing check in testcases that fails depending on which
	version of gnuTLS is involved. -CG

Tue Jul 17 23:50:43 CEST 2012
	Stylistic code clean up.  Allowing lookup up of trailing values
	without keys using "MHD_lookup_connection_value" with a key of NULL
	(thus achieving consistency with the existing iterator API). -CG

Tue Jul 17 22:37:05 CEST 2012
	Adding experimental (!) code for MHD operation without listen socket. -CG

Tue Jul 17 22:15:57 CEST 2012
	Making sendfile test pass again on non-W32 systems. -CG

Mon Jul  9 13:43:35 CEST 2012
	Misc changes to allow testcases to pass on W32. -LRN

Sun Jul  8 15:05:31 CEST 2012
	Misc changes to fix build on W32. -LRN

Fri Jun 22 11:31:25 CEST 2012
	Make sure sockets opened by MHD are non-inheritable by default (#2414). -CG

Tue Jun 19 19:44:53 CEST 2012
	Change various uses of time(NULL) to new MHD_monotonic_time() function to
	make timeouts immune to the system real time clock changing. -MC

Tue Jun 12 21:35:00 CEST 2012
	Adding 451 status code. -CG

Thu May 31 13:33:45 CEST 2012
	Releasing 0.9.20. -CG

Tue May 29 13:55:03 CEST 2012
	Fixed some testcase build issues with disabled post processor. -CG

Tue May 29 13:45:15 CEST 2012
	Fixing bug where MHD failed to call connection termination callback
	if a connection either was closed due to read errors or if MHD
	was terminated with certain threading modes.  Added new
	termination code MHD_REQUEST_TERMINATED_READ_ERROR for the
	read-termination cause. -CG

Thu Mar 15 23:47:53 CET 2012
	Eliminating code clone in tls connection read/write handlers. -CG

Fri Mar  2 23:44:56 CET 2012
	Making sure that MHD_get_connection_values iterates over the
	headers in the order in which they were received. -CG

Wed Feb  1 09:39:12 CET 2012
	Fixed compilation problem on MinGW. -BS

Tue Jan 31 17:50:24 CET 2012
	Releasing 0.9.19. -CG

Mon Jan 30 20:02:34 CET 2012
	Fixed handling of garbage prior to first multipart boundary
	(#2126). -woof

Fri Jan 27 11:00:43 CET 2012
	Fixed postprocessor failure for applications that enclosed boundary
	in quotes (#2120). -woof

Tue Jan 24 16:07:53 CET 2012
	Added configure check for sin_len in 'struct sockaddr' and adding
	code to initialize this field if it exists now. -CG

Mon Jan 23 14:02:26 CET 2012
	Fixed double-free if specified cipher was not valid (during
	MHD_daemon_start).  Releasing 0.9.18. -CG

Thu Jan 19 22:11:12 CET 2012
	Switch to non-blocking sockets for all systems but Cygwin
	(we already used non-blocking sockets for GNU/Linux); also
	use non-blocking sockets on Cygwin for HTTPS as this is
	required to avoid DoS-by-partial-record via gnutls.  On
	Cygwin, #1824 implies that we need to use blocking sockets
	for HTTP on Cygwin for now. -CG

Thu Jan 19 17:46:05 CET 2012
	Fixing use of uninitialized 'earliest_deadline' variable in
	MHD_get_timeout which can lead to returning an incorrect
	(too early) timeout (#2085). -tclaveirole

Thu Jan 19 13:31:27 CET 2012
	Fixing digest authentication for GET requests with URI arguments
	(#2059). -CG

Sat Jan  7 17:30:48 CET 2012
	Digest authentication expects nonce count in base 16, not base 10
	(#2061). -tclaveirole

Thu Jan  5 22:01:37 CET 2012
	Partial fix for #2059, digest authentication with GET arguments. -CG

Thu Dec  1 15:22:57 CET 2011
	Updated authorization_example.c to actually demonstrate the current
	MHD API. -SG

Mon Nov 21 18:51:30 CET 2011
	Added option to suppress generation of the 'Date:' header to be
	used on embedded systems without RTC.  Documented the new option
	and the configure options. -CG

Sat Nov 19 20:08:40 CET 2011
	Releasing 0.9.17. -CG

Fri Nov 18 20:17:22 CET 2011
	Fixing return value of MHD_get_timeout if timeouts are not in use.
        (#1914). -rboulton

Sun Nov 13 13:34:29 CET 2011
	Trying to fix accidental addition of a "Connection: close" footer
	under certain (rare) circumstances. -CG

Fri Nov  4 10:03:00 CET 2011
	Small updates to the tutorial.
	Releasing 0.9.16. -CG

Thu Nov  3 10:14:59 CET 2011
	shutdown(RDWR) fails on OS X after shutdown(RD), so only use
	shutdown(WR) if we already closed the socket for reading (otherwise
	OS X might not do shutdown (WR) at all). -CG

Tue Nov  1 18:51:50 CET 2011
	Force adding of 'Connection: close' to the header if we (for whatever
	reason) are shutting down the socket for reading (see also
	#1760). -CG

Thu Oct 27 14:16:34 CEST 2011
	Treat EAGAIN the same way as EINTR (helps on W32). -LRN

Wed Oct 12 10:40:12 CEST 2011
	Made sockets blocking again for non-Linux platforms as non-blocking
	sockets cause problems (#1824) on Cygwin but offer better performance
	on Linux (see change on August 11 2011). -CG/pross

Fri Oct  7 19:50:07 CEST 2011
 	Fixed problems with testcases on W32. -LRN

Fri Sep 30 17:56:36 CEST 2011
	Fixed MHD_CONNECTION_OPTION_TIMEOUT for HTTPS (#1811). -CG

Wed Sep 28 08:37:55 CEST 2011
	Releasing libmicrohttpd 0.9.15. -CG

Tue Sep 27 13:07:36 CEST 2011
	Added ability to access URL arguments of the form 'url?foo' (without
	'=').  Added testcase and updated documentation accordingly. -CG

Mon Sep 26 21:24:00 CEST 2011
	Only run response cleanup testcase if curl binary was found by
	configure. -CG

Wed Sep 21 09:53:18 CEST 2011
	Reverting to using pipes for signalling select on non-Linux
	platforms where shutdown-on-listen-sockets does not work. -WB/CG

Mon Sep 19 14:06:30 CEST 2011
	Fixing problem introduced with prompt response cleanup code. -CG

Wed Sep 14 13:43:26 CEST 2011
	Fixing minor memory leak if daemon with HTTPS support failed to
	initialize (#1766). -CG

Tue Sep 13 09:47:58 CEST 2011
	Try to release responses more promptly upon connection termination. -CG

Mon Sep 12 10:20:28 CEST 2011
	Releasing libmicrohttpd 0.9.14. -CG

Mon Sep 12 10:05:36 CEST 2011
	Added new function to allow setting of a custom timeout value
	for an individual connection (the MHD_set_connection_option is
	more generic, but this is currently the only use). -CG

Sat Sep 10 07:30:12 CEST 2011
	Documenting that MHD_CONNECTION_INFO_GNUTLS_CLIENT_CERT is not
	implemented and will not be implemented, and what to use instead. -CG

Fri Sep  9 13:42:20 CEST 2011
	Added testcase to demonstrate that response cleanup calling is
	working. No bug was found. -CG

Thu Aug 18 11:05:16 CEST 2011
	Fixed bug with wrong state transition if callback returned
	MHD_CONTENT_READER_END_OF_STREAM causing spurious extra callbacks
	to the handler (thanks to Jan Seeger for pointing it out). -CG/JS

Thu Aug 11 11:40:03 CEST 2011
	Changing sockets to be non-blocking as suggested by Eivind Sarto
	on the mailinglist. -CG

Mon Jul 25 16:13:15 CEST 2011
	Added a logo. -CG

Sat Jul 16 22:42:10 CEST 2011
	Change type of nonce to 'unsigned long int' to match return type
	from 'strtoul'.  Fixes ERANGE check which would have previously
	failed. -CG

Wed Jul 13 09:26:17 CEST 2011
	Fixing HTTP error status strings for certain high-numbered status codes.
	Added support for some more (non-standard) status codes.
	Releasing libmicrohttpd 0.9.13. -CG

Thu Jul  7 10:24:20 CEST 2011
	Adding performance measurements. -CG

Thu Jun 23 14:21:13 CEST 2011
	Releasing libmicrohttpd 0.9.12. -CG

Wed Jun 22 14:32:23 CEST 2011
	Force closing connection if either the client asked it or
	if the response contains 'Connection: close' (so far,
	only the client's request was considered). -CG/RV

Wed Jun 22 10:37:35 CEST 2011
	Removing listen socket from poll/select sets in
	MHD_USE_THREAD_PER_CONNECTION mode; using 'shutdown'
	on connection sockets to signal termination instead. -CG

Wed Jun 22 10:25:13 CEST 2011
	Eliminate unnecessary (and badly synchronized) calls to
	MHD_get_timeout in MHD_USE_THREAD_PER_CONNECTION mode.
	Document that this is not acceptable. -CG

Tue Jun 21 13:54:59 CEST 2011
	Fixing tiny memory leak in SSL code from 'gnutls_priority_init'.
	Fixing data race between code doing connection shutdown and
	connection cleanup.
	Changing code to reduce connection cleanup cost from O(n) to O(1).
	Cleaning up logging code around 'connection_close_error'. -CG

Sat Jun 11 13:05:12 CEST 2011
	Replacing use of sscanf by strtoul (#1688). -CG/bplant

Fri Jun  3 15:26:42 CEST 2011
	Adding MHD_CONNECTION_INFO_DAEMON to obtain MHD_Daemon
	responsible for a given connection. -CG

Wed May 25 14:23:20 CEST 2011
	Trying to fix stutter problem on timeout described by
	David Myers on the mailinglist (5/10/2011). -CG

Fri May 20 22:11:55 CEST 2011
	Fixed bug in testcase setup code causing crashes in
	tls_session_timeout_test on some systems.
	Releasing libmicrohttpd 0.9.11. -CG

Fri May 20 19:34:59 CEST 2011
	Fixed bug in parsing multipart/form-data with post processor where
	the code failed to add a 0-terminator in the correct position. -PP

Thu May 12 14:40:46 CEST 2011
	Fixed bug where if multiple HTTP request messages are piped in at once,
	microhttpd would call the handler with the wrong upload_data_size. -HZM

Thu May 12 14:40:08 CEST 2011
	Documented possible issue with off_t being sometimes
	32-bit and sometimes 64-bit depending on #includes. -CG

Sun May  8 21:52:47 CEST 2011
	Allow MHD_SIZE_UNKNOWN to be used in conjunction with
	MHD_create_response_from_fd (fixing #1679). -TG

Wed Apr 27 16:11:18 CEST 2011
	Releasing libmicrohttpd 0.9.10. -CG

Fri Apr  8 11:40:35 CEST 2011
	Workaround for cygwin poll brokenness. -TS

Sun Apr  3 13:56:52 CEST 2011
	Fixing compile error on OS X. -CG

Wed Mar 30 12:56:09 CEST 2011
	Initialize tv_usec in MHD_USE_THREAD_PER_CONNECTION with select
	and per-connection timeout. -CG

Tue Mar 29 14:15:13 CEST 2011
	Releasing libmicrohttpd 0.9.9. -CG

Tue Mar 29 14:11:19 CEST 2011
	Fixed call to mmap for memory pool, extended testcase to cover
	POLL. -CG

Wed Mar 23 23:24:25 CET 2011
	Do not use POLLIN when we only care about POLLHUP (significantly
	improves performance when using MHD_USE_THREAD_PER_CONNECTION
	in combination with MHD_USE_POLL). -ES

Sun Mar 20 09:16:53 CET 2011
	Fixing race when using MHD_USE_THREAD_PER_CONNECTION in combination
	with MHD_USE_POLL. -CG

Fri Mar 18 13:23:47 CET 2011
	Removing MSG_DONTWAIT which should not be needed and was presumably
	causing problems with EAGAIN under certain circumstances. -ES

Fri Mar 11 22:25:29 CET 2011
	Fixing bug in MHD_create_response_from_fd_at_offset with non-zero offsets. -ES

Sat Mar  5 22:00:36 CET 2011
	Do not use POLLRDHUP, which causes build errors on OS X / OpenSolaris
	(#1667). -CG

Fri Mar  4 10:24:04 CET 2011
	Added new API to allow MHD server to initiate connection to
	client (special use-case for servers behind NAT), thereby
	addressing #1661 (externally created connections).
	Releasing libmicrohttpd 0.9.8. -CG

Fri Mar  4 10:07:18 CET 2011
	Avoid using a pipe for signalling as well, just use server
	socket shutdown (also for thread-per-connection). -CG

Thu Mar  3 21:42:47 CET 2011
	Fixing issue where Base64 decode fails when char is defined
        as unsigned char  (Mantis 1666). -CG/tmayer

Tue Mar  1 13:58:04 CET 2011
	Allow use of 'poll' in combination with the external select mode.
	Avoid using pthread signals (SIGALRM), use pipe instead.
	Corrected timeout calculation (s vs. ms). -CG

Wed Feb 23 14:21:44 CET 2011
	Removing useless code pointed out by Eivind Sarto. -CG

Fri Feb 18 11:03:59 CET 2011
	Handle large (>2 GB) file transfers with sendfile on 32-bit
	systems better; handle odd sendfile failures by libc/kernel
	by falling back to standard 'SEND'. -CG

Sun Feb 13 10:52:29 CET 2011
	Handle gnutls receive error(s) for interrupted SSL
	connections better. -MS
	Releasing libmicrohttpd 0.9.7. -CG

Fri Feb 11 10:15:38 CET 2011
	Fixing parameter ordering in documentation (#1659). -wellska

Thu Jan 27 10:51:39 CET 2011
	Disable 'EXTRA_CHECKS's by default as suggested in #1652
 	(I guess it is time). -CG/timn

Thu Jan 27 10:48:55 CET 2011
	Removing bogus assertion in basic authentication code (#1651). -CG/timn

Tue Jan 25 14:10:45 CET 2011
	Releasing libmicrohttpd 0.9.6. -CG

Mon Jan 24 16:36:35 CET 2011
	Fixing compilation error if DAUTH_SUPPORT was 0 (#1646). -CG/bplant

Tue Jan 18 23:58:09 CET 2011
	Fixing hash calculation in digest auth; old function had
	collisions causing the browser to challenge users for
	authentication too often. -CG/AW

Fri Jan 14 19:19:45 CET 2011
	Removing dead code, adding missing new symbols to export list.
	Fixed two missing NULL checks after malloc operations. -CG

Mon Jan 10 14:07:33 CET 2011
	Releasing libmicrohttpd 0.9.5. -CG

Wed Jan  5 15:20:11 CET 2011
	Fixing double-locking on non-Linux platforms when using
	MHD_create_response_from_fd (#1639). -CG
	Avoid use of strndup for better portability (#1636). -CG

Tue Jan  4 13:07:21 CET 2011
	Added MHD_create_response_from_buffer, deprecating
	MHD_create_response_from_data.  Deprecating
	MHD_create_response_from_fd as well. -CG

Sun Dec 26 00:02:15 CET 2010
	Releasing libmicrohttpd 0.9.4. -CG

Sat Dec 25 21:57:14 CET 2010
	Adding support for basic authentication.
	Documented how to obtain client SSL certificates in tutorial. -MS

Thu Dec 23 15:40:36 CET 2010
	Increasing nonce length to 128 to support digest authentication
	with Opera (see #1633).

Mon Dec 20 21:22:57 CET 2010
	Added macro MHD_LONG_LONG to allow change of MHD's "long long" use
	to some other type on platforms that do not support "long long"
	(Mantis #1631). -CG/bplant

Sun Dec 19 19:54:15 CET 2010
	Added 'MHD_create_response_from_fd_at_offset'. -CG

Sun Dec 19 15:16:16 CET 2010
	Fixing --enable and --disable configure options to behave properly. -CG

Sun Dec 19 13:46:52 CET 2010
	Added option to specify size of stacks for threads created by MHD. -CG

Tue Nov 23 09:41:00 CET 2010
	Releasing libmicrohttpd 0.9.3. -CG

Thu Nov 18 23:10:36 CET 2010
	Fixing #1619 (testcases not working with NSS on Fedora). -CG/timn

Thu Nov 18 22:55:58 CET 2010
	Fixing #1621 (socket not closed under certain circumstances). -CG/jaredc

Wed Nov 17 12:16:53 CET 2010
	Allowing signalling of errors in generating chunked responses to
	clients (by closing connectins) using the new
	MHD_CONTENT_READER_END_WITH_ERROR ((size_t)-2) return value.  Also
	introducing MHD_CONTENT_READER_END_OF_STREAM constant instead
	of (size_t) -1 / SIZE_MAX.

Sun Nov 14 20:45:45 CET 2010
	Adding API call to generate HTTP footers in response. -CG

Sat Oct 16 12:38:43 CEST 2010
	Releasing libmicrohttpd 0.9.2. -CG

Tue Oct 12 15:41:51 CEST 2010
	Fixed issue with data received via SSL being delayed in the
	GNUtls buffer if sender stopped transmitting (but did not close
	the connection) and MHD buffer size was smaller than last fragment,
	resulting in possibly significantly delayed processing of
	incoming data.  -CG

Wed Sep 22 09:48:59 CEST 2010
	Changed port argument from 'unsigned short' to 'uint16_t'.
	Removed dead code when compiling with messages enabled.
	Minimal unrelated code cleanup. -CG

Tue Sep 21 15:12:41 CEST 2010
	Use "size_t" for buffer size instead of "int". -CG

Sat Sep 18 07:16:30 CEST 2010
	Adding support for SHOUTcast. -CG

Wed Sep 15 09:33:46 CEST 2010
	Fixed double-free. -CG/ES

Fri Sep 10 14:47:11 CEST 2010
	Releasing libmicrohttpd 0.9.1. -CG

Fri Sep 10 14:29:37 CEST 2010
	Adding proper nonce counter checking for digest authentication. -CG/AA

Sat Sep  4 21:55:52 CEST 2010
	Digest authentication now seems to be working. -CG/AA

Wed Sep  1 13:59:16 CEST 2010
	Added ability to specify external unescape function.
	"microhttpd.h" now includes the right headers for GNU/Linux
	systems unless MHD_PLATFORM_H is defined (in which case it
	is assumed that the right headers were already determined by
	some configure-like process). -CG

Tue Aug 31 15:39:25 CEST 2010
	Fixed bug with missing call to response cleanup in case of
	connection handling error (for example, after getting a SIGPIPE). -CG

Tue Aug 24 11:39:25 CEST 2010
	Fixed bug in handling EAGAIN from GnuTLS (caused
	needlessly dropped SSL connections). -CG

Sun Aug 22 16:49:13 CEST 2010
	Initial draft for digest authentication. -AA

Thu Aug 19 14:15:01 CEST 2010
	Changed code to enable error messages and HTTPS by default;
	added option to disable post processor API (use
	breaks binary compatibility, should only be done
	for embedded systems that require minimal footprint). -CG

Thu Aug 19 13:26:00 CEST 2010
	Patches for Windows to ease compilation trouble. -GT/CG

Sat Aug 14 15:43:30 CEST 2010
	Fixed small, largely hypothetical leaks.
	Reduced calls to strlen for header processing. -CG

Fri Aug  6 12:51:59 CEST 2010
	Fixing (small) memory leak on daemon-shutdown with
	SSL enabled. -CG/PG

Thu Aug  5 22:24:37 CEST 2010
	Fixing timeout bug on systems that think it's still
	1970 (can happen if system time not initialized). -CG

Mon Jul 26 10:46:57 CEST 2010
	Releasing libmicrohttpd 0.9.0. -CG

Sun Jul 25 14:57:47 CEST 2010
	Adding support for sendfile on Linux.  Adding support
	for systemd-style passing of an existing listen socket
	as an option.  IPv6 sockets now only bind to IPv6
	(if platform supports this). -CG

Sun Jul 25 11:10:45 CEST 2010
	Changed code to use external libgnutls code instead of
	the "fork".  Minor API changes for setting TLS options. -CG

Sun Jun 13 10:52:34 CEST 2010
	Cleaned up example code. -CG

Fri Apr 23 09:56:37 CEST 2010
	Do not return HTTP headers for requests without version
	numbers.  Do return HTTP version 1.0 if client requested
	HTTP version 1.1 (previously, we returned HTTP/1.1 even
	if the client specified HTTP/1.0).  -GM/CG

Sat Mar 13 09:41:01 CET 2010
	Releasing libmicrohttpd 0.4.6. -CG

Wed Mar 10 13:18:26 CET 2010
	Fixing bug in 100 CONTINUE replacement when handling POSTs
	(see report on mailinglist), with testcase. -CG/MC

Tue Feb 23 09:16:15 CET 2010
	Added configure check for endianness to define WORDS_BIGENDIAN
	which fixes SSL support on big endian architectures. -JA/CG

Sat Feb 20 10:01:09 CET 2010
	Added check for inconsistent options (MHD_OPTION_PROTOCOL_VERSION
	without MHD_USE_SSL) causing instant segfault. -JA/CG

Tue Feb  9 20:31:51 CET 2010
	Fixed issue with poll doing busy waiting. -BK/CG

Thu Jan 28 21:28:56 CET 2010
	Releasing libmicrohttpd 0.4.5. -CG

Thu Jan 28 20:35:48 CET 2010
	Make sure addresses returned by memory pool are
	aligned (fixes bus errors on Sparc). -CG

Thu Dec 17 20:26:52 CET 2009
	poll.h is not strictly required anymore. -ND

Fri Dec  4 13:17:50 CET 2009
	Adding MHD_OPTION_ARRAY. -CG

Mon Nov 16 14:41:26 CET 2009
	Fixed busy-loop in internal select mode for inactive
	clients with infinite connection timeout. -CG

Thu Nov 12 16:19:14 CET 2009
	Adding support for setting a custom error handler for
	fatal errors (previously, the implementation always
	called 'abort' in these cases). -CG/ND

Wed Nov 11 12:54:16 CET 2009
	Adding support for poll (alternative to select allowing
	for more than FD_SETSIZE parallel connections). -JM

Wed Oct 28 20:26:00 CET 2009
 	Releasing libmicrohttpd 0.4.4. -CG

Wed Oct 14 14:37:37 CEST 2009
	Fixing (rare) deadlock due to SELECT missing SIGALRM by
	making all SELECT calls block for at most 1s.  While this
	can in (rare) situations delay the shutdown by 1s, I think
	this is preferable (both performance and possibly portability-wise)
	over using a pipe for the signal. -CG

Sun Oct 11 14:57:29 CEST 2009
	Adding eCos license as an additional license for the
	non-HTTPS code of MHD. -CG

Sun Oct 11 11:24:27 CEST 2009
	Adding support for Symbian. -MR

Fri Oct  9 15:21:29 CEST 2009
	Check for error codes from pthread operations (to help with
	error diagnostics) and abort if something went wrong. -CG

Thu Oct  8 10:43:02 CEST 2009
	Added check for sockets being '< FD_SETSIZE' (just to be safe). -CG

Mon Oct  5 21:17:26 CEST 2009
	Adding "COOKIE" header string #defines. -CG

Mon Oct  5 08:29:06 CEST 2009
	Documenting default values. -CG

Fri Aug 28 22:56:47 CEST 2009
 	Releasing libmicrohttpd 0.4.3. -CG

Sun Aug 23 16:21:35 UTC 2009
	Allow MHD_get_daemon_info to return the daemon's listen socket.
	Includes a test case that uses this functionality to bind a server to
	an OS-assigned port, look the port up with getsockname, and curl it. -DR

Tue Aug  4 00:14:04 CEST 2009
	 Fixing double-call to read from content-reader callback for first
	 data segment (as reported by Alex on the mailinglist). -CG

Thu Jul 29 21:41:52 CEST 2009
 	 Fixed issue with the code not using the "block_size" argument
         given to MHD_create_response_from_callback causing inefficiencies
	 for values < 2048 and segmentation faults for values > 2048
	 (as reported by Andre Colomb on the mailinglist). -CG

Sun May 17 03:29:46 MDT 2009
 	 Releasing libmicrohttpd 0.4.2. -CG

Fri May 15 11:00:20 MDT 2009
	 Grow reserved read buffer more aggressively so that we are not
	 needlessly stuck reading only a handful of bytes in each iteration. -CG

Thu May 14 21:20:30 MDT 2009
	 Fixed issue where the "NOTIFY_COMPLETED" handler could be called
	 twice (if a socket error or timeout occurred for a pipelined
	 connection after successfully completing a request and before
	 the next request was successfully transmitted).  This could
	 confuse applications not expecting to see a connection "complete"
	 that they were never aware of in the first place. -CG

Mon May 11 13:01:16 MDT 2009
         Fixed issue where error code on timeout was "TERMINATED_WITH_ERROR"
         instead of "TERMINATED_TIMEOUT_REACHED". -CG

Wed Apr  1 21:33:05 CEST 2009
         Added MHD_get_version(). -ND

Wed Mar 18 22:59:07 MDT 2009
	 Releasing libmicrohttpd 0.4.1. -CG

Wed Mar 18 17:46:58 MDT 2009
	 Always RECV/SEND with MSG_DONTWAIT to (possibly) address
	 strange deadlock reported by Erik on the mailinglist ---
	 and/or issues with blocking read after select on GNU/Linux
	 (see select man page under bugs). -CG

Tue Mar 17 01:19:50 MDT 2009
	 Added support for thread-pools. -CG/RA

Mon Mar  2 23:44:08 MST 2009
	 Fixed problem with 64-bit upload and download sizes and
	 "-1" being used to indicate "unknown" by introducing
	 new 64-bit constant "MHD_SIZE_UNKNOWN". -CG/DC

Wed Feb 18 08:13:56 MST 2009
	 Added missing #include for build on arm-linux-uclibc. -CG/CC

Mon Feb 16 21:12:21 MST 2009
	 Moved MHD_get_connection_info so that it is always defined,
	 even if HTTPS support is not enabled. -CG

Sun Feb  8 21:15:30 MST 2009
	 Releasing libmicrohttpd 0.4.0. -CG

Thu Feb  5 22:43:45 MST 2009
	 Incompatible API change to allow 64-bit uploads and downloads.
	 Clients must use "uint64_t" for the "pos"
	 argument (MHD_ContentReaderCallback) and the "off"
	 argument (MHD_PostDataIterator) and the "size"
	 argument (MHD_create_response_from_callback) now.
	 Also, "unsigned int" was changed to "size_t" for
	 the "upload_data_size" argument (MHD_AccessHandlerCallback),
	 the argument to MHD_OPTION_CONNECTION_MEMORY_LIMIT,
	 the "block_size" argument (MHD_create_response_from_callback),
	 the "buffer_size" argument (MHD_create_post_processor) and
	 the "post_data_len" argument (MHD_post_process).  You may
	 need to #include <stdint.h> before <microhttpd.h> from now on. -CG

Thu Feb  5 20:21:08 MST 2009
	 Allow getting address information about the connecting
	 client after the accept call. -CG

Mon Feb  2 22:21:48 MST 2009
	 Fixed missing size adjustment for offsets for %-encoded
	 arguments processed by the post processor (Mantis #1447). -CG/SN

Fri Jan 23 16:57:21 MST 2009
	 Support charset specification (ignore) after content-type
	 when post-processing HTTP POST requests (Mantis #1443). -CG/SN

Fri Dec 26 23:08:04 MST 2008
	 Fixed broken check for identical connection address. -CG
	 Making cookie parser more RFC2109 compliant (handle
	 spaces around key, allow value to be optional). -CG

Sat Dec  6 18:36:17 MST 2008
	 Added configure option to disable checking for CURL support.
	 Added MHD_OPTION to allow specification of custom logger. -CG

Tue Nov 18 01:19:53 MST 2008
	 Removed support for untested and/or broken SSL features
	 and (largely useless) options. -CG

Sun Nov 16 16:54:54 MST 2008
	 Added option to get unparsed URI via callback.
	 Releasing GNU libmicrohttpd 0.4.0pre1. -CG

Sun Nov 16 02:48:14 MST 2008
	 Removed tons of dead code. -CG

Sat Nov 15 17:34:24 MST 2008
	 Added build support for code coverage analysis. -CG

Sat Nov 15 00:31:33 MST 2008
	 Removing (broken) support for HTTPS servers with
	 anonymous (aka "no") certificates as well as
	 various useless dead code. -CG

Sat Nov  8 02:18:42 MST 2008
	 Unset TCP_CORK at the end of transmitting a response
	 to improve performance (on systems where this is
	 supported). -MM

Tue Sep 30 16:48:08 MDT 2008
	 Make MHD useful to Cygwin users; detect IPv6 headers
	 in configure.

Sun Sep 28 14:57:46 MDT 2008
	 Unescape URIs (convert "%ef%e4%45" to "$BCf9q(B"). -CG

Wed Sep 10 22:43:59 MDT 2008
	 Releasing GNU libmicrohttpd 0.4.0pre0. -CG

Wed Sep 10 21:36:06 MDT 2008
	 Fixed data race on closing sockets during
	 shutdown (in one-thread-per-connection mode). -CG

Thu Sep  4 23:37:18 MDT 2008
	 Fixed some boundary issues with processing
	 chunked requests; removed memmove from a
	 number of spots, in favor of using an index into
	 the current buffer instead. -GS

Sun Aug 24 13:05:41 MDT 2008
	 Now handling clients returning 0 from response callback
	 as specified in the documentation (abort if internal
	 select is used, retry immediately if a thread per
	 connection is used). -CG

Sun Aug 24 12:44:43 MDT 2008
	 Added missing reason phrase. -SG

Sun Aug 24 10:33:22 MDT 2008
	 Fixed bug where MHD failed to transmit the response when
	 the client decided not to send "100 CONTINUE" during
	 a PUT/POST request. -CG

Wed Jul 16 18:54:03 MDT 2008
	 Fixed bug generating chunked responses with chunk sizes
	 greater than 0xFFFFFF (would cause protocol violations). -CG

Mon May 26 13:28:57 MDT 2008
	 Updated and improved documentation.
	 Releasing GNU libmicrohttpd 0.3.1. -CG

Fri May 23 16:54:41 MDT 2008
	 Fixed issue with postprocessor not handling URI-encoded
	 values of more than 1024 bytes correctly. -CG

Mon May  5 09:18:29 MDT 2008
	 Fixed date header (was off by 1900 years). -JP

Sun Apr 13 01:06:20 MDT 2008
	 Releasing GNU libmicrohttpd 0.3.0. -CG

Sat Apr 12 21:34:26 MDT 2008
	 Generate an internal server error if the programmer fails
	 to handle upload data correctly.  Tweaked testcases to
	 avoid running into the problem in the testcases.
	 Completed zzuf-based fuzzing testcases.  -CG

Sat Apr 12 15:14:05 MDT 2008
	 Restructured the code (curl-testcases and zzuf testcases
	 are now in different directories; code examples are in
	 src/examples/).
	 Fixed a problem (introduced in 0.2.3) with handling very
	 large requests (the code did not return proper error code).
	 If "--enable-messages" is specified, the code now includes
	 reasonable default HTML webpages for various built-in
	 errors (such as request too large and malformed requests).
	 Without that flag, the webpages returned will still be
	 empty.
	 Started to add zzuf-based fuzzing-testcases (these require
	 the zzuf and socat binaries to be installed). -CG

Fri Apr 11 20:20:34 MDT 2008
	 I hereby dub libmicrohttpd a GNU package. -Richard Stallman

Sat Mar 29 22:36:09 MDT 2008
	 Fixed bugs in handling of malformed HTTP requests
	 (causing either NULL dereferences or connections to
	 persist until time-out, if any). -CG

	 Updated and integrated TexInfo documentation. -CG

Tue Mar 25 13:40:53 MDT 2008
	 Prevent multi-part post-processor from going to error
	 state when the input buffer is full and current token
	 just changes processor state without consuming any data.
	 Also, the original implementation would not consume any
	 input in process_value_to_boundary if there is no new
	 line character in sight. -AS

	 Remove checks for request method after it finished writing
	 response footers as it's only _pipelined_ requests that
	 should not be allowed after POST or PUT requests.  Reusing
	 the existing connection is perfectly ok though.  And there
	 is no reliable way to detect pipelining on server side
	 anyway so it is the client's responsibility to not send new
	 data before it gets a response after a POST operation. -AS

	 Clarified license in man page. Releasing
         libmicrohttpd 0.2.3 -CG

Sat Mar 22 01:12:38 MDT 2008
	 Releasing libmicrohttpd 0.2.2. -CG

Mon Feb 25 19:13:53 MST 2008
	 Fixed a problem with sockets closed for reading ending up
	 in the read set under certain circumstances. -CG

Wed Jan 30 23:15:44 MST 2008
	 Added support for nested multiparts to post processor.
	 Made sure that MHD does not allow pipelining for methods
	 other than HEAD and GET (and of course still also only
	 allows it for http 1.1).  Releasing libmicrohttpd 0.2.1.  -CG

Mon Jan 21 11:59:46 MST 2008
	 Added option to limit number of concurrent connections
	 accepted from the same IP address. -CG

Fri Jan  4 16:02:08 MST 2008
	 Fix to properly close connection if application signals
	 problem handling the request. - AS

Wed Jan  2 16:41:05 MST 2008
	 Improvements and bugfixes to post processor implementation. - AS

Wed Dec 19 21:12:04 MST 2007
	 Implemented chunked (HTTP 1.1) downloads (including
	 sending of HTTP footers).  Also allowed queuing of
	 a response early to suppress the otherwise automatic
	 "100 CONTINUE" response.  Removed the mostly useless
	 "(un)register handler" methods from the API.  Changed
	 the internal implementation to use a finite state
	 machine (cleaner code, slightly less memory consumption).
	 Releasing libmicrohttpd 0.2.0. - CG

Sun Dec 16 03:24:13 MST 2007
	 Implemented handling of chunked (HTTP 1.1) uploads.
	 Note that the upload callback must be able to
	 process chunks in the size uploaded by the client,
	 MHD will not "join" small chunks into a big
	 contiguous block of memory (even if buffer space
	 would be available).  - CG

Wed Dec  5 21:39:35 MST 2007
	 Fixed race in multi-threaded server mode.
	 Fixed handling of POST data when receiving a
	 "Connection: close" header (#1296).
	 Releasing libmicrohttpd 0.1.2. - CG

Sat Nov 17 00:55:24 MST 2007
	 Fixed off-by-one in error message string matching.
	 Added code to avoid generating SIGPIPE on platforms
	 where this is possible (everywhere else, the main
	 application should install a handler for SIGPIPE).

Thu Oct 11 11:02:06 MDT 2007
	 Releasing libmicrohttpd 0.1.1. - CG

Thu Oct 11 10:09:12 MDT 2007
	 Fixing response to include HTTP status message. - EG

Thu Sep 27 10:19:46 MDT 2007
	 Fixing parsing of "%xx" in URLs with GET arguments. - eglaysher

Sun Sep  9 14:32:23 MDT 2007
	 Added option to compile debug/warning messages;
	 error messages are now disabled by default.
	 Modified linker option for GNU LD to not export
	 non-public symbols (further reduces binary size).
	 Releasing libmicrohttpd 0.1.0. - CG

Sat Sep  8 21:54:04 MDT 2007
	 Extended API to allow for incremental POST
	 processing.  The new API is binary-compatible
	 as long as the app does not handle POSTs, but
	 since that maybe the case, we're strictly speaking
	 breaking backwards compatibility (since url-encoded
	 POST data is no longer obtained the same way). - CG

Thu Aug 30 00:59:24 MDT 2007
	 Improving API to allow clients to associate state
         with a connection and to be notified about request
         termination (this is a binary-compatible change). - CG
	 Fixed compile errors under OS X. - HL

Sun Aug 26 03:11:46 MDT 2007
	 Added MHD_USE_PEDANTIC_CHECKS option which enforces
	 receiving a "Host:" header in HTTP 1.1 (and sends a
	 HTTP 400 status back if this is violated). - CG

Tue Aug 21 01:01:46 MDT 2007
	 Fixing assertion failure that occurred when a client
	 closed the connection after sending some data but
	 not the full headers. - CG

Sat Aug 18 03:06:09 MDT 2007
	 Check for out of memory when adding headers to
	 responses.  Check for NULL key when looking
	 for headers.   If a content reader callback
	 for a response returns zero (has no data yet),
	 do not possibly fall into busy waiting when
	 using external select (with internal selects
	 we have no choice).  - CG

Wed Aug 15 01:46:44 MDT 2007
	 Extending API to allow timeout of connections.
	 Changed API (MHD_create_response_from_callback) to
	 allow user to specify IO buffer size.
	 Improved error handling.
         Released libmicrohttpd 0.0.3. - CG

Tue Aug 14 19:45:49 MDT 2007
	 Changed license to LGPL (with consent from all contributors).
         Released libmicrohttpd 0.0.2. - CG

Sun Aug 12 00:09:26 MDT 2007
	 Released libmicrohttpd 0.0.1. - CG

Fri Aug 10 17:31:23 MDT 2007
	 Fixed problems with handling of responses created from
	 callbacks.  Allowing accept policy callback to be NULL
	 (to accept from all).  Added minimal fileserver example.
	 Only send 100 continue header when specifically requested. - CG

Wed Aug  8 01:46:06 MDT 2007
	 Added pool allocation and connection limitations (total
	 number and memory size).  Released libmicrohttpd 0.0.0. - CG

Tue Jan  9 20:52:48 MST 2007
	 Created project build files and updated API. - CG
