aboutsummaryrefslogtreecommitdiff
path: root/src/bank-lib/bank_api_credit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bank-lib/bank_api_credit.c')
-rw-r--r--src/bank-lib/bank_api_credit.c42
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",