summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-05-02 18:53:50 +0200
committerChristian Grothoff <christian@grothoff.org>2017-05-02 18:53:50 +0200
commit76cf7d7f5877a3ce0f3bb131aa6e6f420d5b98eb (patch)
tree687393473478fb8e70cba7a4eafc517268404d98
parent33f121a4f6a2d5d47c51d7cbf1d5a750ed369750 (diff)
documentation, adding MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE, releasing 0.9.54
-rw-r--r--AUTHORS6
-rw-r--r--ChangeLog5
-rw-r--r--configure.ac6
-rw-r--r--doc/libmicrohttpd.texi45
-rw-r--r--src/include/microhttpd.h16
-rw-r--r--src/microhttpd/.gitignore1
-rw-r--r--src/microhttpd/connection.c10
-rw-r--r--src/microhttpd/internal.h6
8 files changed, 80 insertions, 15 deletions
diff --git a/AUTHORS b/AUTHORS
index f927e0b0..e574a685 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -61,3 +61,9 @@ Silvio Clecio <silvioprog@gmail.com>
Documentation contributions also came from:
Marco Maggi <marco.maggi-ipsu@poste.it>
Sebastian Gerhardt <sebgerhardt@gmx.net>
+
+Special thanks to:
+Florian Weimer <fweimer@redhat.com>
+Ramakrishnan Muthukrishnan <ram@leastauthority.com>
+Gervasa Markham <grev@mozilla.com>
+Liz Steininger <liz@leastauthority.com>
diff --git a/ChangeLog b/ChangeLog
index a8a87f84..655a703b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+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
diff --git a/configure.ac b/configure.ac
index 31f18c30..afc3fed2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,14 +22,14 @@
#
AC_PREREQ([2.64])
LT_PREREQ([2.4.0])
-AC_INIT([GNU Libmicrohttpd],[0.9.53],[libmicrohttpd@gnu.org])
+AC_INIT([GNU Libmicrohttpd],[0.9.54],[libmicrohttpd@gnu.org])
AM_INIT_AUTOMAKE([silent-rules] [subdir-objects])
AC_CONFIG_HEADERS([MHD_config.h])
AC_CONFIG_MACRO_DIR([m4])
-LIB_VERSION_CURRENT=53
+LIB_VERSION_CURRENT=54
LIB_VERSION_REVISION=0
-LIB_VERSION_AGE=41
+LIB_VERSION_AGE=42
AC_SUBST(LIB_VERSION_CURRENT)
AC_SUBST(LIB_VERSION_REVISION)
AC_SUBST(LIB_VERSION_AGE)
diff --git a/doc/libmicrohttpd.texi b/doc/libmicrohttpd.texi
index 7e95155b..bdbe3de7 100644
--- a/doc/libmicrohttpd.texi
+++ b/doc/libmicrohttpd.texi
@@ -496,6 +496,8 @@ that IPv4 addresses are returned by MHD in the IPv6-mapped format
(the 'struct sockaddr_in6' format will be used for IPv4 and IPv6).
@item MHD_USE_PEDANTIC_CHECKS
+@cindex deprecated
+Deprecated (use @code{MHD_OPTION_STRICT_FOR_CLIENT}).
Be pedantic about the protocol.
Specifically, at the moment, this flag causes MHD to reject HTTP
1.1 connections without a @code{Host} header. This is required by the
@@ -504,13 +506,6 @@ in what you accept'' norm. It is recommended to turn this @strong{ON}
if you are testing clients against MHD, and @strong{OFF} in
production.
-@item MHD_USE_PERMISSIVE_CHECKS
-Be permissive about the protocol, allowing slight deviations that are
-technically not allowed by the RFC. Specifically, at the moment, this
-flag causes MHD to allow spaces in header field names. This is
-disallowed by the standard.
-
-
@item MHD_USE_POLL
@cindex FD_SETSIZE
@cindex poll
@@ -735,6 +730,31 @@ should be followed by an @code{unsigned int}. The default is
zero, which means no limit on the number of connections
from the same IP address.
+@item MHD_OPTION_LISTEN_BACKLOG_SIZE
+Set the size of the @code{listen()} back log queue of the TCP socket.
+Takes an @code{unsigned int} as the argument. Default is the
+platform-specific value of @code{SOMAXCONN}.
+
+@item MHD_OPTION_STRICT_FOR_CLIENT
+Specify how strict we should enforce the HTTP protocol.
+Takes an @code{int} as the argument. Default is zero.
+
+If set to 1, MHD will be strict about the protocol. Specifically, at
+the moment, this flag uses MHD to reject HTTP 1.1 connections without
+a "Host" header. This is required by the standard, but of course in
+violation of the "be as liberal as possible in what you accept" norm.
+It is recommended to set this to 1 if you are testing clients against
+MHD, and 0 in production.
+
+If set to -1 MHD will be permissive about the protocol, allowing
+slight deviations that are technically not allowed by the
+RFC. Specifically, at the moment, this flag causes MHD to allow spaces
+in header field names. This is disallowed by the standard.
+
+It is not recommended to set it to -1 on publicly available servers as
+it may potentially lower level of protection.
+
+
@item MHD_OPTION_SOCK_ADDR
@cindex bind, restricting bind
Bind daemon to the supplied socket address. This option should be followed by a
@@ -2823,7 +2843,7 @@ socket was first accepted. Note that this is NOT the same as the
Takes no extra arguments.
-@item MHD_CONNECTION_INFO_TIMEOUT
+@item MHD_CONNECTION_INFO_CONNECTION_TIMEOUT
Returns pointer to an @code{unsigned int} that is the current timeout
used for the connection (in seconds, 0 for no timeout). Note that
while suspended connections will not timeout, the timeout value
@@ -2831,6 +2851,15 @@ returned for suspended connections will be the timeout that the
connection will use after it is resumed, and thus might not be zero.
Takes no extra arguments.
+
+@item MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE
+@cindex performance
+Returns pointer to an @code{size_t} that represents the size of the
+HTTP header received from the client. Only valid after the first callback
+to the access handler.
+
+Takes no extra arguments.
+
@end table
@end deftp
diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h
index 02bf38ab..ca0059fa 100644
--- a/src/include/microhttpd.h
+++ b/src/include/microhttpd.h
@@ -126,7 +126,7 @@ typedef intptr_t ssize_t;
* Current version of the library.
* 0x01093001 = 1.9.30-1.
*/
-#define MHD_VERSION 0x00095300
+#define MHD_VERSION 0x00095400
/**
* MHD-internal return code for "YES".
@@ -1677,6 +1677,11 @@ union MHD_ConnectionInfo
MHD_socket connect_fd;
/**
+ * Size of the client's HTTP header.
+ */
+ size_t header_size;
+
+ /**
* GNUtls session handle, of type "gnutls_session_t".
*/
void * /* gnutls_session_t */ tls_session;
@@ -1778,12 +1783,17 @@ enum MHD_ConnectionInfoType
*/
MHD_CONNECTION_INFO_CONNECTION_SUSPENDED,
-
/**
* Get connection timeout
* @ingroup request
*/
- MHD_CONNECTION_INFO_CONNECTION_TIMEOUT
+ MHD_CONNECTION_INFO_CONNECTION_TIMEOUT,
+
+ /**
+ * Return length of the client's HTTP request header.
+ * @ingroup request
+ */
+ MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE
};
diff --git a/src/microhttpd/.gitignore b/src/microhttpd/.gitignore
index 72fedae4..cf17abd7 100644
--- a/src/microhttpd/.gitignore
+++ b/src/microhttpd/.gitignore
@@ -42,3 +42,4 @@
/gmon.out
*.exe
test_upgrade_tls
+test_http_reasons
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 228af49b..4753d6eb 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -1831,7 +1831,7 @@ call_connection_handler (struct MHD_Connection *connection)
processed = 0;
connection->client_aware = true;
if (MHD_NO ==
- connection->daemon->default_handler (connection->daemon-> default_handler_cls,
+ connection->daemon->default_handler (connection->daemon->default_handler_cls,
connection,
connection->url,
connection->method,
@@ -2857,6 +2857,7 @@ MHD_connection_handle_idle (struct MHD_Connection *connection)
if (0 == line[0])
{
connection->state = MHD_CONNECTION_HEADERS_RECEIVED;
+ connection->header_size = (size_t) (line - connection->read_buffer);
continue;
}
if (MHD_NO == process_header_line (connection,
@@ -2892,6 +2893,7 @@ MHD_connection_handle_idle (struct MHD_Connection *connection)
if (0 == line[0])
{
connection->state = MHD_CONNECTION_HEADERS_RECEIVED;
+ connection->header_size = (size_t) (line - connection->read_buffer);
continue;
}
continue;
@@ -3402,6 +3404,12 @@ MHD_get_connection_info (struct MHD_Connection *connection,
case MHD_CONNECTION_INFO_CONNECTION_TIMEOUT:
connection->connection_timeout_dummy = (unsigned int)connection->connection_timeout;
return (const union MHD_ConnectionInfo *) &connection->connection_timeout_dummy;
+ case MHD_CONNECTION_INFO_REQUEST_HEADER_SIZE:
+ if ( (MHD_CONNECTION_HEADERS_RECEIVED > connection->state) ||
+ (MHD_CONNECTION_CLOSED == connection->state) ||
+ (MHD_CONNECTION_IN_CLEANUP == connection->state) )
+ return NULL; /* invalid, too early! */
+ return (const union MHD_ConnectionInfo *) &connection->header_size;
default:
return NULL;
}
diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h
index aac13d6c..3595f105 100644
--- a/src/microhttpd/internal.h
+++ b/src/microhttpd/internal.h
@@ -748,6 +748,12 @@ struct MHD_Connection
size_t write_buffer_append_offset;
/**
+ * Number of bytes we had in the HTTP header, set once we
+ * pass #MHD_CONNECTION_HEADERS_RECEIVED.
+ */
+ size_t header_size;
+
+ /**
* How many more bytes of the body do we expect
* to read? #MHD_SIZE_UNKNOWN for unknown.
*/