diff options
author | Christian Grothoff <christian@grothoff.org> | 2023-05-06 19:43:17 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2023-05-06 19:43:17 +0200 |
commit | 1f9427e1d9672b93577aea4c9d5a63575ee0b525 (patch) | |
tree | e2a2ce5bfa9b18a89e6d14f35e06955d9f403d1d /src/include/taler_mhd_lib.h | |
parent | 737b3338ed460b56096b9b016b727a0d34b30d23 (diff) |
add convenience function for content-length limiation
Diffstat (limited to 'src/include/taler_mhd_lib.h')
-rw-r--r-- | src/include/taler_mhd_lib.h | 59 |
1 files changed, 51 insertions, 8 deletions
diff --git a/src/include/taler_mhd_lib.h b/src/include/taler_mhd_lib.h index 9c7c06d9a..e4aa916e7 100644 --- a/src/include/taler_mhd_lib.h +++ b/src/include/taler_mhd_lib.h @@ -596,14 +596,14 @@ TALER_MHD_parse_request_header_data (struct MHD_Connection *connection, bool p; \ switch (TALER_MHD_parse_request_header_data (connection, name, \ val, sizeof (*val), &p)) \ - { \ - case GNUNET_SYSERR: \ - GNUNET_break (0); \ - return MHD_NO; \ - case GNUNET_NO: \ - GNUNET_break_op (0); \ - return MHD_YES; \ - case GNUNET_OK: \ + { \ + case GNUNET_SYSERR: \ + GNUNET_break (0); \ + return MHD_NO; \ + case GNUNET_NO: \ + GNUNET_break_op (0); \ + return MHD_YES; \ + case GNUNET_OK: \ if (required & (! p)) \ return TALER_MHD_reply_with_error ( \ connection, \ @@ -635,6 +635,49 @@ TALER_MHD_parse_request_header_data (struct MHD_Connection *connection, /** + * Check that the 'Content-Length' header is giving + * a length below @a max_len. If not, return an + * appropriate error response and return the + * correct #MHD_YES/#MHD_NO value from this function. + * + * @param connection the MHD connection + * @param max_len maximum allowed content length + * @return + * #GNUNET_YES if the the argument is present + * #GNUNET_NO if the argument is absent or malformed + * #GNUNET_SYSERR on internal error (error response could not be sent) + */ +enum GNUNET_GenericReturnValue +TALER_MHD_check_content_length_ (struct MHD_Connection *connection, + unsigned long long max_len); + + +/** + * Check that the 'Content-Length' header is giving + * a length below @a max_len. If not, return an + * appropriate error response and return the + * correct #MHD_YES/#MHD_NO value from this function. + * + * @param connection the MHD connection + * @param max_len maximum allowed content length + */ +#define TALER_MHD_check_content_length(connection,max_len) \ + do { \ + switch (TALER_MHD_check_content_length_ (connection, max_len)) \ + { \ + case GNUNET_SYSERR: \ + GNUNET_break (0); \ + return MHD_NO; \ + case GNUNET_NO: \ + GNUNET_break_op (0); \ + return MHD_YES; \ + case GNUNET_OK: \ + break; \ + } \ + } while (0) + + +/** * Parse the configuration to determine on which port * or UNIX domain path we should run an HTTP service. * |