exchange

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

commit 7bd219d33ff963db6b3aafb8ca055a9a503aac30
parent 0a2359b9a4a772f7025e3c034515c2a4570f7704
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Thu,  1 May 2025 12:02:11 +0200

handle default case as well in phase_generate_reply_error

Diffstat:
Msrc/exchange/taler-exchange-httpd_withdraw.c | 98+++++++++++++++++++++++++++++--------------------------------------------------
1 file changed, 36 insertions(+), 62 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_withdraw.c b/src/exchange/taler-exchange-httpd_withdraw.c @@ -1307,15 +1307,7 @@ phase_generate_reply_error ( switch (wc->error.code) { case WITHDRAW_ERROR_NONE: - GNUNET_break (0); - finish_loop (wc, - TALER_MHD_reply_with_error ( - wc->rc->connection, - MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE, - "error phase without error")); break; - case WITHDRAW_ERROR_REQUEST_PARAMETER_MALFORMED: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1323,8 +1315,7 @@ phase_generate_reply_error ( MHD_HTTP_BAD_REQUEST, TALER_EC_GENERIC_PARAMETER_MALFORMED, wc->error.details.request_parameter_malformed)); - break; - + return; case WITHDRAW_ERROR_KEYS_MISSING: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1332,8 +1323,7 @@ phase_generate_reply_error ( MHD_HTTP_INTERNAL_SERVER_ERROR, TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING, NULL)); - break; - + return; case WITHDRAW_ERROR_DB_FETCH_FAILED: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1341,8 +1331,7 @@ phase_generate_reply_error ( MHD_HTTP_INTERNAL_SERVER_ERROR, TALER_EC_GENERIC_DB_FETCH_FAILED, wc->error.details.db_fetch_context)); - break; - + return; case WITHDRAW_ERROR_DB_INVARIANT_FAILURE: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1350,24 +1339,21 @@ phase_generate_reply_error ( MHD_HTTP_INTERNAL_SERVER_ERROR, TALER_EC_GENERIC_DB_INVARIANT_FAILURE, NULL)); - break; - + return; case WITHDRAW_ERROR_RESERVE_UNKNOWN: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, TALER_EC_EXCHANGE_GENERIC_RESERVE_UNKNOWN, NULL)); - break; - + return; case WITHDRAW_ERROR_DENOMINATION_SIGN: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, wc->error.details.ec_denomination_sign, NULL)); - break; - + return; case WITHDRAW_ERROR_KYC_REQUIRED: finish_loop (wc, TEH_RESPONSE_reply_kyc_required ( @@ -1375,16 +1361,14 @@ phase_generate_reply_error ( &wc->h_normalized_payto, &wc->kyc, false)); - break; - + return; case WITHDRAW_ERROR_DENOMINATION_KEY_UNKNOWN: GNUNET_break_op (0); finish_loop (wc, TEH_RESPONSE_reply_unknown_denom_pub_hash ( wc->rc->connection, wc->error.details.denom_h)); - break; - + return; case WITHDRAW_ERROR_DENOMINATION_EXPIRED: GNUNET_break_op (0); finish_loop (wc, @@ -1393,8 +1377,7 @@ phase_generate_reply_error ( wc->error.details.denom_h, TALER_EC_EXCHANGE_GENERIC_DENOMINATION_EXPIRED, "WITHDRAW")); - break; - + return; case WITHDRAW_ERROR_DENOMINATION_VALIDITY_IN_FUTURE: finish_loop (wc, TEH_RESPONSE_reply_expired_denom_pub_hash ( @@ -1402,8 +1385,7 @@ phase_generate_reply_error ( wc->error.details.denom_h, TALER_EC_EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE, "WITHDRAW")); - break; - + return; case WITHDRAW_ERROR_DENOMINATION_REVOKED: GNUNET_break_op (0); finish_loop (wc, @@ -1411,43 +1393,39 @@ phase_generate_reply_error ( wc->rc->connection, TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED, NULL)); - break; - + return; case WITHDRAW_ERROR_CIPHER_MISMATCH: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, TALER_EC_EXCHANGE_GENERIC_CIPHER_MISMATCH, NULL)); - break; - + return; case WITHDRAW_ERROR_BLINDING_SEED_REQUIRED: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, TALER_EC_GENERIC_PARAMETER_MISSING, "blinding_seed")); - break; - + return; case WITHDRAW_ERROR_CRYPTO_HELPER: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE, NULL)); - break; - + return; case WITHDRAW_ERROR_RESERVE_CIPHER_UNKNOWN: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, TALER_EC_EXCHANGE_GENERIC_CIPHER_MISMATCH, "cipher")); - break; - + return; case WITHDRAW_ERROR_AGE_RESTRICTION_NOT_SUPPORTED_BY_DENOMINATION: { char msg[256]; + GNUNET_snprintf (msg, sizeof(msg), "denomination %s does not support age restriction", @@ -1457,9 +1435,8 @@ phase_generate_reply_error ( wc->rc->connection, TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN, msg)); - break; + return; } - case WITHDRAW_ERROR_MAXIMUM_AGE_TOO_LARGE: finish_loop (wc, TALER_MHD_REPLY_JSON_PACK ( @@ -1473,15 +1450,13 @@ phase_generate_reply_error ( GNUNET_JSON_pack_uint64 ( "reserve_birthday", wc->error.details.maximum_age_too_large.birthday))); - break; - + return; case WITHDRAW_ERROR_AGE_RESTRICTION_REQUIRED: finish_loop (wc, TEH_RESPONSE_reply_reserve_age_restriction_required ( wc->rc->connection, wc->error.details.age_restriction_required)); - break; - + return; case WITHDRAW_ERROR_AMOUNT_OVERFLOW: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1489,8 +1464,7 @@ phase_generate_reply_error ( MHD_HTTP_BAD_REQUEST, TALER_EC_EXCHANGE_WITHDRAW_AMOUNT_OVERFLOW, "amount")); - break; - + return; case WITHDRAW_ERROR_FEE_OVERFLOW: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1498,8 +1472,7 @@ phase_generate_reply_error ( MHD_HTTP_BAD_REQUEST, TALER_EC_EXCHANGE_WITHDRAW_AMOUNT_OVERFLOW, "fee")); - break; - + return; case WITHDRAW_ERROR_AMOUNT_PLUS_FEE_OVERFLOW: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1507,16 +1480,14 @@ phase_generate_reply_error ( MHD_HTTP_INTERNAL_SERVER_ERROR, TALER_EC_EXCHANGE_WITHDRAW_AMOUNT_FEE_OVERFLOW, "amount+fee")); - break; - + return; case WITHDRAW_ERROR_CONFIRMATION_SIGN: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, wc->error.details.ec_confirmation_sign, NULL)); - break; - + return; case WITHDRAW_ERROR_INSUFFICIENT_FUNDS: finish_loop (wc, TEH_RESPONSE_reply_reserve_insufficient_balance ( @@ -1525,8 +1496,7 @@ phase_generate_reply_error ( &wc->error.details.insufficient_funds, &wc->request.withdraw.amount_with_fee, &wc->request.withdraw.reserve_pub)); - break; - + return; case WITHDRAW_ERROR_IDEMPOTENT_PLANCHET: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1534,8 +1504,7 @@ phase_generate_reply_error ( MHD_HTTP_CONFLICT, TALER_EC_EXCHANGE_WITHDRAW_IDEMPOTENT_PLANCHET, NULL)); - break; - + return; case WITHDRAW_ERROR_NONCE_RESUSE: finish_loop (wc, TALER_MHD_reply_with_error ( @@ -1543,32 +1512,37 @@ phase_generate_reply_error ( MHD_HTTP_CONFLICT, TALER_EC_EXCHANGE_WITHDRAW_NONCE_REUSE, "blinding_seed")); - break; - + return; case WITHDRAW_ERROR_RESERVE_SIGNATURE_INVALID: finish_loop (wc, TALER_MHD_reply_with_ec ( wc->rc->connection, TALER_EC_EXCHANGE_WITHDRAW_RESERVE_SIGNATURE_INVALID, NULL)); - break; - + return; case WITHDRAW_ERROR_LEGITIMIZATION_RESULT: { finish_loop ( wc, MHD_queue_response (wc->rc->connection, wc->error.details.legitimization_result.http_status, wc->error.details.legitimization_result.response)); - break; + return; } } + GNUNET_break (0); + finish_loop (wc, + TALER_MHD_reply_with_error ( + wc->rc->connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE, + "error phase without error")); } /** * Initializes the new context for the incoming withdraw request * - * @param wc withdraw request context + * @param[in,out] wc withdraw request context * @param root json body of the request */ static void