From 70462f0b94d933bec7b735fecb66a75a45c91c66 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 18 Oct 2016 23:05:29 +0200 Subject: implement #4497/#4705 -- addition of unique numeric error codes -- for the server-side of the exchange --- src/exchange-lib/exchange_api_reserve.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/exchange-lib/exchange_api_reserve.c') diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index 0bff767e..9de2b268 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -599,7 +599,7 @@ reserve_withdraw_ok (struct TALER_EXCHANGE_ReserveWithdrawHandle *wsh, /** - * We got a 402 PAYMENT REQUIRED response for the /reserve/withdraw operation. + * We got a 403 FORBIDDEN response for the /reserve/withdraw operation. * Check the signatures on the withdraw transactions in the provided * history and that the balances add up. We don't do anything directly * with the information, as the JSON will be returned to the application. @@ -723,7 +723,7 @@ handle_reserve_withdraw_finished (void *cls, /* This should never happen, either us or the exchange is buggy (or API version conflict); just pass JSON reply to the application */ break; - case MHD_HTTP_PAYMENT_REQUIRED: + case MHD_HTTP_FORBIDDEN: /* The exchange says that the reserve has insufficient funds; check the signatures in the history... */ if (GNUNET_OK != -- cgit v1.2.3 From 7341b21fa3d6328f2c85747824899be54668e891 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 20 Oct 2016 21:00:40 +0200 Subject: return taler-specific error codes from C API as well (#4497/4705) --- src/exchange-lib/exchange_api_admin.c | 4 +- src/exchange-lib/exchange_api_common.c | 27 +++++++ src/exchange-lib/exchange_api_common.h | 12 ++++ src/exchange-lib/exchange_api_deposit.c | 1 + src/exchange-lib/exchange_api_refresh.c | 8 ++- src/exchange-lib/exchange_api_refresh_link.c | 8 ++- src/exchange-lib/exchange_api_refund.c | 1 + src/exchange-lib/exchange_api_reserve.c | 8 ++- src/exchange-lib/exchange_api_track_transaction.c | 1 + src/exchange-lib/exchange_api_track_transfer.c | 2 + src/exchange-lib/exchange_api_wire.c | 1 + src/exchange-lib/test_exchange_api.c | 22 ++++++ src/include/taler_error_codes.h | 87 ++++++++++++++++++++++- src/include/taler_exchange_service.h | 24 ++++++- 14 files changed, 199 insertions(+), 7 deletions(-) (limited to 'src/exchange-lib/exchange_api_reserve.c') diff --git a/src/exchange-lib/exchange_api_admin.c b/src/exchange-lib/exchange_api_admin.c index 524916e6..e17cd780 100644 --- a/src/exchange-lib/exchange_api_admin.c +++ b/src/exchange-lib/exchange_api_admin.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014, 2015 GNUnet e.V. + Copyright (C) 2014, 2015, 2016 GNUnet e.V. TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -29,6 +29,7 @@ #include "taler_json_lib.h" #include "taler_exchange_service.h" #include "exchange_api_handle.h" +#include "exchange_api_common.h" #include "taler_signatures.h" @@ -129,6 +130,7 @@ handle_admin_add_incoming_finished (void *cls, } aai->cb (aai->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), json); TALER_EXCHANGE_admin_add_incoming_cancel (aai); } diff --git a/src/exchange-lib/exchange_api_common.c b/src/exchange-lib/exchange_api_common.c index e6ab2cbc..445e2f13 100644 --- a/src/exchange-lib/exchange_api_common.c +++ b/src/exchange-lib/exchange_api_common.c @@ -27,6 +27,33 @@ #include "taler_signatures.h" +/** + * Extract the Taler error code from the given @a json object. + * Note that #TALER_EC_NONE is returned if no "code" is present. + * + * @param json response to extract the error code from + * @return the "code" value from @a json + */ +enum TALER_ErrorCode +TALER_EXCHANGE_json_get_error_code (const json_t *json) +{ + const json_t *jc; + + if (NULL == json) + { + GNUNET_break_op (0); + return TALER_EC_INVALID_RESPONSE; + } + jc = json_object_get (json, "code"); + if (NULL == jc) + return TALER_EC_NONE; + if (json_is_integer (jc)) + return (enum TALER_ErrorCode) json_integer_value (jc); + GNUNET_break_op (0); + return TALER_EC_INVALID; +} + + /** * Verify a coins transaction history as returned by the exchange. * diff --git a/src/exchange-lib/exchange_api_common.h b/src/exchange-lib/exchange_api_common.h index 5655f5d3..bea36258 100644 --- a/src/exchange-lib/exchange_api_common.h +++ b/src/exchange-lib/exchange_api_common.h @@ -23,6 +23,18 @@ #include #include "taler_exchange_service.h" + +/** + * Extract the Taler error code from the given @a json object. + * Note that #TALER_EC_NONE is returned if no "code" is present. + * + * @param json response to extract the error code from + * @return the "code" value from @a json + */ +enum TALER_ErrorCode +TALER_EXCHANGE_json_get_error_code (const json_t *json); + + /** * Verify a coins transaction history as returned by the exchange. * diff --git a/src/exchange-lib/exchange_api_deposit.c b/src/exchange-lib/exchange_api_deposit.c index aa7e07ed..63ae87d0 100644 --- a/src/exchange-lib/exchange_api_deposit.c +++ b/src/exchange-lib/exchange_api_deposit.c @@ -262,6 +262,7 @@ handle_deposit_finished (void *cls, } dh->cb (dh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), ep, json); TALER_EXCHANGE_deposit_cancel (dh); diff --git a/src/exchange-lib/exchange_api_refresh.c b/src/exchange-lib/exchange_api_refresh.c index 6d12a718..e185ef98 100644 --- a/src/exchange-lib/exchange_api_refresh.c +++ b/src/exchange-lib/exchange_api_refresh.c @@ -1115,6 +1115,7 @@ handle_refresh_melt_finished (void *cls, { rmh->melt_cb (rmh->melt_cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), noreveal_index, (0 == response_code) ? NULL : &exchange_pub, json); @@ -1160,6 +1161,7 @@ handle_refresh_melt_finished (void *cls, if (NULL != rmh->melt_cb) rmh->melt_cb (rmh->melt_cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), UINT16_MAX, NULL, json); @@ -1598,6 +1600,7 @@ handle_refresh_reveal_finished (void *cls, { rrh->reveal_cb (rrh->reveal_cb_cls, MHD_HTTP_OK, + TALER_EC_NONE, rrh->md->num_fresh_coins, coin_privs, sigs, @@ -1634,7 +1637,10 @@ handle_refresh_reveal_finished (void *cls, if (NULL != rrh->reveal_cb) rrh->reveal_cb (rrh->reveal_cb_cls, response_code, - 0, NULL, NULL, + TALER_EXCHANGE_json_get_error_code (json), + 0, + NULL, + NULL, json); TALER_EXCHANGE_refresh_reveal_cancel (rrh); } diff --git a/src/exchange-lib/exchange_api_refresh_link.c b/src/exchange-lib/exchange_api_refresh_link.c index a1dba993..c5dbc389 100644 --- a/src/exchange-lib/exchange_api_refresh_link.c +++ b/src/exchange-lib/exchange_api_refresh_link.c @@ -27,6 +27,7 @@ #include "taler_exchange_service.h" #include "taler_json_lib.h" #include "exchange_api_handle.h" +#include "exchange_api_common.h" #include "taler_signatures.h" @@ -265,6 +266,7 @@ parse_refresh_link_ok (struct TALER_EXCHANGE_RefreshLinkHandle *rlh, { rlh->link_cb (rlh->link_cb_cls, MHD_HTTP_OK, + TALER_EC_NONE, num_coins, coin_privs, sigs, @@ -345,7 +347,11 @@ handle_refresh_link_finished (void *cls, if (NULL != rlh->link_cb) rlh->link_cb (rlh->link_cb_cls, response_code, - 0, NULL, NULL, NULL, + TALER_EXCHANGE_json_get_error_code (json), + 0, + NULL, + NULL, + NULL, json); TALER_EXCHANGE_refresh_link_cancel (rlh); } diff --git a/src/exchange-lib/exchange_api_refund.c b/src/exchange-lib/exchange_api_refund.c index f712f126..73dd6ce5 100644 --- a/src/exchange-lib/exchange_api_refund.c +++ b/src/exchange-lib/exchange_api_refund.c @@ -196,6 +196,7 @@ handle_refund_finished (void *cls, } rh->cb (rh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), ep, json); TALER_EXCHANGE_refund_cancel (rh); diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index 9de2b268..bcf37258 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -29,6 +29,7 @@ #include "taler_exchange_service.h" #include "taler_json_lib.h" #include "exchange_api_handle.h" +#include "exchange_api_common.h" #include "taler_signatures.h" @@ -314,7 +315,8 @@ handle_reserve_status_finished (void *cls, if (GNUNET_OK != GNUNET_JSON_parse (json, spec, - NULL, NULL)) + NULL, + NULL)) { GNUNET_break_op (0); response_code = 0; @@ -355,6 +357,7 @@ handle_reserve_status_finished (void *cls, } wsh->cb (wsh->cb_cls, response_code, + TALER_EC_NONE, json, &balance, len, @@ -387,6 +390,7 @@ handle_reserve_status_finished (void *cls, if (NULL != wsh->cb) wsh->cb (wsh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), json, NULL, 0, NULL); @@ -589,6 +593,7 @@ reserve_withdraw_ok (struct TALER_EXCHANGE_ReserveWithdrawHandle *wsh, dsig.rsa_signature = sig; wsh->cb (wsh->cb_cls, MHD_HTTP_OK, + TALER_EC_NONE, &dsig, json); /* make sure callback isn't called again after return */ @@ -762,6 +767,7 @@ handle_reserve_withdraw_finished (void *cls, if (NULL != wsh->cb) wsh->cb (wsh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), NULL, json); TALER_EXCHANGE_reserve_withdraw_cancel (wsh); diff --git a/src/exchange-lib/exchange_api_track_transaction.c b/src/exchange-lib/exchange_api_track_transaction.c index c05115d5..cf068573 100644 --- a/src/exchange-lib/exchange_api_track_transaction.c +++ b/src/exchange-lib/exchange_api_track_transaction.c @@ -239,6 +239,7 @@ handle_deposit_wtid_finished (void *cls, } dwh->cb (dwh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), ep, json, wtid, diff --git a/src/exchange-lib/exchange_api_track_transfer.c b/src/exchange-lib/exchange_api_track_transfer.c index ffcb19b5..0b45ecfc 100644 --- a/src/exchange-lib/exchange_api_track_transfer.c +++ b/src/exchange-lib/exchange_api_track_transfer.c @@ -183,6 +183,7 @@ check_track_transfer_response_ok (struct TALER_EXCHANGE_TrackTransferHandle *wdh } wdh->cb (wdh->cb_cls, MHD_HTTP_OK, + TALER_EC_NONE, &exchange_pub, json, &h_wire, @@ -253,6 +254,7 @@ handle_track_transfer_finished (void *cls, } wdh->cb (wdh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), NULL, json, NULL, diff --git a/src/exchange-lib/exchange_api_wire.c b/src/exchange-lib/exchange_api_wire.c index cb8df494..60e9113a 100644 --- a/src/exchange-lib/exchange_api_wire.c +++ b/src/exchange-lib/exchange_api_wire.c @@ -210,6 +210,7 @@ handle_wire_finished (void *cls, } wh->cb (wh->cb_cls, response_code, + TALER_EXCHANGE_json_get_error_code (json), (NULL != keep) ? keep : json); if (NULL != keep) json_decref (keep); diff --git a/src/exchange-lib/test_exchange_api.c b/src/exchange-lib/test_exchange_api.c index 80007c66..39b8bece 100644 --- a/src/exchange-lib/test_exchange_api.c +++ b/src/exchange-lib/test_exchange_api.c @@ -761,11 +761,13 @@ next_command (struct InterpreterState *is) * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param full_response full response from the exchange (for logging, in case of errors) */ static void add_incoming_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const json_t *full_response) { struct InterpreterState *is = cls; @@ -857,6 +859,7 @@ compare_reserve_withdraw_history (const struct TALER_EXCHANGE_ReserveHistory *h, * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param[in] json original response in JSON format (useful only for diagnostics) * @param balance current balance in the reserve, NULL on error * @param history_length number of entries in the transaction history, 0 on error @@ -865,6 +868,7 @@ compare_reserve_withdraw_history (const struct TALER_EXCHANGE_ReserveHistory *h, static void reserve_status_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const json_t *json, const struct TALER_Amount *balance, unsigned int history_length, @@ -973,12 +977,14 @@ reserve_status_cb (void *cls, * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param sig signature over the coin, NULL on error * @param full_response full response from the exchange (for logging, in case of errors) */ static void reserve_withdraw_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_DenominationSignature *sig, const json_t *full_response) { @@ -1027,6 +1033,7 @@ reserve_withdraw_cb (void *cls, * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful deposit; * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param exchange_pub public key the exchange used for signing * @param obj the received JSON reply, should be kept as proof (and, in case of errors, * be forwarded to the customer) @@ -1034,6 +1041,7 @@ reserve_withdraw_cb (void *cls, static void deposit_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *exchange_pub, const json_t *obj) { @@ -1061,6 +1069,7 @@ deposit_cb (void *cls, * @param cls closure with the interpreter state * @param http_status HTTP response code, never #MHD_HTTP_OK (200) as for successful intermediate response this callback is skipped. * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param noreveal_index choice by the exchange in the cut-and-choose protocol, * UINT16_MAX on error * @param exchange_pub public key the exchange used for signing @@ -1069,6 +1078,7 @@ deposit_cb (void *cls, static void melt_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, uint16_t noreveal_index, const struct TALER_ExchangePublicKeyP *exchange_pub, const json_t *full_response) @@ -1098,6 +1108,7 @@ melt_cb (void *cls, * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param num_coins number of fresh coins created, length of the @a sigs and @a coin_privs arrays, 0 if the operation failed * @param coin_privs array of @a num_coins private keys for the coins that were created, NULL on error * @param sigs array of signature over @a num_coins coins, NULL on error @@ -1106,6 +1117,7 @@ melt_cb (void *cls, static void reveal_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, unsigned int num_coins, const struct TALER_CoinSpendPrivateKeyP *coin_privs, const struct TALER_DenominationSignature *sigs, @@ -1160,6 +1172,7 @@ reveal_cb (void *cls, * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param num_coins number of fresh coins created, length of the @a sigs and @a coin_privs arrays, 0 if the operation failed * @param coin_privs array of @a num_coins private keys for the coins that were created, NULL on error * @param sigs array of signature over @a num_coins coins, NULL on error @@ -1169,6 +1182,7 @@ reveal_cb (void *cls, static void link_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, unsigned int num_coins, const struct TALER_CoinSpendPrivateKeyP *coin_privs, const struct TALER_DenominationSignature *sigs, @@ -1336,12 +1350,14 @@ find_pk (const struct TALER_EXCHANGE_Keys *keys, * @param cls closure with the interpreter state * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful request; * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param obj the received JSON reply, if successful this should be the wire * format details as provided by /wire. */ static void wire_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const json_t *obj) { struct InterpreterState *is = cls; @@ -1391,6 +1407,7 @@ wire_cb (void *cls, * * @param cls closure * @param http_status HTTP status code we got, 0 on exchange protocol violation + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param exchange_pub public key the exchange used for signing * @param json original json reply (may include signatures, those have then been * validated already) @@ -1404,6 +1421,7 @@ wire_cb (void *cls, static void wire_deposits_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *exchange_pub, const json_t *json, const struct GNUNET_HashCode *h_wire, @@ -1521,6 +1539,7 @@ wire_deposits_cb (void *cls, * * @param cls closure * @param http_status HTTP status code we got, 0 on exchange protocol violation + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param exchange_pub public key the exchange used for signing * @param json original json reply (may include signatures, those have then been * validated already) @@ -1534,6 +1553,7 @@ wire_deposits_cb (void *cls, static void deposit_wtid_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *exchange_pub, const json_t *json, const struct TALER_WireTransferIdentifierRawP *wtid, @@ -1588,6 +1608,7 @@ deposit_wtid_cb (void *cls, * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful deposit; * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param exchange_pub public key the exchange used for signing @a obj * @param obj the received JSON reply, should be kept as proof (and, in particular, * be forwarded to the customer) @@ -1595,6 +1616,7 @@ deposit_wtid_cb (void *cls, static void refund_cb (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *exchange_pub, const json_t *obj) { diff --git a/src/include/taler_error_codes.h b/src/include/taler_error_codes.h index dbe18993..632c160a 100644 --- a/src/include/taler_error_codes.h +++ b/src/include/taler_error_codes.h @@ -33,10 +33,22 @@ enum TALER_ErrorCode { /** - * Special code to indicate no error. + * Special code to indicate no error (or no "code" present). */ TALER_EC_NONE = 0, + /** + * Special code to indicate that a non-integer error code was + * returned in the JSON response. + */ + TALER_EC_INVALID = 1, + + /** + * The response we got from the server was not even in JSON format. + */ + TALER_EC_INVALID_RESPONSE = 2, + + /* ********** generic error codes ************* */ /** @@ -974,6 +986,33 @@ enum TALER_ErrorCode */ TALER_EC_TRACK_TRANSACTION_DB_NO_DEPOSITS_ERROR = 2305, + /** + * We failed to obtain a wire transfer identifier for one + * of the coins in the transaction. The response is + * provided with HTTP status code MHD_HTTP_FAILED_DEPENDENCY if + * the exchange had a hard error, or MHD_HTTP_ACCEPTED if the + * exchange signaled that the transfer was in progress. + */ + TALER_EC_TRACK_TRANSACTION_COIN_TRACE_ERROR = 2306, + + /** + * We failed to obtain the full wire transfer identifier for the + * transfer one of the coins was aggregated into. + * The response is + * provided with HTTP status code MHD_HTTP_FAILED_DEPENDENCY. + */ + TALER_EC_TRACK_TRANSACTION_WIRE_TRANSFER_TRACE_ERROR = 2307, + + /** + * We got conflicting reports from the exhange with + * respect to which transfers are included in which + * aggregate. + * The response is + * provided with HTTP status code MHD_HTTP_FAILED_DEPENDENCY. + */ + TALER_EC_TRACK_TRANSACTION_CONFLICTING_REPORTS = 2308, + + /** * We failed to contact the exchange for the /track/transfer * request. This response is provided with HTTP status code @@ -986,8 +1025,52 @@ enum TALER_ErrorCode * in the request. This response is * provided with HTTP status code MHD_HTTP_NOT_FOUND. */ - TALER_EC_TRACK_TRANSFER_INSTANCE_UNKNOWN = 2000, + TALER_EC_TRACK_TRANSFER_INSTANCE_UNKNOWN = 2401, + + /** + * We failed to persist coin wire transfer information in + * our merchant database. + * The response is + * provided with HTTP status code MHD_HTTP_INTERNAL_SERVER_ERROR. + */ + TALER_EC_TRACK_TRANSFER_DB_STORE_COIN_ERROR = 2402, + /** + * We internally failed to execute the /track/transfer request. + * The response is + * provided with HTTP status code MHD_HTTP_INTERNAL_SERVER_ERROR. + */ + TALER_EC_TRACK_TRANSFER_REQUEST_ERROR = 2403, + + /** + * We failed to persist wire transfer information in + * our merchant database. + * The response is + * provided with HTTP status code MHD_HTTP_INTERNAL_SERVER_ERROR. + */ + TALER_EC_TRACK_TRANSFER_DB_STORE_TRANSER_ERROR = 2404, + + /** + * The exchange returned an error from /track/transfer. + * The response is + * provided with HTTP status code MHD_HTTP_FAILED_DEPENDENCY. + */ + TALER_EC_TRACK_TRANSFER_EXCHANGE_ERROR = 2405, + + /** + * We failed to fetch deposit information from + * our merchant database. + * The response is + * provided with HTTP status code MHD_HTTP_INTERNAL_SERVER_ERROR. + */ + TALER_EC_TRACK_TRANSFER_DB_FETCH_DEPOSIT_ERROR = 2406, + + /** + * We encountered an internal logic error. + * The response is + * provided with HTTP status code MHD_HTTP_INTERNAL_SERVER_ERROR. + */ + TALER_EC_TRACK_TRANSFER_DB_INTERNAL_LOGIC_ERROR = 2407, /* ********** /test API error codes ************* */ diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h index 9e3c48c4..d1f6dbbe 100644 --- a/src/include/taler_exchange_service.h +++ b/src/include/taler_exchange_service.h @@ -24,6 +24,7 @@ #include #include "taler_util.h" +#include "taler_error_codes.h" #include @@ -355,6 +356,7 @@ struct TALER_EXCHANGE_WireHandle; * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful request; * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param obj the received JSON reply, if successful this should be the wire * format details as provided by /wire, or NULL if the * reply was not in JSON format. @@ -362,6 +364,7 @@ struct TALER_EXCHANGE_WireHandle; typedef void (*TALER_EXCHANGE_WireResultCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const json_t *obj); @@ -423,6 +426,7 @@ struct TALER_EXCHANGE_DepositHandle; typedef void (*TALER_EXCHANGE_DepositResultCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *sign_key, const json_t *obj); @@ -504,6 +508,7 @@ struct TALER_EXCHANGE_RefundHandle; * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful deposit; * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param sign_key exchange key used to sign @a obj, or NULL * @param obj the received JSON reply, should be kept as proof (and, in particular, * be forwarded to the customer) @@ -511,6 +516,7 @@ struct TALER_EXCHANGE_RefundHandle; typedef void (*TALER_EXCHANGE_RefundResultCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *sign_key, const json_t *obj); @@ -650,6 +656,7 @@ struct TALER_EXCHANGE_ReserveHistory * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param[in] json original response in JSON format (useful only for diagnostics) * @param balance current balance in the reserve, NULL on error * @param history_length number of entries in the transaction history, 0 on error @@ -658,6 +665,7 @@ struct TALER_EXCHANGE_ReserveHistory typedef void (*TALER_EXCHANGE_ReserveStatusResultCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const json_t *json, const struct TALER_Amount *balance, unsigned int history_length, @@ -713,12 +721,14 @@ struct TALER_EXCHANGE_ReserveWithdrawHandle; * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param sig signature over the coin, NULL on error * @param full_response full response from the exchange (for logging, in case of errors) */ typedef void (*TALER_EXCHANGE_ReserveWithdrawResultCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_DenominationSignature *sig, const json_t *full_response); @@ -835,6 +845,7 @@ struct TALER_EXCHANGE_RefreshMeltHandle; * @param cls closure * @param http_status HTTP response code, never #MHD_HTTP_OK (200) as for successful intermediate response this callback is skipped. * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param noreveal_index choice by the exchange in the cut-and-choose protocol, * UINT16_MAX on error * @param sign_key exchange key used to sign @a full_response, or NULL @@ -843,7 +854,8 @@ struct TALER_EXCHANGE_RefreshMeltHandle; typedef void (*TALER_EXCHANGE_RefreshMeltCallback) (void *cls, unsigned int http_status, - uint16_t noreveal_index, + enum TALER_ErrorCode ec, + uint16_t noreveal_index, const struct TALER_ExchangePublicKeyP *sign_key, const json_t *full_response); @@ -900,6 +912,7 @@ TALER_EXCHANGE_refresh_melt_cancel (struct TALER_EXCHANGE_RefreshMeltHandle *rmh * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param num_coins number of fresh coins created, length of the @a sigs and @a coin_privs arrays, 0 if the operation failed * @param coin_privs array of @a num_coins private keys for the coins that were created, NULL on error * @param sigs array of signature over @a num_coins coins, NULL on error @@ -908,6 +921,7 @@ TALER_EXCHANGE_refresh_melt_cancel (struct TALER_EXCHANGE_RefreshMeltHandle *rmh typedef void (*TALER_EXCHANGE_RefreshRevealCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, unsigned int num_coins, const struct TALER_CoinSpendPrivateKeyP *coin_privs, const struct TALER_DenominationSignature *sigs, @@ -979,6 +993,7 @@ struct TALER_EXCHANGE_RefreshLinkHandle; * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param num_coins number of fresh coins created, length of the @a sigs and @a coin_privs arrays, 0 if the operation failed * @param coin_privs array of @a num_coins private keys for the coins that were created, NULL on error * @param sigs array of signature over @a num_coins coins, NULL on error @@ -988,6 +1003,7 @@ struct TALER_EXCHANGE_RefreshLinkHandle; typedef void (*TALER_EXCHANGE_RefreshLinkCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, unsigned int num_coins, const struct TALER_CoinSpendPrivateKeyP *coin_privs, const struct TALER_DenominationSignature *sigs, @@ -1043,11 +1059,13 @@ struct TALER_EXCHANGE_AdminAddIncomingHandle; * @param cls closure * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request * 0 if the exchange's reply is bogus (fails to follow the protocol) + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param full_response full response from the exchange (for logging, in case of errors) */ typedef void (*TALER_EXCHANGE_AdminAddIncomingResultCallback) (void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const json_t *full_response); @@ -1108,6 +1126,7 @@ struct TALER_EXCHANGE_TrackTransferHandle; * * @param cls closure * @param http_status HTTP status code we got, 0 on exchange protocol violation + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param sign_key exchange key used to sign @a json, or NULL * @param json original json reply (may include signatures, those have then been * validated already) @@ -1121,6 +1140,7 @@ struct TALER_EXCHANGE_TrackTransferHandle; typedef void (*TALER_EXCHANGE_TrackTransferCallback)(void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *sign_key, const json_t *json, const struct GNUNET_HashCode *h_wire, @@ -1171,6 +1191,7 @@ struct TALER_EXCHANGE_TrackTransactionHandle; * * @param cls closure * @param http_status HTTP status code we got, 0 on exchange protocol violation + * @param ec taler-specific error code, #TALER_EC_NONE on success * @param sign_key exchange key used to sign @a json, or NULL * @param json original json reply (may include signatures, those have then been * validated already) @@ -1182,6 +1203,7 @@ struct TALER_EXCHANGE_TrackTransactionHandle; typedef void (*TALER_EXCHANGE_TrackTransactionCallback)(void *cls, unsigned int http_status, + enum TALER_ErrorCode ec, const struct TALER_ExchangePublicKeyP *sign_key, const json_t *json, const struct TALER_WireTransferIdentifierRawP *wtid, -- cgit v1.2.3 From 63c5706b64a5fe2989514c5f18e2926b91e420de Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 20 Oct 2016 21:11:20 +0200 Subject: remove redundant exchange_api_common.h header --- src/exchange-lib/Makefile.am | 2 +- src/exchange-lib/exchange_api_admin.c | 1 - src/exchange-lib/exchange_api_common.c | 1 - src/exchange-lib/exchange_api_common.h | 53 ----------------------- src/exchange-lib/exchange_api_deposit.c | 1 - src/exchange-lib/exchange_api_refresh.c | 1 - src/exchange-lib/exchange_api_refresh_link.c | 1 - src/exchange-lib/exchange_api_refund.c | 1 - src/exchange-lib/exchange_api_reserve.c | 1 - src/exchange-lib/exchange_api_track_transaction.c | 1 - src/exchange-lib/exchange_api_track_transfer.c | 1 - src/exchange-lib/exchange_api_wire.c | 1 - src/include/taler_exchange_service.h | 12 +++++ 13 files changed, 13 insertions(+), 64 deletions(-) delete mode 100644 src/exchange-lib/exchange_api_common.h (limited to 'src/exchange-lib/exchange_api_reserve.c') diff --git a/src/exchange-lib/Makefile.am b/src/exchange-lib/Makefile.am index 83fcf147..19c36744 100644 --- a/src/exchange-lib/Makefile.am +++ b/src/exchange-lib/Makefile.am @@ -14,7 +14,7 @@ libtalerexchange_la_LDFLAGS = \ -no-undefined libtalerexchange_la_SOURCES = \ - exchange_api_common.c exchange_api_common.h \ + exchange_api_common.c \ exchange_api_handle.c exchange_api_handle.h \ exchange_api_admin.c \ exchange_api_deposit.c \ diff --git a/src/exchange-lib/exchange_api_admin.c b/src/exchange-lib/exchange_api_admin.c index e17cd780..d50afdc6 100644 --- a/src/exchange-lib/exchange_api_admin.c +++ b/src/exchange-lib/exchange_api_admin.c @@ -29,7 +29,6 @@ #include "taler_json_lib.h" #include "taler_exchange_service.h" #include "exchange_api_handle.h" -#include "exchange_api_common.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_common.c b/src/exchange-lib/exchange_api_common.c index 445e2f13..bd45619d 100644 --- a/src/exchange-lib/exchange_api_common.c +++ b/src/exchange-lib/exchange_api_common.c @@ -20,7 +20,6 @@ * @author Christian Grothoff */ #include "platform.h" -#include "exchange_api_common.h" #include "taler_json_lib.h" #include #include "exchange_api_handle.h" diff --git a/src/exchange-lib/exchange_api_common.h b/src/exchange-lib/exchange_api_common.h deleted file mode 100644 index bea36258..00000000 --- a/src/exchange-lib/exchange_api_common.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2015 GNUnet e.V. - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see - -*/ -/** - * @file exchange-lib/exchange_api_common.h - * @brief common functions for the exchange API - * @author Christian Grothoff - */ -#include -#include -#include "taler_exchange_service.h" - - -/** - * Extract the Taler error code from the given @a json object. - * Note that #TALER_EC_NONE is returned if no "code" is present. - * - * @param json response to extract the error code from - * @return the "code" value from @a json - */ -enum TALER_ErrorCode -TALER_EXCHANGE_json_get_error_code (const json_t *json); - - -/** - * Verify a coins transaction history as returned by the exchange. - * - * @param currency expected currency for the coin - * @param coin_pub public key of the coin - * @param history history of the coin in json encoding - * @param[out] total how much of the coin has been spent according to @a history - * @return #GNUNET_OK if @a history is valid, #GNUNET_SYSERR if not - */ -int -TALER_EXCHANGE_verify_coin_history (const char *currency, - const struct TALER_CoinSpendPublicKeyP *coin_pub, - json_t *history, - struct TALER_Amount *total); - -/* end of exchange_api_common.h */ diff --git a/src/exchange-lib/exchange_api_deposit.c b/src/exchange-lib/exchange_api_deposit.c index 63ae87d0..416f4419 100644 --- a/src/exchange-lib/exchange_api_deposit.c +++ b/src/exchange-lib/exchange_api_deposit.c @@ -29,7 +29,6 @@ #include #include "taler_json_lib.h" #include "taler_exchange_service.h" -#include "exchange_api_common.h" #include "exchange_api_handle.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_refresh.c b/src/exchange-lib/exchange_api_refresh.c index e185ef98..556a53c4 100644 --- a/src/exchange-lib/exchange_api_refresh.c +++ b/src/exchange-lib/exchange_api_refresh.c @@ -28,7 +28,6 @@ #include #include "taler_json_lib.h" #include "taler_exchange_service.h" -#include "exchange_api_common.h" #include "exchange_api_handle.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_refresh_link.c b/src/exchange-lib/exchange_api_refresh_link.c index c5dbc389..32f3f2ad 100644 --- a/src/exchange-lib/exchange_api_refresh_link.c +++ b/src/exchange-lib/exchange_api_refresh_link.c @@ -27,7 +27,6 @@ #include "taler_exchange_service.h" #include "taler_json_lib.h" #include "exchange_api_handle.h" -#include "exchange_api_common.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_refund.c b/src/exchange-lib/exchange_api_refund.c index 73dd6ce5..0d5656e1 100644 --- a/src/exchange-lib/exchange_api_refund.c +++ b/src/exchange-lib/exchange_api_refund.c @@ -28,7 +28,6 @@ #include #include "taler_json_lib.h" #include "taler_exchange_service.h" -#include "exchange_api_common.h" #include "exchange_api_handle.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index bcf37258..bbba4f2b 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -29,7 +29,6 @@ #include "taler_exchange_service.h" #include "taler_json_lib.h" #include "exchange_api_handle.h" -#include "exchange_api_common.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_track_transaction.c b/src/exchange-lib/exchange_api_track_transaction.c index cf068573..50e10c44 100644 --- a/src/exchange-lib/exchange_api_track_transaction.c +++ b/src/exchange-lib/exchange_api_track_transaction.c @@ -28,7 +28,6 @@ #include #include "taler_json_lib.h" #include "taler_exchange_service.h" -#include "exchange_api_common.h" #include "exchange_api_handle.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_track_transfer.c b/src/exchange-lib/exchange_api_track_transfer.c index 0b45ecfc..c4ad3fd2 100644 --- a/src/exchange-lib/exchange_api_track_transfer.c +++ b/src/exchange-lib/exchange_api_track_transfer.c @@ -26,7 +26,6 @@ #include #include #include "taler_exchange_service.h" -#include "exchange_api_common.h" #include "taler_json_lib.h" #include "exchange_api_handle.h" #include "taler_signatures.h" diff --git a/src/exchange-lib/exchange_api_wire.c b/src/exchange-lib/exchange_api_wire.c index 60e9113a..71a717d4 100644 --- a/src/exchange-lib/exchange_api_wire.c +++ b/src/exchange-lib/exchange_api_wire.c @@ -28,7 +28,6 @@ #include "taler_exchange_service.h" #include "taler_json_lib.h" #include "taler_wire_plugin.h" -#include "exchange_api_common.h" #include "exchange_api_handle.h" diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h index d1f6dbbe..1629ddcf 100644 --- a/src/include/taler_exchange_service.h +++ b/src/include/taler_exchange_service.h @@ -1262,4 +1262,16 @@ TALER_EXCHANGE_verify_coin_history (const char *currency, json_t *history, struct TALER_Amount *total); + +/** + * Extract the Taler error code from the given @a json object. + * Note that #TALER_EC_NONE is returned if no "code" is present. + * + * @param json response to extract the error code from + * @return the "code" value from @a json + */ +enum TALER_ErrorCode +TALER_EXCHANGE_json_get_error_code (const json_t *json); + + #endif /* _TALER_EXCHANGE_SERVICE_H */ -- cgit v1.2.3 From 19f4c50dabd6a4c29749a9c758e7e0da99d9e31f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 20 Oct 2016 21:19:01 +0200 Subject: rename and move TALER_EXCHANGE_json_get_error_code to TALER_JSON_get_error_code --- src/exchange-lib/exchange_api_admin.c | 2 +- src/exchange-lib/exchange_api_common.c | 27 --------------------- src/exchange-lib/exchange_api_deposit.c | 2 +- src/exchange-lib/exchange_api_refresh.c | 6 ++--- src/exchange-lib/exchange_api_refresh_link.c | 2 +- src/exchange-lib/exchange_api_refund.c | 2 +- src/exchange-lib/exchange_api_reserve.c | 4 ++-- src/exchange-lib/exchange_api_track_transaction.c | 2 +- src/exchange-lib/exchange_api_track_transfer.c | 2 +- src/exchange-lib/exchange_api_wire.c | 2 +- src/include/taler_exchange_service.h | 11 --------- src/include/taler_json_lib.h | 12 ++++++++++ src/include/taler_util.h | 2 ++ src/json/json.c | 29 +++++++++++++++++++++++ 14 files changed, 55 insertions(+), 50 deletions(-) (limited to 'src/exchange-lib/exchange_api_reserve.c') diff --git a/src/exchange-lib/exchange_api_admin.c b/src/exchange-lib/exchange_api_admin.c index d50afdc6..e6cb8101 100644 --- a/src/exchange-lib/exchange_api_admin.c +++ b/src/exchange-lib/exchange_api_admin.c @@ -129,7 +129,7 @@ handle_admin_add_incoming_finished (void *cls, } aai->cb (aai->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), json); TALER_EXCHANGE_admin_add_incoming_cancel (aai); } diff --git a/src/exchange-lib/exchange_api_common.c b/src/exchange-lib/exchange_api_common.c index bd45619d..a531b1c3 100644 --- a/src/exchange-lib/exchange_api_common.c +++ b/src/exchange-lib/exchange_api_common.c @@ -26,33 +26,6 @@ #include "taler_signatures.h" -/** - * Extract the Taler error code from the given @a json object. - * Note that #TALER_EC_NONE is returned if no "code" is present. - * - * @param json response to extract the error code from - * @return the "code" value from @a json - */ -enum TALER_ErrorCode -TALER_EXCHANGE_json_get_error_code (const json_t *json) -{ - const json_t *jc; - - if (NULL == json) - { - GNUNET_break_op (0); - return TALER_EC_INVALID_RESPONSE; - } - jc = json_object_get (json, "code"); - if (NULL == jc) - return TALER_EC_NONE; - if (json_is_integer (jc)) - return (enum TALER_ErrorCode) json_integer_value (jc); - GNUNET_break_op (0); - return TALER_EC_INVALID; -} - - /** * Verify a coins transaction history as returned by the exchange. * diff --git a/src/exchange-lib/exchange_api_deposit.c b/src/exchange-lib/exchange_api_deposit.c index 416f4419..9282bbfd 100644 --- a/src/exchange-lib/exchange_api_deposit.c +++ b/src/exchange-lib/exchange_api_deposit.c @@ -261,7 +261,7 @@ handle_deposit_finished (void *cls, } dh->cb (dh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), ep, json); TALER_EXCHANGE_deposit_cancel (dh); diff --git a/src/exchange-lib/exchange_api_refresh.c b/src/exchange-lib/exchange_api_refresh.c index 556a53c4..c3216a6e 100644 --- a/src/exchange-lib/exchange_api_refresh.c +++ b/src/exchange-lib/exchange_api_refresh.c @@ -1114,7 +1114,7 @@ handle_refresh_melt_finished (void *cls, { rmh->melt_cb (rmh->melt_cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), noreveal_index, (0 == response_code) ? NULL : &exchange_pub, json); @@ -1160,7 +1160,7 @@ handle_refresh_melt_finished (void *cls, if (NULL != rmh->melt_cb) rmh->melt_cb (rmh->melt_cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), UINT16_MAX, NULL, json); @@ -1636,7 +1636,7 @@ handle_refresh_reveal_finished (void *cls, if (NULL != rrh->reveal_cb) rrh->reveal_cb (rrh->reveal_cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), 0, NULL, NULL, diff --git a/src/exchange-lib/exchange_api_refresh_link.c b/src/exchange-lib/exchange_api_refresh_link.c index 32f3f2ad..9b825138 100644 --- a/src/exchange-lib/exchange_api_refresh_link.c +++ b/src/exchange-lib/exchange_api_refresh_link.c @@ -346,7 +346,7 @@ handle_refresh_link_finished (void *cls, if (NULL != rlh->link_cb) rlh->link_cb (rlh->link_cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), 0, NULL, NULL, diff --git a/src/exchange-lib/exchange_api_refund.c b/src/exchange-lib/exchange_api_refund.c index 0d5656e1..be080c57 100644 --- a/src/exchange-lib/exchange_api_refund.c +++ b/src/exchange-lib/exchange_api_refund.c @@ -195,7 +195,7 @@ handle_refund_finished (void *cls, } rh->cb (rh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), ep, json); TALER_EXCHANGE_refund_cancel (rh); diff --git a/src/exchange-lib/exchange_api_reserve.c b/src/exchange-lib/exchange_api_reserve.c index bbba4f2b..28f329c4 100644 --- a/src/exchange-lib/exchange_api_reserve.c +++ b/src/exchange-lib/exchange_api_reserve.c @@ -389,7 +389,7 @@ handle_reserve_status_finished (void *cls, if (NULL != wsh->cb) wsh->cb (wsh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), json, NULL, 0, NULL); @@ -766,7 +766,7 @@ handle_reserve_withdraw_finished (void *cls, if (NULL != wsh->cb) wsh->cb (wsh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), NULL, json); TALER_EXCHANGE_reserve_withdraw_cancel (wsh); diff --git a/src/exchange-lib/exchange_api_track_transaction.c b/src/exchange-lib/exchange_api_track_transaction.c index 50e10c44..7fd2efb2 100644 --- a/src/exchange-lib/exchange_api_track_transaction.c +++ b/src/exchange-lib/exchange_api_track_transaction.c @@ -238,7 +238,7 @@ handle_deposit_wtid_finished (void *cls, } dwh->cb (dwh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), ep, json, wtid, diff --git a/src/exchange-lib/exchange_api_track_transfer.c b/src/exchange-lib/exchange_api_track_transfer.c index c4ad3fd2..8ed5865d 100644 --- a/src/exchange-lib/exchange_api_track_transfer.c +++ b/src/exchange-lib/exchange_api_track_transfer.c @@ -253,7 +253,7 @@ handle_track_transfer_finished (void *cls, } wdh->cb (wdh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), NULL, json, NULL, diff --git a/src/exchange-lib/exchange_api_wire.c b/src/exchange-lib/exchange_api_wire.c index 71a717d4..7401e66d 100644 --- a/src/exchange-lib/exchange_api_wire.c +++ b/src/exchange-lib/exchange_api_wire.c @@ -209,7 +209,7 @@ handle_wire_finished (void *cls, } wh->cb (wh->cb_cls, response_code, - TALER_EXCHANGE_json_get_error_code (json), + TALER_JSON_get_error_code (json), (NULL != keep) ? keep : json); if (NULL != keep) json_decref (keep); diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h index 1629ddcf..e368f954 100644 --- a/src/include/taler_exchange_service.h +++ b/src/include/taler_exchange_service.h @@ -1263,15 +1263,4 @@ TALER_EXCHANGE_verify_coin_history (const char *currency, struct TALER_Amount *total); -/** - * Extract the Taler error code from the given @a json object. - * Note that #TALER_EC_NONE is returned if no "code" is present. - * - * @param json response to extract the error code from - * @return the "code" value from @a json - */ -enum TALER_ErrorCode -TALER_EXCHANGE_json_get_error_code (const json_t *json); - - #endif /* _TALER_EXCHANGE_SERVICE_H */ diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h index b47aea5b..b247ba1f 100644 --- a/src/include/taler_json_lib.h +++ b/src/include/taler_json_lib.h @@ -25,6 +25,7 @@ #include #include #include "taler_util.h" +#include "taler_error_codes.h" /** * Print JSON parsing related error information @@ -92,6 +93,17 @@ int TALER_JSON_hash (const json_t *json, struct GNUNET_HashCode *hc); +/** + * Extract the Taler error code from the given @a json object. + * Note that #TALER_EC_NONE is returned if no "code" is present. + * + * @param json response to extract the error code from + * @return the "code" value from @a json + */ +enum TALER_ErrorCode +TALER_JSON_get_error_code (const json_t *json); + + #endif /* TALER_JSON_LIB_H_ */ /* End of taler_json_lib.h */ diff --git a/src/include/taler_util.h b/src/include/taler_util.h index 613f860c..c115594f 100644 --- a/src/include/taler_util.h +++ b/src/include/taler_util.h @@ -117,4 +117,6 @@ const struct GNUNET_OS_ProjectData * TALER_project_data_default (void); + + #endif diff --git a/src/json/json.c b/src/json/json.c index 8f21447e..74559e6c 100644 --- a/src/json/json.c +++ b/src/json/json.c @@ -50,4 +50,33 @@ TALER_JSON_hash (const json_t *json, } + +/** + * Extract the Taler error code from the given @a json object. + * Note that #TALER_EC_NONE is returned if no "code" is present. + * + * @param json response to extract the error code from + * @return the "code" value from @a json + */ +enum TALER_ErrorCode +TALER_JSON_get_error_code (const json_t *json) +{ + const json_t *jc; + + if (NULL == json) + { + GNUNET_break_op (0); + return TALER_EC_INVALID_RESPONSE; + } + jc = json_object_get (json, "code"); + if (NULL == jc) + return TALER_EC_NONE; + if (json_is_integer (jc)) + return (enum TALER_ErrorCode) json_integer_value (jc); + GNUNET_break_op (0); + return TALER_EC_INVALID; +} + + + /* End of json/json.c */ -- cgit v1.2.3