mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-25 04:09:31 +03:00
make MHD_http_unescape() part of API (#3585)
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
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
|
||||
|
||||
@@ -65,6 +65,7 @@ Free Documentation License".
|
||||
* microhttpd-dauth:: Utilizing Authentication.
|
||||
* microhttpd-post:: Adding a @code{POST} processor.
|
||||
* microhttpd-info:: Obtaining and modifying status information.
|
||||
* microhttpd-util:: Utilities.
|
||||
|
||||
Appendices
|
||||
|
||||
@@ -2575,6 +2576,138 @@ zero for no timeout.
|
||||
@end deftp
|
||||
|
||||
|
||||
|
||||
@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
@c ------------------------------------------------------------
|
||||
@node microhttpd-util
|
||||
@chapter Utility functions.
|
||||
|
||||
|
||||
@menu
|
||||
* microhttpd-util feature:: Test supported MHD features
|
||||
* microhttpd-util unescape:: Unescape strings
|
||||
@end menu
|
||||
|
||||
|
||||
@c ------------------------------------------------------------
|
||||
@node microhttpd-util feature
|
||||
@section Testing for supported MHD features
|
||||
|
||||
|
||||
@deftp {Enumeration} MHD_FEATURE
|
||||
Values of this enum are used to specify what
|
||||
information about a daemon is desired.
|
||||
@table @code
|
||||
@item MHD_FEATURE_MESSAGES
|
||||
Get whether messages are supported. If supported then in debug
|
||||
mode messages can be printed to stderr or to external logger.
|
||||
|
||||
@item MHD_FEATURE_SSL
|
||||
Get whether HTTPS is supported. If supported then flag
|
||||
MHD_USE_SSL and options MHD_OPTION_HTTPS_MEM_KEY,
|
||||
MHD_OPTION_HTTPS_MEM_CERT, MHD_OPTION_HTTPS_MEM_TRUST,
|
||||
MHD_OPTION_HTTPS_MEM_DHPARAMS, MHD_OPTION_HTTPS_CRED_TYPE,
|
||||
MHD_OPTION_HTTPS_PRIORITIES can be used.
|
||||
|
||||
@item MHD_FEATURE_HTTPS_CERT_CALLBACK
|
||||
Get whether option #MHD_OPTION_HTTPS_CERT_CALLBACK is
|
||||
supported.
|
||||
|
||||
@item MHD_FEATURE_IPv6
|
||||
Get whether IPv6 is supported. If supported then flag
|
||||
MHD_USE_IPv6 can be used.
|
||||
|
||||
@item MHD_FEATURE_IPv6_ONLY
|
||||
Get whether IPv6 without IPv4 is supported. If not supported
|
||||
then IPv4 is always enabled in IPv6 sockets and
|
||||
flag MHD_USE_DUAL_STACK if always used when MHD_USE_IPv6 is
|
||||
specified.
|
||||
|
||||
@item MHD_FEATURE_POLL
|
||||
Get whether @code{poll()} is supported. If supported then flag
|
||||
MHD_USE_POLL can be used.
|
||||
|
||||
@item MHD_FEATURE_EPOLL
|
||||
Get whether @code{epoll()} is supported. If supported then Flags
|
||||
MHD_USE_EPOLL_LINUX_ONLY and
|
||||
MHD_USE_EPOLL_INTERNALLY_LINUX_ONLY can be used.
|
||||
|
||||
@item MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET
|
||||
Get whether shutdown on listen socket to signal other
|
||||
threads is supported. If not supported flag
|
||||
MHD_USE_PIPE_FOR_SHUTDOWN is automatically forced.
|
||||
|
||||
@item MHD_FEATURE_SOCKETPAIR
|
||||
Get whether a @code{socketpair()} is used internally instead of
|
||||
a @code{pipe()} to signal other threads.
|
||||
|
||||
@item MHD_FEATURE_TCP_FASTOPEN
|
||||
Get whether TCP Fast Open is supported. If supported then
|
||||
flag MHD_USE_TCP_FASTOPEN and option
|
||||
MHD_OPTION_TCP_FASTOPEN_QUEUE_SIZE can be used.
|
||||
|
||||
@item MHD_FEATURE_BASIC_AUTH
|
||||
Get whether HTTP Basic authorization is supported. If supported
|
||||
then functions @code{MHD_basic_auth_get_username_password()} and
|
||||
@code{MHD_queue_basic_auth_fail_response()} can be used.
|
||||
|
||||
@item MHD_FEATURE_DIGEST_AUTH
|
||||
Get whether HTTP Digest authorization is supported. If
|
||||
supported then options MHD_OPTION_DIGEST_AUTH_RANDOM,
|
||||
MHD_OPTION_NONCE_NC_SIZE and functions @code{MHD_digest_auth_check()},
|
||||
can be used.
|
||||
|
||||
@item MHD_FEATURE_POSTPROCESSOR
|
||||
Get whether postprocessor is supported. If supported then
|
||||
functions @code{MHD_create_post_processor()},
|
||||
@code{MHD_post_process()}, @code{MHD_destroy_post_processor()}
|
||||
can be used.
|
||||
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
|
||||
|
||||
@deftypefun {int} MHD_is_feature_supported (enum MHD_FEATURE feature)
|
||||
Get information about supported MHD features. Indicate that MHD was
|
||||
compiled with or without support for particular feature. Some features
|
||||
require additional support by the kernel. However, kernel support is not
|
||||
checked by this function.
|
||||
|
||||
@table @var
|
||||
@item feature
|
||||
type of requested information
|
||||
@end table
|
||||
|
||||
Returns @code{MHD_YES} if the feature is supported,
|
||||
and @code{MHD_NO} if not.
|
||||
@end deftypefun
|
||||
|
||||
|
||||
@c ------------------------------------------------------------
|
||||
@node microhttpd-util unescape
|
||||
@section Unescape strings
|
||||
|
||||
@deftypefun {size_t} MHD_http_unescape (char *val)
|
||||
Process escape sequences ('%HH') Updates val in place; the result
|
||||
should be UTF-8 encoded and cannot be larger than the input. The
|
||||
result must also still be 0-terminated.
|
||||
|
||||
@table @var
|
||||
@item val
|
||||
value to unescape (modified in the process), must be
|
||||
a 0-terminated UTF-8 string.
|
||||
@end table
|
||||
|
||||
Returns length of the resulting val (@code{strlen(val)} may be
|
||||
shorter afterwards due to elimination of escape sequences).
|
||||
|
||||
@end deftypefun
|
||||
|
||||
|
||||
|
||||
|
||||
@c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
|
||||
|
||||
@@ -1685,6 +1685,19 @@ _MHD_EXTERN void
|
||||
MHD_set_panic_func (MHD_PanicCallback cb, void *cls);
|
||||
|
||||
|
||||
/**
|
||||
* Process escape sequences ('%HH') Updates val in place; the
|
||||
* result should be UTF-8 encoded and cannot be larger than the input.
|
||||
* The result must also still be 0-terminated.
|
||||
*
|
||||
* @param val value to unescape (modified in the process)
|
||||
* @return length of the resulting val (`strlen(val)` may be
|
||||
* shorter afterwards due to elimination of escape sequences)
|
||||
*/
|
||||
_MHD_EXTERN size_t
|
||||
MHD_http_unescape (char *val);
|
||||
|
||||
|
||||
/**
|
||||
* Get a particular header value. If multiple
|
||||
* values match the kind, return any one of them.
|
||||
@@ -2439,9 +2452,9 @@ MHD_get_version (void);
|
||||
|
||||
|
||||
/**
|
||||
* Types of information about MHD features,
|
||||
* used by #MHD_is_feature_supported.
|
||||
*/
|
||||
* Types of information about MHD features,
|
||||
* used by #MHD_is_feature_supported().
|
||||
*/
|
||||
enum MHD_FEATURE
|
||||
{
|
||||
/**
|
||||
@@ -2495,7 +2508,7 @@ enum MHD_FEATURE
|
||||
/**
|
||||
* Get whether shutdown on listen socket to signal other
|
||||
* threads is supported. If not supported flag
|
||||
* MHD_USE_PIPE_FOR_SHUTDOWN is automatically forced.
|
||||
* #MHD_USE_PIPE_FOR_SHUTDOWN is automatically forced.
|
||||
*/
|
||||
MHD_FEATURE_SHUTDOWN_LISTEN_SOCKET = 8,
|
||||
|
||||
@@ -2522,15 +2535,15 @@ enum MHD_FEATURE
|
||||
/**
|
||||
* Get whether HTTP Digest authorization is supported. If
|
||||
* supported then options #MHD_OPTION_DIGEST_AUTH_RANDOM,
|
||||
* #MHD_OPTION_NONCE_NC_SIZE and functions #MHD_digest_auth_check,
|
||||
* #MHD_digest_auth_check can be used.
|
||||
* #MHD_OPTION_NONCE_NC_SIZE and
|
||||
* #MHD_digest_auth_check() can be used.
|
||||
*/
|
||||
MHD_FEATURE_DIGEST_AUTH = 12,
|
||||
|
||||
/**
|
||||
* Get whether postprocessor is supported. If supported then
|
||||
* functions #MHD_create_post_processor, #MHD_post_process,
|
||||
* #MHD_destroy_post_processor, #MHD_destroy_post_processor can
|
||||
* functions #MHD_create_post_processor(), #MHD_post_process() and
|
||||
* #MHD_destroy_post_processor() can
|
||||
* be used.
|
||||
*/
|
||||
MHD_FEATURE_POSTPROCESSOR = 13
|
||||
|
||||
+21
-1
@@ -2742,6 +2742,26 @@ MHD_select_thread (void *cls)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process escape sequences ('%HH') Updates val in place; the
|
||||
* result should be UTF-8 encoded and cannot be larger than the input.
|
||||
* The result must also still be 0-terminated.
|
||||
*
|
||||
* @param cls closure (use NULL)
|
||||
* @param connection handle to connection, not used
|
||||
* @param val value to unescape (modified in the process)
|
||||
* @return length of the resulting val (strlen(val) maybe
|
||||
* shorter afterwards due to elimination of escape sequences)
|
||||
*/
|
||||
static size_t
|
||||
unescape_wrapper (void *cls,
|
||||
struct MHD_Connection *connection,
|
||||
char *val)
|
||||
{
|
||||
return MHD_http_unescape (val);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Start a webserver on the given port. Variadic version of
|
||||
* #MHD_start_daemon_va.
|
||||
@@ -3410,7 +3430,7 @@ MHD_start_daemon_va (unsigned int flags,
|
||||
daemon->connection_limit = MHD_MAX_CONNECTIONS_DEFAULT;
|
||||
daemon->pool_size = MHD_POOL_SIZE_DEFAULT;
|
||||
daemon->pool_increment = MHD_BUF_INC_SIZE;
|
||||
daemon->unescape_callback = &MHD_http_unescape;
|
||||
daemon->unescape_callback = &unescape_wrapper;
|
||||
daemon->connection_timeout = 0; /* no timeout */
|
||||
daemon->wpipe[0] = MHD_INVALID_PIPE_;
|
||||
daemon->wpipe[1] = MHD_INVALID_PIPE_;
|
||||
|
||||
@@ -124,16 +124,12 @@ MHD_unescape_plus (char *arg)
|
||||
* result should be UTF-8 encoded and cannot be larger than the input.
|
||||
* The result must also still be 0-terminated.
|
||||
*
|
||||
* @param cls closure (use NULL)
|
||||
* @param connection handle to connection, not used
|
||||
* @param val value to unescape (modified in the process)
|
||||
* @return length of the resulting val (strlen(val) maybe
|
||||
* shorter afterwards due to elimination of escape sequences)
|
||||
*/
|
||||
size_t
|
||||
MHD_http_unescape (void *cls,
|
||||
struct MHD_Connection *connection,
|
||||
char *val)
|
||||
MHD_http_unescape (char *val)
|
||||
{
|
||||
char *rpos = val;
|
||||
char *wpos = val;
|
||||
|
||||
@@ -199,22 +199,6 @@ MHD_DLOG (const struct MHD_Daemon *daemon,
|
||||
const char *format, ...);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Process escape sequences ('+'=space, %HH) Updates val in place; the
|
||||
* result should be UTF-8 encoded and cannot be larger than the input.
|
||||
* The result must also still be 0-terminated.
|
||||
*
|
||||
* @param cls closure (use NULL)
|
||||
* @param connection handle to connection, not used
|
||||
* @param val value to unescape (modified in the process)
|
||||
* @return length of the resulting val (strlen(val) maybe
|
||||
* shorter afterwards due to elimination of escape sequences)
|
||||
*/
|
||||
size_t
|
||||
MHD_http_unescape (void *cls,
|
||||
struct MHD_Connection *connection,
|
||||
char *val);
|
||||
|
||||
|
||||
/**
|
||||
* Header or cookie in HTTP request or response.
|
||||
|
||||
@@ -382,7 +382,7 @@ post_process_urlencoded (struct MHD_PostProcessor *pp,
|
||||
buf[pp->buffer_pos] = '\0'; /* 0-terminate key */
|
||||
pp->buffer_pos = 0; /* reset for next key */
|
||||
MHD_unescape_plus (buf);
|
||||
MHD_http_unescape (NULL, NULL, buf);
|
||||
MHD_http_unescape (buf);
|
||||
poff += equals + 1;
|
||||
pp->state = PP_ProcessValue;
|
||||
pp->value_offset = 0;
|
||||
@@ -443,7 +443,7 @@ post_process_urlencoded (struct MHD_PostProcessor *pp,
|
||||
/* unescape */
|
||||
xbuf[xoff] = '\0'; /* 0-terminate in preparation */
|
||||
MHD_unescape_plus (xbuf);
|
||||
xoff = MHD_http_unescape (NULL, NULL, xbuf);
|
||||
xoff = MHD_http_unescape (xbuf);
|
||||
/* finally: call application! */
|
||||
pp->must_ikvi = MHD_NO;
|
||||
if (MHD_NO == pp->ikvi (pp->cls, MHD_POSTDATA_KIND, (const char *) &pp[1], /* key */
|
||||
|
||||
Reference in New Issue
Block a user