diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-08-01 22:49:04 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-08-01 22:49:04 +0200 |
commit | 92b86cc5a7277de1a3b3ab55aaf37c83a649930e (patch) | |
tree | eef73525a65c6fe6825559f050b8ea971ca8302a /src/backend/taler-merchant-httpd_post-orders-ID-abort.c | |
parent | 4e18bf19dfed52aa448a0b0d8547c0be182ba36a (diff) |
finish implementing #6935
Diffstat (limited to 'src/backend/taler-merchant-httpd_post-orders-ID-abort.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_post-orders-ID-abort.c | 98 |
1 files changed, 43 insertions, 55 deletions
diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-abort.c b/src/backend/taler-merchant-httpd_post-orders-ID-abort.c index 759c3ba5..f0b2a0c2 100644 --- a/src/backend/taler-merchant-httpd_post-orders-ID-abort.c +++ b/src/backend/taler-merchant-httpd_post-orders-ID-abort.c @@ -1,6 +1,6 @@ /* This file is part of TALER - (C) 2014-2020 Taler Systems SA + (C) 2014-2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -27,6 +27,7 @@ #include <taler/taler_json_lib.h> #include <taler/taler_exchange_service.h> #include "taler-merchant-httpd_exchanges.h" +#include "taler-merchant-httpd_helper.h" /** @@ -366,49 +367,44 @@ generate_success_response (struct AbortContext *ac) (0 == rdi->http_status) || (NULL == rdi->exchange_reply) ) hc = MHD_HTTP_BAD_GATEWAY; - detail = (MHD_HTTP_OK != rdi->http_status) - ? json_pack ("{s:s, s:I, s:I, s:O?}", - "type", - "failure", - "exchange_status", - (json_int_t) rdi->http_status, - "exchange_code", - (json_int_t) - (NULL != rdi->exchange_reply) - ? TALER_JSON_get_error_code ( - rdi->exchange_reply) - : TALER_EC_GENERIC_INVALID_RESPONSE, - "exchange_reply", - rdi->exchange_reply) - : json_pack ("{s:s, s:I, s:o, s:o}", - "type", - "success", - "exchange_status", - (json_int_t) rdi->http_status, - "exchange_sig", - GNUNET_JSON_from_data_auto (&rdi->exchange_sig), - "exchange_pub", - GNUNET_JSON_from_data_auto (&rdi->exchange_pub)); - if ( (NULL == detail) || - (0 != json_array_append_new (refunds, - detail)) ) - { - json_decref (refunds); - GNUNET_break (0); - resume_abort_with_error (ac, - MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE, - "could not create JSON array"); - return; - } + if (MHD_HTTP_OK != rdi->http_status) + detail = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("type", + "failure"), + GNUNET_JSON_pack_uint64 ("exchange_status", + rdi->http_status), + GNUNET_JSON_pack_uint64 ("exchange_code", + (NULL != rdi->exchange_reply) + ? + TALER_JSON_get_error_code ( + rdi->exchange_reply) + : + TALER_EC_GENERIC_INVALID_RESPONSE), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_object_incref ("exchange_reply", + rdi->exchange_reply))); + else + detail = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("type", + "success"), + GNUNET_JSON_pack_uint64 ("exchange_status", + rdi->http_status), + GNUNET_JSON_pack_data_auto ("exchange_sig", + &rdi->exchange_sig), + GNUNET_JSON_pack_data_auto ("exchange_pub", + &rdi->exchange_pub)); + GNUNET_assert (0 == + json_array_append_new (refunds, + detail)); } /* Resume and send back the response. */ - resume_abort_with_response (ac, - hc, - TALER_MHD_make_json_pack ("{s:o}", - "refunds", - refunds)); + resume_abort_with_response ( + ac, + hc, + TALER_MHD_MAKE_JSON_PACK ( + GNUNET_JSON_pack_array_steal ("refunds", + refunds))); } @@ -534,13 +530,9 @@ process_abort_with_exchange (void *cls, resume_abort_with_response ( ac, MHD_HTTP_GATEWAY_TIMEOUT, - TALER_MHD_make_json_pack ( - "{s:s, s:I}", - "hint", - TALER_ErrorCode_get_hint ( - TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT), - "code", - (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT)); + TALER_MHD_make_error ( + TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT, + NULL)); return; } if (NULL == exchange_handle) @@ -550,14 +542,10 @@ process_abort_with_exchange (void *cls, resume_abort_with_response ( ac, MHD_HTTP_BAD_GATEWAY, - TALER_MHD_make_json_pack ( - "{s:s, s:I, s:I, s:I, s:O?}", - "hint", TALER_ErrorCode_get_hint ( + TALER_MHD_MAKE_JSON_PACK ( + TALER_JSON_pack_ec ( TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE), - "code", (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE, - "exchange_http_status", (json_int_t) hr->http_status, - "exchange_code", (json_int_t) hr->ec, - "exchange_reply", hr->reply)); + TMH_pack_exchange_reply (hr))); return; } /* Initiate refund operation for all coins of |