diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-08-12 13:13:42 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-08-12 13:13:42 +0200 |
commit | f174781b570bb534db424e57a3b563a74ad36f77 (patch) | |
tree | 6f9b533837e57b3cfe8009318ab99c6352164655 /src/bank-lib | |
parent | 10d8342f90573215867adc9c7e561f09a61a7566 (diff) | |
download | exchange-f174781b570bb534db424e57a3b563a74ad36f77.tar.xz |
support long_poll_ms argument in bank API (#6987)
Diffstat (limited to 'src/bank-lib')
-rw-r--r-- | src/bank-lib/Makefile.am | 1 | ||||
-rw-r--r-- | src/bank-lib/bank_api_credit.c | 56 | ||||
-rw-r--r-- | src/bank-lib/bank_api_debit.c | 81 | ||||
-rw-r--r-- | src/bank-lib/fakebank.c | 12 | ||||
-rw-r--r-- | src/bank-lib/taler-exchange-wire-gateway-client.c | 18 | ||||
-rw-r--r-- | src/bank-lib/taler-fakebank-run.c | 13 |
6 files changed, 111 insertions, 70 deletions
diff --git a/src/bank-lib/Makefile.am b/src/bank-lib/Makefile.am index ef15a42d8..ffd428a6f 100644 --- a/src/bank-lib/Makefile.am +++ b/src/bank-lib/Makefile.am @@ -14,6 +14,7 @@ taler_fakebank_run_SOURCES = \ taler-fakebank-run.c taler_fakebank_run_LDADD = \ libtalerfakebank.la \ + $(top_builddir)/src/mhd/libtalermhd.la \ $(top_builddir)/src/util/libtalerutil.la \ -lgnunetutil diff --git a/src/bank-lib/bank_api_credit.c b/src/bank-lib/bank_api_credit.c index 095cc379c..91fbe506d 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--2020 Taler Systems SA + Copyright (C) 2017--2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -97,9 +97,9 @@ parse_account_history (struct TALER_BANK_CreditHistoryHandle *hh, GNUNET_JSON_spec_fixed_auto ("reserve_pub", &td.reserve_pub), GNUNET_JSON_spec_string ("debit_account", - &td.debit_account_url), + &td.debit_account_uri), GNUNET_JSON_spec_string ("credit_account", - &td.credit_account_url), + &td.credit_account_uri), GNUNET_JSON_spec_end () }; json_t *transaction = json_array_get (history_array, @@ -217,12 +217,14 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx, const struct TALER_BANK_AuthenticationData *auth, uint64_t start_row, int64_t num_results, + struct GNUNET_TIME_Relative timeout, TALER_BANK_CreditHistoryCallback hres_cb, void *hres_cb_cls) { char url[128]; struct TALER_BANK_CreditHistoryHandle *hh; CURL *eh; + unsigned long long tms; if (0 == num_results) { @@ -230,20 +232,43 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx, return NULL; } + tms = (unsigned long long) (timeout.rel_value_us + / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us); if ( ( (UINT64_MAX == start_row) && (0 > num_results) ) || ( (0 == start_row) && (0 < num_results) ) ) - GNUNET_snprintf (url, - sizeof (url), - "history/incoming?delta=%lld", - (long long) num_results); + { + if ( (0 < num_results) && + (! GNUNET_TIME_relative_is_zero (timeout)) ) + GNUNET_snprintf (url, + sizeof (url), + "history/incoming?delta=%lld&long_poll_ms=%llu", + (long long) num_results, + tms); + else + GNUNET_snprintf (url, + sizeof (url), + "history/incoming?delta=%lld", + (long long) num_results); + } else - GNUNET_snprintf (url, - sizeof (url), - "history/incoming?delta=%lld&start=%llu", - (long long) num_results, - (unsigned long long) start_row); + { + if ( (0 < num_results) && + (! GNUNET_TIME_relative_is_zero (timeout)) ) + GNUNET_snprintf (url, + sizeof (url), + "history/incoming?delta=%lld&start=%llu&long_poll_ms=%llu", + (long long) num_results, + (unsigned long long) start_row, + tms); + else + GNUNET_snprintf (url, + sizeof (url), + "history/incoming?delta=%lld&start=%llu", + (long long) num_results, + (unsigned long long) start_row); + } hh = GNUNET_new (struct TALER_BANK_CreditHistoryHandle); hh->hcb = hres_cb; hh->hcb_cls = hres_cb_cls; @@ -275,6 +300,13 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx, curl_easy_cleanup (eh); return NULL; } + if (0 != tms) + { + GNUNET_break (CURLE_OK == + curl_easy_setopt (eh, + CURLOPT_TIMEOUT_MS, + (long) tms)); + } hh->job = GNUNET_CURL_job_add2 (ctx, eh, NULL, diff --git a/src/bank-lib/bank_api_debit.c b/src/bank-lib/bank_api_debit.c index 0e1ec0c5d..8cca0cc50 100644 --- a/src/bank-lib/bank_api_debit.c +++ b/src/bank-lib/bank_api_debit.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2017--2020 Taler Systems SA + Copyright (C) 2017--2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -97,9 +97,9 @@ parse_account_history (struct TALER_BANK_DebitHistoryHandle *hh, GNUNET_JSON_spec_fixed_auto ("wtid", &td.wtid), GNUNET_JSON_spec_string ("credit_account", - &td.credit_account_url), + &td.credit_account_uri), GNUNET_JSON_spec_string ("debit_account", - &td.debit_account_url), + &td.debit_account_uri), GNUNET_JSON_spec_string ("exchange_base_url", &td.exchange_base_url), GNUNET_JSON_spec_end () @@ -214,35 +214,19 @@ handle_debit_history_finished (void *cls, } -/** - * Request the debit history of the exchange's bank account. - * - * @param ctx curl context for the event loop - * @param auth authentication data to use - * @param start_row from which row on do we want to get results, - * use UINT64_MAX for the latest; exclusive - * @param num_results how many results do we want; - * negative numbers to go into the past, positive numbers - * to go into the future starting at @a start_row; - * must not be zero. - * @param hres_cb the callback to call with the transaction - * history - * @param hres_cb_cls closure for the above callback - * @return NULL if the inputs are invalid (i.e. zero value for - * @e num_results). In this case, the callback is not - * called. - */ struct TALER_BANK_DebitHistoryHandle * TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx, const struct TALER_BANK_AuthenticationData *auth, uint64_t start_row, int64_t num_results, + struct GNUNET_TIME_Relative timeout, TALER_BANK_DebitHistoryCallback hres_cb, void *hres_cb_cls) { char url[128]; struct TALER_BANK_DebitHistoryHandle *hh; CURL *eh; + unsigned long long tms; if (0 == num_results) { @@ -250,20 +234,43 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx, return NULL; } + tms = (unsigned long long) (timeout.rel_value_us + / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us); if ( ( (UINT64_MAX == start_row) && (0 > num_results) ) || ( (0 == start_row) && (0 < num_results) ) ) - GNUNET_snprintf (url, - sizeof (url), - "history/outgoing?delta=%lld", - (long long) num_results); + { + if ( (0 < num_results) && + (! GNUNET_TIME_relative_is_zero (timeout)) ) + GNUNET_snprintf (url, + sizeof (url), + "history/outgoing?delta=%lld&long_poll_ms=%llu", + (long long) num_results, + tms); + else + GNUNET_snprintf (url, + sizeof (url), + "history/outgoing?delta=%lld", + (long long) num_results); + } else - GNUNET_snprintf (url, - sizeof (url), - "history/outgoing?delta=%lld&start=%llu", - (long long) num_results, - (unsigned long long) start_row); + { + if ( (0 < num_results) && + (! GNUNET_TIME_relative_is_zero (timeout)) ) + GNUNET_snprintf (url, + sizeof (url), + "history/outgoing?delta=%lld&start=%llu&long_poll_ms=%llu", + (long long) num_results, + (unsigned long long) start_row, + tms); + else + GNUNET_snprintf (url, + sizeof (url), + "history/outgoing?delta=%lld&start=%llu", + (long long) num_results, + (unsigned long long) start_row); + } hh = GNUNET_new (struct TALER_BANK_DebitHistoryHandle); hh->hcb = hres_cb; hh->hcb_cls = hres_cb_cls; @@ -295,6 +302,13 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx, curl_easy_cleanup (eh); return NULL; } + if (0 != tms) + { + GNUNET_break (CURLE_OK == + curl_easy_setopt (eh, + CURLOPT_TIMEOUT_MS, + (long) tms)); + } hh->job = GNUNET_CURL_job_add2 (ctx, eh, NULL, @@ -304,13 +318,6 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx, } -/** - * Cancel a history request. This function cannot be - * used on a request handle if a response is already - * served for it. - * - * @param hh the history request handle - */ void TALER_BANK_debit_history_cancel (struct TALER_BANK_DebitHistoryHandle *hh) { diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c index 8c5a90fec..7c5a95ad6 100644 --- a/src/bank-lib/fakebank.c +++ b/src/bank-lib/fakebank.c @@ -321,11 +321,6 @@ struct TALER_FAKEBANK_Handle */ uint16_t port; - /** - * Force closing connections after each request. - */ - bool force_close; - #if EPOLL_SUPPORT /** * Boxed @e mhd_fd. @@ -1968,8 +1963,7 @@ TALER_FAKEBANK_start (uint16_t port, return TALER_FAKEBANK_start2 (port, currency, 65536, /* RAM limit */ - 1, /* number of threads */ - false); + 1); } @@ -1977,8 +1971,7 @@ struct TALER_FAKEBANK_Handle * TALER_FAKEBANK_start2 (uint16_t port, const char *currency, uint64_t ram_limit, - unsigned int num_threads, - bool close_connections) + unsigned int num_threads) { struct TALER_FAKEBANK_Handle *h; @@ -1992,7 +1985,6 @@ TALER_FAKEBANK_start2 (uint16_t port, GNUNET_assert (strlen (currency) < TALER_CURRENCY_LEN); h = GNUNET_new (struct TALER_FAKEBANK_Handle); h->port = port; - h->force_close = close_connections; h->ram_limit = ram_limit; h->serial_counter = 0; GNUNET_assert (0 == diff --git a/src/bank-lib/taler-exchange-wire-gateway-client.c b/src/bank-lib/taler-exchange-wire-gateway-client.c index 436d416d5..47df82a8f 100644 --- a/src/bank-lib/taler-exchange-wire-gateway-client.c +++ b/src/bank-lib/taler-exchange-wire-gateway-client.c @@ -215,18 +215,18 @@ credit_history_cb (void *cls, /* If credit/debit accounts were specified, use as a filter */ if ( (NULL != credit_account) && (0 != strcasecmp (credit_account, - details->credit_account_url) ) ) + details->credit_account_uri) ) ) return GNUNET_OK; if ( (NULL != debit_account) && (0 != strcasecmp (debit_account, - details->debit_account_url) ) ) + details->debit_account_uri) ) ) return GNUNET_OK; fprintf (stdout, "%llu: %s->%s (%s) over %s at %s\n", (unsigned long long) serial_id, - details->debit_account_url, - details->credit_account_url, + details->debit_account_uri, + details->credit_account_uri, TALER_B2S (&details->reserve_pub), TALER_amount2s (&details->amount), GNUNET_STRINGS_absolute_time_to_string (details->execution_date)); @@ -252,6 +252,7 @@ execute_credit_history (void) &auth, start_row, -10, + GNUNET_TIME_UNIT_ZERO, &credit_history_cb, NULL); if (NULL == chh) @@ -329,18 +330,18 @@ debit_history_cb (void *cls, /* If credit/debit accounts were specified, use as a filter */ if ( (NULL != credit_account) && (0 != strcasecmp (credit_account, - details->credit_account_url) ) ) + details->credit_account_uri) ) ) return GNUNET_OK; if ( (NULL != debit_account) && (0 != strcasecmp (debit_account, - details->debit_account_url) ) ) + details->debit_account_uri) ) ) return GNUNET_OK; fprintf (stdout, "%llu: %s->%s (%s) over %s at %s\n", (unsigned long long) serial_id, - details->debit_account_url, - details->credit_account_url, + details->debit_account_uri, + details->credit_account_uri, TALER_B2S (&details->wtid), TALER_amount2s (&details->amount), GNUNET_STRINGS_absolute_time_to_string (details->execution_date)); @@ -366,6 +367,7 @@ execute_debit_history (void) &auth, start_row, -10, + GNUNET_TIME_UNIT_ZERO, &debit_history_cb, NULL); if (NULL == dhh) diff --git a/src/bank-lib/taler-fakebank-run.c b/src/bank-lib/taler-fakebank-run.c index ff9dcc17c..282e39501 100644 --- a/src/bank-lib/taler-fakebank-run.c +++ b/src/bank-lib/taler-fakebank-run.c @@ -23,9 +23,9 @@ * @author Marcello Stanisci * @author Christian Grothoff */ - #include "platform.h" #include "taler_fakebank_lib.h" +#include "taler_mhd_lib.h" /** * Number of threads to use (-n) @@ -111,11 +111,18 @@ run (void *cls, "Maximum transaction history in RAM set to default of %llu\n", ram); } + { + enum TALER_MHD_GlobalOptions go; + + go = TALER_MHD_GO_NONE; + if (0 != connection_close) + go |= TALER_MHD_GO_FORCE_CONNECTION_CLOSE; + TALER_MHD_setup (go); + } fb = TALER_FAKEBANK_start2 ((uint16_t) port, currency_string, ram, - num_threads, - (0 != connection_close)); + num_threads); if (NULL == fb) { ret = EXIT_FAILURE; |