From efdc91ead4a74afb9b858ea3377bbf5581aabb0d Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 15 Mar 2020 22:24:15 +0100 Subject: [PATCH] clean up link logic --- src/exchange/taler-exchange-httpd.c | 4 +- src/exchange/taler-exchange-httpd_link.c | 65 +++++++++++-------- src/exchange/taler-exchange-httpd_mhd.c | 16 +++-- src/exchange/taler-exchange-httpd_responses.c | 24 ++++--- src/exchange/taler-exchange-httpd_responses.h | 24 ++++--- 5 files changed, 71 insertions(+), 62 deletions(-) diff --git a/src/exchange/taler-exchange-httpd.c b/src/exchange/taler-exchange-httpd.c index 8aa2b198b..eba6e42a1 100644 --- a/src/exchange/taler-exchange-httpd.c +++ b/src/exchange/taler-exchange-httpd.c @@ -701,7 +701,7 @@ handle_mhd_request (void *cls, * @return #GNUNET_OK on success */ static int -exchange_serve_process_config () +exchange_serve_process_config (void) { if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_number (TEH_cfg, @@ -812,7 +812,7 @@ exchange_serve_process_config () * stats if requested. */ static void -write_stats () +write_stats (void) { struct GNUNET_DISK_FileHandle *fh; pid_t pid = getpid (); diff --git a/src/exchange/taler-exchange-httpd_link.c b/src/exchange/taler-exchange-httpd_link.c index 1de8e683d..f1838dacf 100644 --- a/src/exchange/taler-exchange-httpd_link.c +++ b/src/exchange/taler-exchange-httpd_link.c @@ -32,13 +32,13 @@ /** - * Closure for #handle_transfer_data(). + * Closure for #handle_link_data(). */ struct HTD_Context { /** - * Public key of the coin for which we are running /refresh/link. + * Public key of the coin for which we are running link. */ struct TALER_CoinSpendPublicKeyP coin_pub; @@ -70,10 +70,9 @@ handle_link_data (void *cls, { struct HTD_Context *ctx = cls; json_t *list; - json_t *root; if (NULL == ctx->mlist) - return; + return; /* we failed earlier */ if (NULL == (list = json_array ())) goto fail; @@ -101,16 +100,20 @@ handle_link_data (void *cls, goto fail; } } - root = json_pack ("{s:o, s:o}", - "new_coins", - list, - "transfer_pub", - GNUNET_JSON_from_data_auto (transfer_pub)); - if ( (NULL == root) || - (0 != - json_array_append_new (ctx->mlist, - root)) ) - goto fail; + { + json_t *root; + + root = json_pack ("{s:o, s:o}", + "new_coins", + list, + "transfer_pub", + GNUNET_JSON_from_data_auto (transfer_pub)); + if ( (NULL == root) || + (0 != + json_array_append_new (ctx->mlist, + root)) ) + goto fail; + } return; fail: ctx->ec = TALER_EC_JSON_ALLOCATION_FAILURE; @@ -120,15 +123,13 @@ fail: /** - * Execute a "/refresh/link". Returns the linkage information that - * will allow the owner of a coin to follow the refresh trail to - * the refreshed coin. + * Execute a link operation. Returns the linkage information that will allow + * the owner of a coin to follow the trail to the refreshed coin. * - * If it returns a non-error code, the transaction logic MUST - * NOT queue a MHD response. IF it returns an hard error, the - * transaction logic MUST queue a MHD response and set @a mhd_ret. IF - * it returns the soft error code, the function MAY be called again to - * retry and MUST not queue a MHD response. + * If it returns a non-error code, the transaction logic MUST NOT queue a MHD + * response. IF it returns an hard error, the transaction logic MUST queue a + * MHD response and set @a mhd_ret. IF it returns the soft error code, the + * function MAY be called again to retry and MUST not queue a MHD response. * * @param cls closure * @param connection MHD request which triggered the transaction @@ -138,10 +139,10 @@ fail: * @return transaction status */ static enum GNUNET_DB_QueryStatus -refresh_link_transaction (void *cls, - struct MHD_Connection *connection, - struct TALER_EXCHANGEDB_Session *session, - int *mhd_ret) +link_transaction (void *cls, + struct MHD_Connection *connection, + struct TALER_EXCHANGEDB_Session *session, + int *mhd_ret) { struct HTD_Context *ctx = cls; enum GNUNET_DB_QueryStatus qs; @@ -204,11 +205,19 @@ TEH_handler_link (const struct TEH_RequestHandler *rh, "coin public key malformed"); } ctx.mlist = json_array (); + if (NULL == ctx.mlist) + { + GNUNET_break (0); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_JSON_ALLOCATION_FAILURE, + "json_array() call failed"); + } if (GNUNET_OK != TEH_DB_run_transaction (connection, "run link", &mhd_ret, - &refresh_link_transaction, + &link_transaction, &ctx)) { if (NULL != ctx.mlist) @@ -223,4 +232,4 @@ TEH_handler_link (const struct TEH_RequestHandler *rh, } -/* end of taler-exchange-httpd_refresh_link.c */ +/* end of taler-exchange-httpd_link.c */ diff --git a/src/exchange/taler-exchange-httpd_mhd.c b/src/exchange/taler-exchange-httpd_mhd.c index 6d05aeb64..a0b0d2844 100644 --- a/src/exchange/taler-exchange-httpd_mhd.c +++ b/src/exchange/taler-exchange-httpd_mhd.c @@ -33,6 +33,7 @@ #include "taler-exchange-httpd.h" #include "taler-exchange-httpd_mhd.h" + /** * Function to call to handle the request by sending * back static data from the @a rh. @@ -48,7 +49,6 @@ TEH_handler_static_response (const struct TEH_RequestHandler *rh, const char *const args[]) { struct MHD_Response *response; - int ret; size_t dlen; (void) args; @@ -68,11 +68,15 @@ TEH_handler_static_response (const struct TEH_RequestHandler *rh, (void) MHD_add_response_header (response, MHD_HTTP_HEADER_CONTENT_TYPE, rh->mime_type); - ret = MHD_queue_response (connection, - rh->response_code, - response); - MHD_destroy_response (response); - return ret; + { + int ret; + + ret = MHD_queue_response (connection, + rh->response_code, + response); + MHD_destroy_response (response); + return ret; + } } diff --git a/src/exchange/taler-exchange-httpd_responses.c b/src/exchange/taler-exchange-httpd_responses.c index e2a20243d..cd03ba767 100644 --- a/src/exchange/taler-exchange-httpd_responses.c +++ b/src/exchange/taler-exchange-httpd_responses.c @@ -39,10 +39,9 @@ * @return json representation of the @a rh, NULL on error */ json_t * -TEH_RESPONSE_compile_transaction_history (const struct - TALER_CoinSpendPublicKeyP *coin_pub, - const struct - TALER_EXCHANGEDB_TransactionList *tl) +TEH_RESPONSE_compile_transaction_history ( + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_EXCHANGEDB_TransactionList *tl) { json_t *history; @@ -421,12 +420,11 @@ TEH_RESPONSE_compile_transaction_history (const struct * @return MHD result code */ int -TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection, - enum TALER_ErrorCode ec, - const struct - TALER_CoinSpendPublicKeyP *coin_pub, - const struct - TALER_EXCHANGEDB_TransactionList *tl) +TEH_RESPONSE_reply_coin_insufficient_funds ( + struct MHD_Connection *connection, + enum TALER_ErrorCode ec, + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_EXCHANGEDB_TransactionList *tl) { json_t *history; @@ -458,9 +456,9 @@ TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection, * @return json representation of the @a rh, NULL on error */ json_t * -TEH_RESPONSE_compile_reserve_history (const struct - TALER_EXCHANGEDB_ReserveHistory *rh, - struct TALER_Amount *balance) +TEH_RESPONSE_compile_reserve_history ( + const struct TALER_EXCHANGEDB_ReserveHistory *rh, + struct TALER_Amount *balance) { struct TALER_Amount deposit_total; struct TALER_Amount withdraw_total; diff --git a/src/exchange/taler-exchange-httpd_responses.h b/src/exchange/taler-exchange-httpd_responses.h index 07298322f..5dd98174f 100644 --- a/src/exchange/taler-exchange-httpd_responses.h +++ b/src/exchange/taler-exchange-httpd_responses.h @@ -42,9 +42,9 @@ * @return json representation of the @a rh, NULL on error */ json_t * -TEH_RESPONSE_compile_reserve_history (const struct - TALER_EXCHANGEDB_ReserveHistory *rh, - struct TALER_Amount *balance); +TEH_RESPONSE_compile_reserve_history ( + const struct TALER_EXCHANGEDB_ReserveHistory *rh, + struct TALER_Amount *balance); /** @@ -60,12 +60,11 @@ TEH_RESPONSE_compile_reserve_history (const struct * @return MHD result code */ int -TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection, - enum TALER_ErrorCode ec, - const struct - TALER_CoinSpendPublicKeyP *coin_pub, - const struct - TALER_EXCHANGEDB_TransactionList *tl); +TEH_RESPONSE_reply_coin_insufficient_funds ( + struct MHD_Connection *connection, + enum TALER_ErrorCode ec, + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_EXCHANGEDB_TransactionList *tl); /** @@ -76,10 +75,9 @@ TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection, * @return json representation of the @a rh, NULL on error */ json_t * -TEH_RESPONSE_compile_transaction_history (const struct - TALER_CoinSpendPublicKeyP *coin_pub, - const struct - TALER_EXCHANGEDB_TransactionList *tl); +TEH_RESPONSE_compile_transaction_history ( + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_EXCHANGEDB_TransactionList *tl); #endif