exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 200bbfbefda8c67ec5196d7384b32e9fa33c4bb7
parent 21648351b98856e02db146a5277552053291f226
Author: Christian Grothoff <christian@grothoff.org>
Date:   Mon, 18 Mar 2024 23:08:17 +0100

add new TALER_MHD_parse_request_arg_snumber function to libtalermhd

Diffstat:
Msrc/include/taler_mhd_lib.h | 44++++++++++++++++++++++++++++++++++++++++++++
Msrc/mhd/Makefile.am | 2+-
Msrc/mhd/mhd_parsing.c | 36++++++++++++++++++++++++++++++++++++
3 files changed, 81 insertions(+), 1 deletion(-)

diff --git a/src/include/taler_mhd_lib.h b/src/include/taler_mhd_lib.h @@ -522,6 +522,50 @@ TALER_MHD_parse_request_arg_number (struct MHD_Connection *connection, /** + * Extract optional signed numeric limit argument from request. + * + * @param connection the MHD connection + * @param name name of the query parameter + * @param[out] val set to the signed value, unchanged if the + * option was not given + * @return #GNUNET_OK on success, + * #GNUNET_NO if an error was returned on @a connection (caller should return #MHD_YES) and + * #GNUNET_SYSERR if we failed to return an error (caller should return #MHD_NO) + */ +enum GNUNET_GenericReturnValue +TALER_MHD_parse_request_arg_snumber (struct MHD_Connection *connection, + const char *name, + int64_t *val); + + +/** + * Extract optional numeric argument from request. + * Macro that *returns* #MHD_YES/#MHD_NO if the + * requested argument existed but failed to parse. + * + * @param connection the MHD connection + * @param name name of the argument to parse + * @param[out] val set to the given numeric value, + * unchanged if value was not specified + */ +#define TALER_MHD_parse_request_snumber(connection,name,val) \ + do { \ + switch (TALER_MHD_parse_request_arg_snumber (connection, \ + name, \ + val)) \ + { \ + case GNUNET_SYSERR: \ + GNUNET_break (0); \ + return MHD_NO; \ + case GNUNET_NO: \ + GNUNET_break_op (0); \ + case GNUNET_OK: \ + break; \ + } \ + } while (0) + + +/** * Extract optional amount argument from request. * * @param connection the MHD connection diff --git a/src/mhd/Makefile.am b/src/mhd/Makefile.am @@ -16,7 +16,7 @@ libtalermhd_la_SOURCES = \ mhd_responses.c \ mhd_run.c libtalermhd_la_LDFLAGS = \ - -version-info 1:0:1 \ + -version-info 2:0:2 \ -no-undefined libtalermhd_la_LIBADD = \ $(top_builddir)/src/json/libtalerjson.la \ diff --git a/src/mhd/mhd_parsing.c b/src/mhd/mhd_parsing.c @@ -246,6 +246,42 @@ TALER_MHD_parse_request_arg_number (struct MHD_Connection *connection, enum GNUNET_GenericReturnValue +TALER_MHD_parse_request_arg_snumber (struct MHD_Connection *connection, + const char *name, + int64_t *val) +{ + const char *ts; + char dummy; + long long num; + + ts = MHD_lookup_connection_value (connection, + MHD_GET_ARGUMENT_KIND, + name); + if (NULL == ts) + return GNUNET_OK; + if (1 != + sscanf (ts, + "%lld%c", + &num, + &dummy)) + { + MHD_RESULT mret; + + GNUNET_break_op (0); + mret = TALER_MHD_reply_with_error (connection, + MHD_HTTP_BAD_REQUEST, + TALER_EC_GENERIC_PARAMETER_MALFORMED, + name); + return (MHD_YES == mret) + ? GNUNET_NO + : GNUNET_SYSERR; + } + *val = (int64_t) num; + return GNUNET_OK; +} + + +enum GNUNET_GenericReturnValue TALER_MHD_parse_request_arg_amount (struct MHD_Connection *connection, const char *name, struct TALER_Amount *val)