summaryrefslogtreecommitdiff
path: root/src/bank-lib
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-08-12 13:13:42 +0200
committerChristian Grothoff <christian@grothoff.org>2021-08-12 13:13:42 +0200
commitf174781b570bb534db424e57a3b563a74ad36f77 (patch)
tree6f9b533837e57b3cfe8009318ab99c6352164655 /src/bank-lib
parent10d8342f90573215867adc9c7e561f09a61a7566 (diff)
downloadexchange-f174781b570bb534db424e57a3b563a74ad36f77.tar.gz
exchange-f174781b570bb534db424e57a3b563a74ad36f77.tar.bz2
exchange-f174781b570bb534db424e57a3b563a74ad36f77.zip
support long_poll_ms argument in bank API (#6987)
Diffstat (limited to 'src/bank-lib')
-rw-r--r--src/bank-lib/Makefile.am1
-rw-r--r--src/bank-lib/bank_api_credit.c56
-rw-r--r--src/bank-lib/bank_api_debit.c81
-rw-r--r--src/bank-lib/fakebank.c12
-rw-r--r--src/bank-lib/taler-exchange-wire-gateway-client.c18
-rw-r--r--src/bank-lib/taler-fakebank-run.c13
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;