diff options
Diffstat (limited to 'src/bank-lib/bank_api_credit.c')
-rw-r--r-- | src/bank-lib/bank_api_credit.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/bank-lib/bank_api_credit.c b/src/bank-lib/bank_api_credit.c index 127ae057d..124415b80 100644 --- a/src/bank-lib/bank_api_credit.c +++ b/src/bank-lib/bank_api_credit.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2017--2021 Taler Systems SA + Copyright (C) 2017--2023 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -82,24 +82,30 @@ parse_account_history (struct TALER_BANK_CreditHistoryHandle *hh, .ec = TALER_EC_NONE, .response = history }; - json_t *history_array; + const json_t *history_array; + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_array_const ("incoming_transactions", + &history_array), + GNUNET_JSON_spec_string ("credit_account", + &chr.details.ok.credit_account_uri), + GNUNET_JSON_spec_end () + }; - if (NULL == (history_array = json_object_get (history, - "incoming_transactions"))) - { - GNUNET_break_op (0); - return GNUNET_SYSERR; - } - if (! json_is_array (history_array)) + if (GNUNET_OK != + GNUNET_JSON_parse (history, + spec, + NULL, + NULL)) { GNUNET_break_op (0); return GNUNET_SYSERR; } { size_t len = json_array_size (history_array); - struct TALER_BANK_CreditDetails cd[len]; + struct TALER_BANK_CreditDetails cd[GNUNET_NZL (len)]; - for (unsigned int i = 0; i<json_array_size (history_array); i++) + GNUNET_break_op (0 != len); + for (size_t i = 0; i<len; i++) { struct TALER_BANK_CreditDetails *td = &cd[i]; struct GNUNET_JSON_Specification hist_spec[] = { @@ -113,8 +119,6 @@ parse_account_history (struct TALER_BANK_CreditHistoryHandle *hh, &td->reserve_pub), GNUNET_JSON_spec_string ("debit_account", &td->debit_account_uri), - GNUNET_JSON_spec_string ("credit_account", - &td->credit_account_uri), GNUNET_JSON_spec_end () }; json_t *transaction = json_array_get (history_array, @@ -130,8 +134,8 @@ parse_account_history (struct TALER_BANK_CreditHistoryHandle *hh, return GNUNET_SYSERR; } } - chr.details.success.details_length = len; - chr.details.success.details = cd; + chr.details.ok.details_length = len; + chr.details.ok.details = cd; hh->hcb (hh->hcb_cls, &chr); } @@ -154,7 +158,7 @@ handle_credit_history_finished (void *cls, { struct TALER_BANK_CreditHistoryHandle *hh = cls; struct TALER_BANK_CreditHistoryResponse chr = { - .http_status = MHD_HTTP_OK, + .http_status = response_code, .response = response }; @@ -247,12 +251,15 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx, { if ( (0 < num_results) && (! GNUNET_TIME_relative_is_zero (timeout)) ) + /* 0 == start_row is implied, go with timeout into future */ GNUNET_snprintf (url, sizeof (url), "history/incoming?delta=%lld&long_poll_ms=%llu", (long long) num_results, tms); else + /* Going back from current transaction or have no timeout; + hence timeout makes no sense */ GNUNET_snprintf (url, sizeof (url), "history/incoming?delta=%lld", @@ -262,6 +269,7 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx, { if ( (0 < num_results) && (! GNUNET_TIME_relative_is_zero (timeout)) ) + /* going forward from num_result */ GNUNET_snprintf (url, sizeof (url), "history/incoming?delta=%lld&start=%llu&long_poll_ms=%llu", @@ -269,6 +277,8 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx, (unsigned long long) start_row, tms); else + /* going backwards or have no timeout; + hence timeout makes no sense */ GNUNET_snprintf (url, sizeof (url), "history/incoming?delta=%lld&start=%llu", |