support long_poll_ms argument in bank API (#6987)
This commit is contained in:
parent
10d8342f90
commit
f174781b57
@ -1014,7 +1014,7 @@ wire_out_cb (void *cls,
|
|||||||
|
|
||||||
payto_uri = TALER_JSON_wire_to_payto (wire);
|
payto_uri = TALER_JSON_wire_to_payto (wire);
|
||||||
if (0 != strcasecmp (payto_uri,
|
if (0 != strcasecmp (payto_uri,
|
||||||
roi->details.credit_account_url))
|
roi->details.credit_account_uri))
|
||||||
{
|
{
|
||||||
/* Destination bank account is wrong in actual wire transfer, so
|
/* Destination bank account is wrong in actual wire transfer, so
|
||||||
we should count the wire transfer as entirely spurious, and
|
we should count the wire transfer as entirely spurious, and
|
||||||
@ -1055,7 +1055,7 @@ wire_out_cb (void *cls,
|
|||||||
"receiver account mismatch"),
|
"receiver account mismatch"),
|
||||||
GNUNET_JSON_pack_string ("target",
|
GNUNET_JSON_pack_string ("target",
|
||||||
roi->details.
|
roi->details.
|
||||||
credit_account_url),
|
credit_account_uri),
|
||||||
GNUNET_JSON_pack_string ("account_section",
|
GNUNET_JSON_pack_string ("account_section",
|
||||||
wa->ai->section_name)));
|
wa->ai->section_name)));
|
||||||
TALER_ARL_amount_add (&total_bad_amount_out_minus,
|
TALER_ARL_amount_add (&total_bad_amount_out_minus,
|
||||||
@ -1165,7 +1165,7 @@ check_rc_matches (void *cls,
|
|||||||
if ( (0 == GNUNET_memcmp (&ctx->roi->details.wtid,
|
if ( (0 == GNUNET_memcmp (&ctx->roi->details.wtid,
|
||||||
&rc->wtid)) &&
|
&rc->wtid)) &&
|
||||||
(0 == strcasecmp (rc->receiver_account,
|
(0 == strcasecmp (rc->receiver_account,
|
||||||
ctx->roi->details.credit_account_url)) &&
|
ctx->roi->details.credit_account_uri)) &&
|
||||||
(0 == TALER_amount_cmp (&rc->amount,
|
(0 == TALER_amount_cmp (&rc->amount,
|
||||||
&ctx->roi->details.amount)) )
|
&ctx->roi->details.amount)) )
|
||||||
{
|
{
|
||||||
@ -1207,7 +1207,7 @@ complain_out_not_found (void *cls,
|
|||||||
};
|
};
|
||||||
|
|
||||||
(void) key;
|
(void) key;
|
||||||
hash_rc (roi->details.credit_account_url,
|
hash_rc (roi->details.credit_account_uri,
|
||||||
&roi->details.wtid,
|
&roi->details.wtid,
|
||||||
&rkey);
|
&rkey);
|
||||||
GNUNET_CONTAINER_multihashmap_get_multiple (reserve_closures,
|
GNUNET_CONTAINER_multihashmap_get_multiple (reserve_closures,
|
||||||
@ -1341,7 +1341,7 @@ history_debit_cb (void *cls,
|
|||||||
TALER_B2S (&details->wtid));
|
TALER_B2S (&details->wtid));
|
||||||
/* Update offset */
|
/* Update offset */
|
||||||
wa->out_wire_off = row_off;
|
wa->out_wire_off = row_off;
|
||||||
slen = strlen (details->credit_account_url) + 1;
|
slen = strlen (details->credit_account_uri) + 1;
|
||||||
roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
|
roi = GNUNET_malloc (sizeof (struct ReserveOutInfo)
|
||||||
+ slen);
|
+ slen);
|
||||||
GNUNET_CRYPTO_hash (&details->wtid,
|
GNUNET_CRYPTO_hash (&details->wtid,
|
||||||
@ -1350,9 +1350,9 @@ history_debit_cb (void *cls,
|
|||||||
roi->details.amount = details->amount;
|
roi->details.amount = details->amount;
|
||||||
roi->details.execution_date = details->execution_date;
|
roi->details.execution_date = details->execution_date;
|
||||||
roi->details.wtid = details->wtid;
|
roi->details.wtid = details->wtid;
|
||||||
roi->details.credit_account_url = (const char *) &roi[1];
|
roi->details.credit_account_uri = (const char *) &roi[1];
|
||||||
memcpy (&roi[1],
|
memcpy (&roi[1],
|
||||||
details->credit_account_url,
|
details->credit_account_uri,
|
||||||
slen);
|
slen);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_CONTAINER_multihashmap_put (out_map,
|
GNUNET_CONTAINER_multihashmap_put (out_map,
|
||||||
@ -1414,6 +1414,7 @@ process_debits (void *cls)
|
|||||||
wa->ai->auth,
|
wa->ai->auth,
|
||||||
wa->out_wire_off,
|
wa->out_wire_off,
|
||||||
INT64_MAX,
|
INT64_MAX,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&history_debit_cb,
|
&history_debit_cb,
|
||||||
wa);
|
wa);
|
||||||
if (NULL == wa->dhh)
|
if (NULL == wa->dhh)
|
||||||
@ -1496,7 +1497,7 @@ reserve_in_cb (void *cls,
|
|||||||
rii->details.amount = *credit;
|
rii->details.amount = *credit;
|
||||||
rii->details.execution_date = execution_date;
|
rii->details.execution_date = execution_date;
|
||||||
rii->details.reserve_pub = *reserve_pub;
|
rii->details.reserve_pub = *reserve_pub;
|
||||||
rii->details.debit_account_url = (const char *) &rii[1];
|
rii->details.debit_account_uri = (const char *) &rii[1];
|
||||||
memcpy (&rii[1],
|
memcpy (&rii[1],
|
||||||
sender_account_details,
|
sender_account_details,
|
||||||
slen);
|
slen);
|
||||||
@ -1752,8 +1753,8 @@ history_credit_cb (void *cls,
|
|||||||
}
|
}
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if (0 != strcasecmp (details->debit_account_url,
|
if (0 != strcasecmp (details->debit_account_uri,
|
||||||
rii->details.debit_account_url))
|
rii->details.debit_account_uri))
|
||||||
{
|
{
|
||||||
TALER_ARL_report (report_missattribution_in_inconsistencies,
|
TALER_ARL_report (report_missattribution_in_inconsistencies,
|
||||||
GNUNET_JSON_PACK (
|
GNUNET_JSON_PACK (
|
||||||
@ -1843,6 +1844,7 @@ process_credits (void *cls)
|
|||||||
wa->ai->auth,
|
wa->ai->auth,
|
||||||
wa->in_wire_off,
|
wa->in_wire_off,
|
||||||
INT64_MAX,
|
INT64_MAX,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&history_credit_cb,
|
&history_credit_cb,
|
||||||
wa);
|
wa);
|
||||||
if (NULL == wa->chh)
|
if (NULL == wa->chh)
|
||||||
|
@ -14,6 +14,7 @@ taler_fakebank_run_SOURCES = \
|
|||||||
taler-fakebank-run.c
|
taler-fakebank-run.c
|
||||||
taler_fakebank_run_LDADD = \
|
taler_fakebank_run_LDADD = \
|
||||||
libtalerfakebank.la \
|
libtalerfakebank.la \
|
||||||
|
$(top_builddir)/src/mhd/libtalermhd.la \
|
||||||
$(top_builddir)/src/util/libtalerutil.la \
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
-lgnunetutil
|
-lgnunetutil
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
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
|
TALER is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
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",
|
GNUNET_JSON_spec_fixed_auto ("reserve_pub",
|
||||||
&td.reserve_pub),
|
&td.reserve_pub),
|
||||||
GNUNET_JSON_spec_string ("debit_account",
|
GNUNET_JSON_spec_string ("debit_account",
|
||||||
&td.debit_account_url),
|
&td.debit_account_uri),
|
||||||
GNUNET_JSON_spec_string ("credit_account",
|
GNUNET_JSON_spec_string ("credit_account",
|
||||||
&td.credit_account_url),
|
&td.credit_account_uri),
|
||||||
GNUNET_JSON_spec_end ()
|
GNUNET_JSON_spec_end ()
|
||||||
};
|
};
|
||||||
json_t *transaction = json_array_get (history_array,
|
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,
|
const struct TALER_BANK_AuthenticationData *auth,
|
||||||
uint64_t start_row,
|
uint64_t start_row,
|
||||||
int64_t num_results,
|
int64_t num_results,
|
||||||
|
struct GNUNET_TIME_Relative timeout,
|
||||||
TALER_BANK_CreditHistoryCallback hres_cb,
|
TALER_BANK_CreditHistoryCallback hres_cb,
|
||||||
void *hres_cb_cls)
|
void *hres_cb_cls)
|
||||||
{
|
{
|
||||||
char url[128];
|
char url[128];
|
||||||
struct TALER_BANK_CreditHistoryHandle *hh;
|
struct TALER_BANK_CreditHistoryHandle *hh;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
|
unsigned long long tms;
|
||||||
|
|
||||||
if (0 == num_results)
|
if (0 == num_results)
|
||||||
{
|
{
|
||||||
@ -230,20 +232,43 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tms = (unsigned long long) (timeout.rel_value_us
|
||||||
|
/ GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us);
|
||||||
if ( ( (UINT64_MAX == start_row) &&
|
if ( ( (UINT64_MAX == start_row) &&
|
||||||
(0 > num_results) ) ||
|
(0 > num_results) ) ||
|
||||||
( (0 == start_row) &&
|
( (0 == start_row) &&
|
||||||
(0 < num_results) ) )
|
(0 < num_results) ) )
|
||||||
GNUNET_snprintf (url,
|
{
|
||||||
sizeof (url),
|
if ( (0 < num_results) &&
|
||||||
"history/incoming?delta=%lld",
|
(! GNUNET_TIME_relative_is_zero (timeout)) )
|
||||||
(long long) num_results);
|
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
|
else
|
||||||
GNUNET_snprintf (url,
|
{
|
||||||
sizeof (url),
|
if ( (0 < num_results) &&
|
||||||
"history/incoming?delta=%lld&start=%llu",
|
(! GNUNET_TIME_relative_is_zero (timeout)) )
|
||||||
(long long) num_results,
|
GNUNET_snprintf (url,
|
||||||
(unsigned long long) start_row);
|
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 = GNUNET_new (struct TALER_BANK_CreditHistoryHandle);
|
||||||
hh->hcb = hres_cb;
|
hh->hcb = hres_cb;
|
||||||
hh->hcb_cls = hres_cb_cls;
|
hh->hcb_cls = hres_cb_cls;
|
||||||
@ -275,6 +300,13 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
|
|||||||
curl_easy_cleanup (eh);
|
curl_easy_cleanup (eh);
|
||||||
return NULL;
|
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,
|
hh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
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
|
TALER is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
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",
|
GNUNET_JSON_spec_fixed_auto ("wtid",
|
||||||
&td.wtid),
|
&td.wtid),
|
||||||
GNUNET_JSON_spec_string ("credit_account",
|
GNUNET_JSON_spec_string ("credit_account",
|
||||||
&td.credit_account_url),
|
&td.credit_account_uri),
|
||||||
GNUNET_JSON_spec_string ("debit_account",
|
GNUNET_JSON_spec_string ("debit_account",
|
||||||
&td.debit_account_url),
|
&td.debit_account_uri),
|
||||||
GNUNET_JSON_spec_string ("exchange_base_url",
|
GNUNET_JSON_spec_string ("exchange_base_url",
|
||||||
&td.exchange_base_url),
|
&td.exchange_base_url),
|
||||||
GNUNET_JSON_spec_end ()
|
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 *
|
struct TALER_BANK_DebitHistoryHandle *
|
||||||
TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
|
TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
|
||||||
const struct TALER_BANK_AuthenticationData *auth,
|
const struct TALER_BANK_AuthenticationData *auth,
|
||||||
uint64_t start_row,
|
uint64_t start_row,
|
||||||
int64_t num_results,
|
int64_t num_results,
|
||||||
|
struct GNUNET_TIME_Relative timeout,
|
||||||
TALER_BANK_DebitHistoryCallback hres_cb,
|
TALER_BANK_DebitHistoryCallback hres_cb,
|
||||||
void *hres_cb_cls)
|
void *hres_cb_cls)
|
||||||
{
|
{
|
||||||
char url[128];
|
char url[128];
|
||||||
struct TALER_BANK_DebitHistoryHandle *hh;
|
struct TALER_BANK_DebitHistoryHandle *hh;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
|
unsigned long long tms;
|
||||||
|
|
||||||
if (0 == num_results)
|
if (0 == num_results)
|
||||||
{
|
{
|
||||||
@ -250,20 +234,43 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tms = (unsigned long long) (timeout.rel_value_us
|
||||||
|
/ GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us);
|
||||||
if ( ( (UINT64_MAX == start_row) &&
|
if ( ( (UINT64_MAX == start_row) &&
|
||||||
(0 > num_results) ) ||
|
(0 > num_results) ) ||
|
||||||
( (0 == start_row) &&
|
( (0 == start_row) &&
|
||||||
(0 < num_results) ) )
|
(0 < num_results) ) )
|
||||||
GNUNET_snprintf (url,
|
{
|
||||||
sizeof (url),
|
if ( (0 < num_results) &&
|
||||||
"history/outgoing?delta=%lld",
|
(! GNUNET_TIME_relative_is_zero (timeout)) )
|
||||||
(long long) num_results);
|
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
|
else
|
||||||
GNUNET_snprintf (url,
|
{
|
||||||
sizeof (url),
|
if ( (0 < num_results) &&
|
||||||
"history/outgoing?delta=%lld&start=%llu",
|
(! GNUNET_TIME_relative_is_zero (timeout)) )
|
||||||
(long long) num_results,
|
GNUNET_snprintf (url,
|
||||||
(unsigned long long) start_row);
|
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 = GNUNET_new (struct TALER_BANK_DebitHistoryHandle);
|
||||||
hh->hcb = hres_cb;
|
hh->hcb = hres_cb;
|
||||||
hh->hcb_cls = hres_cb_cls;
|
hh->hcb_cls = hres_cb_cls;
|
||||||
@ -295,6 +302,13 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
|
|||||||
curl_easy_cleanup (eh);
|
curl_easy_cleanup (eh);
|
||||||
return NULL;
|
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,
|
hh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
NULL,
|
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
|
void
|
||||||
TALER_BANK_debit_history_cancel (struct TALER_BANK_DebitHistoryHandle *hh)
|
TALER_BANK_debit_history_cancel (struct TALER_BANK_DebitHistoryHandle *hh)
|
||||||
{
|
{
|
||||||
|
@ -321,11 +321,6 @@ struct TALER_FAKEBANK_Handle
|
|||||||
*/
|
*/
|
||||||
uint16_t port;
|
uint16_t port;
|
||||||
|
|
||||||
/**
|
|
||||||
* Force closing connections after each request.
|
|
||||||
*/
|
|
||||||
bool force_close;
|
|
||||||
|
|
||||||
#if EPOLL_SUPPORT
|
#if EPOLL_SUPPORT
|
||||||
/**
|
/**
|
||||||
* Boxed @e mhd_fd.
|
* Boxed @e mhd_fd.
|
||||||
@ -1968,8 +1963,7 @@ TALER_FAKEBANK_start (uint16_t port,
|
|||||||
return TALER_FAKEBANK_start2 (port,
|
return TALER_FAKEBANK_start2 (port,
|
||||||
currency,
|
currency,
|
||||||
65536, /* RAM limit */
|
65536, /* RAM limit */
|
||||||
1, /* number of threads */
|
1);
|
||||||
false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1977,8 +1971,7 @@ struct TALER_FAKEBANK_Handle *
|
|||||||
TALER_FAKEBANK_start2 (uint16_t port,
|
TALER_FAKEBANK_start2 (uint16_t port,
|
||||||
const char *currency,
|
const char *currency,
|
||||||
uint64_t ram_limit,
|
uint64_t ram_limit,
|
||||||
unsigned int num_threads,
|
unsigned int num_threads)
|
||||||
bool close_connections)
|
|
||||||
{
|
{
|
||||||
struct TALER_FAKEBANK_Handle *h;
|
struct TALER_FAKEBANK_Handle *h;
|
||||||
|
|
||||||
@ -1992,7 +1985,6 @@ TALER_FAKEBANK_start2 (uint16_t port,
|
|||||||
GNUNET_assert (strlen (currency) < TALER_CURRENCY_LEN);
|
GNUNET_assert (strlen (currency) < TALER_CURRENCY_LEN);
|
||||||
h = GNUNET_new (struct TALER_FAKEBANK_Handle);
|
h = GNUNET_new (struct TALER_FAKEBANK_Handle);
|
||||||
h->port = port;
|
h->port = port;
|
||||||
h->force_close = close_connections;
|
|
||||||
h->ram_limit = ram_limit;
|
h->ram_limit = ram_limit;
|
||||||
h->serial_counter = 0;
|
h->serial_counter = 0;
|
||||||
GNUNET_assert (0 ==
|
GNUNET_assert (0 ==
|
||||||
|
@ -215,18 +215,18 @@ credit_history_cb (void *cls,
|
|||||||
/* If credit/debit accounts were specified, use as a filter */
|
/* If credit/debit accounts were specified, use as a filter */
|
||||||
if ( (NULL != credit_account) &&
|
if ( (NULL != credit_account) &&
|
||||||
(0 != strcasecmp (credit_account,
|
(0 != strcasecmp (credit_account,
|
||||||
details->credit_account_url) ) )
|
details->credit_account_uri) ) )
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
if ( (NULL != debit_account) &&
|
if ( (NULL != debit_account) &&
|
||||||
(0 != strcasecmp (debit_account,
|
(0 != strcasecmp (debit_account,
|
||||||
details->debit_account_url) ) )
|
details->debit_account_uri) ) )
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
|
|
||||||
fprintf (stdout,
|
fprintf (stdout,
|
||||||
"%llu: %s->%s (%s) over %s at %s\n",
|
"%llu: %s->%s (%s) over %s at %s\n",
|
||||||
(unsigned long long) serial_id,
|
(unsigned long long) serial_id,
|
||||||
details->debit_account_url,
|
details->debit_account_uri,
|
||||||
details->credit_account_url,
|
details->credit_account_uri,
|
||||||
TALER_B2S (&details->reserve_pub),
|
TALER_B2S (&details->reserve_pub),
|
||||||
TALER_amount2s (&details->amount),
|
TALER_amount2s (&details->amount),
|
||||||
GNUNET_STRINGS_absolute_time_to_string (details->execution_date));
|
GNUNET_STRINGS_absolute_time_to_string (details->execution_date));
|
||||||
@ -252,6 +252,7 @@ execute_credit_history (void)
|
|||||||
&auth,
|
&auth,
|
||||||
start_row,
|
start_row,
|
||||||
-10,
|
-10,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&credit_history_cb,
|
&credit_history_cb,
|
||||||
NULL);
|
NULL);
|
||||||
if (NULL == chh)
|
if (NULL == chh)
|
||||||
@ -329,18 +330,18 @@ debit_history_cb (void *cls,
|
|||||||
/* If credit/debit accounts were specified, use as a filter */
|
/* If credit/debit accounts were specified, use as a filter */
|
||||||
if ( (NULL != credit_account) &&
|
if ( (NULL != credit_account) &&
|
||||||
(0 != strcasecmp (credit_account,
|
(0 != strcasecmp (credit_account,
|
||||||
details->credit_account_url) ) )
|
details->credit_account_uri) ) )
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
if ( (NULL != debit_account) &&
|
if ( (NULL != debit_account) &&
|
||||||
(0 != strcasecmp (debit_account,
|
(0 != strcasecmp (debit_account,
|
||||||
details->debit_account_url) ) )
|
details->debit_account_uri) ) )
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
|
|
||||||
fprintf (stdout,
|
fprintf (stdout,
|
||||||
"%llu: %s->%s (%s) over %s at %s\n",
|
"%llu: %s->%s (%s) over %s at %s\n",
|
||||||
(unsigned long long) serial_id,
|
(unsigned long long) serial_id,
|
||||||
details->debit_account_url,
|
details->debit_account_uri,
|
||||||
details->credit_account_url,
|
details->credit_account_uri,
|
||||||
TALER_B2S (&details->wtid),
|
TALER_B2S (&details->wtid),
|
||||||
TALER_amount2s (&details->amount),
|
TALER_amount2s (&details->amount),
|
||||||
GNUNET_STRINGS_absolute_time_to_string (details->execution_date));
|
GNUNET_STRINGS_absolute_time_to_string (details->execution_date));
|
||||||
@ -366,6 +367,7 @@ execute_debit_history (void)
|
|||||||
&auth,
|
&auth,
|
||||||
start_row,
|
start_row,
|
||||||
-10,
|
-10,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&debit_history_cb,
|
&debit_history_cb,
|
||||||
NULL);
|
NULL);
|
||||||
if (NULL == dhh)
|
if (NULL == dhh)
|
||||||
|
@ -23,9 +23,9 @@
|
|||||||
* @author Marcello Stanisci
|
* @author Marcello Stanisci
|
||||||
* @author Christian Grothoff
|
* @author Christian Grothoff
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "taler_fakebank_lib.h"
|
#include "taler_fakebank_lib.h"
|
||||||
|
#include "taler_mhd_lib.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of threads to use (-n)
|
* Number of threads to use (-n)
|
||||||
@ -111,11 +111,18 @@ run (void *cls,
|
|||||||
"Maximum transaction history in RAM set to default of %llu\n",
|
"Maximum transaction history in RAM set to default of %llu\n",
|
||||||
ram);
|
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,
|
fb = TALER_FAKEBANK_start2 ((uint16_t) port,
|
||||||
currency_string,
|
currency_string,
|
||||||
ram,
|
ram,
|
||||||
num_threads,
|
num_threads);
|
||||||
(0 != connection_close));
|
|
||||||
if (NULL == fb)
|
if (NULL == fb)
|
||||||
{
|
{
|
||||||
ret = EXIT_FAILURE;
|
ret = EXIT_FAILURE;
|
||||||
|
@ -443,8 +443,7 @@ launch_fakebank (void *cls)
|
|||||||
= TALER_FAKEBANK_start2 ((uint16_t) pnum,
|
= TALER_FAKEBANK_start2 ((uint16_t) pnum,
|
||||||
currency,
|
currency,
|
||||||
history_size,
|
history_size,
|
||||||
howmany_threads,
|
howmany_threads);
|
||||||
false);
|
|
||||||
if (NULL == fakebank)
|
if (NULL == fakebank)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
|
@ -30,6 +30,12 @@
|
|||||||
#include "taler_bank_service.h"
|
#include "taler_bank_service.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How long to wait for an HTTP reply if there
|
||||||
|
* are no transactions pending at the server?
|
||||||
|
*/
|
||||||
|
#define LONGPOLL_TIMEOUT GNUNET_TIME_UNIT_MINUTES
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What is the maximum batch size we use for credit history
|
* What is the maximum batch size we use for credit history
|
||||||
* requests with the bank. See `batch_size` below.
|
* requests with the bank. See `batch_size` below.
|
||||||
@ -545,7 +551,7 @@ history_cb (void *cls,
|
|||||||
&details->reserve_pub,
|
&details->reserve_pub,
|
||||||
&details->amount,
|
&details->amount,
|
||||||
details->execution_date,
|
details->execution_date,
|
||||||
details->debit_account_url,
|
details->debit_account_uri,
|
||||||
wa->ai->section_name,
|
wa->ai->section_name,
|
||||||
serial_id);
|
serial_id);
|
||||||
switch (qs)
|
switch (qs)
|
||||||
@ -674,6 +680,9 @@ find_transfers (void *cls)
|
|||||||
wa_pos->ai->auth,
|
wa_pos->ai->auth,
|
||||||
wa_pos->batch_start,
|
wa_pos->batch_start,
|
||||||
limit,
|
limit,
|
||||||
|
test_mode
|
||||||
|
? GNUNET_TIME_UNIT_ZERO
|
||||||
|
: LONGPOLL_TIMEOUT,
|
||||||
&history_cb,
|
&history_cb,
|
||||||
wa_pos);
|
wa_pos);
|
||||||
if (NULL == wa_pos->hh)
|
if (NULL == wa_pos->hh)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2015-2020 Taler Systems SA
|
Copyright (C) 2015-2021 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU Affero General Public License as published by the Free Software
|
terms of the GNU Affero General Public License as published by the Free Software
|
||||||
@ -278,13 +278,13 @@ struct TALER_BANK_CreditDetails
|
|||||||
* payto://-URL of the source account that
|
* payto://-URL of the source account that
|
||||||
* send the funds.
|
* send the funds.
|
||||||
*/
|
*/
|
||||||
const char *debit_account_url;
|
const char *debit_account_uri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* payto://-URL of the target account that
|
* payto://-URL of the target account that
|
||||||
* received the funds.
|
* received the funds.
|
||||||
*/
|
*/
|
||||||
const char *credit_account_url;
|
const char *credit_account_uri;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -323,6 +323,8 @@ typedef enum GNUNET_GenericReturnValue
|
|||||||
* @param num_results how many results do we want; negative numbers to go into the past,
|
* @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;
|
* positive numbers to go into the future starting at @a start_row;
|
||||||
* must not be zero.
|
* must not be zero.
|
||||||
|
* @param timeout how long the client is willing to wait for more results
|
||||||
|
* (only useful if @a num_results is positive)
|
||||||
* @param hres_cb the callback to call with the transaction history
|
* @param hres_cb the callback to call with the transaction history
|
||||||
* @param hres_cb_cls closure for the above callback
|
* @param hres_cb_cls closure for the above callback
|
||||||
* @return NULL
|
* @return NULL
|
||||||
@ -334,6 +336,7 @@ TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
|
|||||||
const struct TALER_BANK_AuthenticationData *auth,
|
const struct TALER_BANK_AuthenticationData *auth,
|
||||||
uint64_t start_row,
|
uint64_t start_row,
|
||||||
int64_t num_results,
|
int64_t num_results,
|
||||||
|
struct GNUNET_TIME_Relative timeout,
|
||||||
TALER_BANK_CreditHistoryCallback hres_cb,
|
TALER_BANK_CreditHistoryCallback hres_cb,
|
||||||
void *hres_cb_cls);
|
void *hres_cb_cls);
|
||||||
|
|
||||||
@ -387,13 +390,13 @@ struct TALER_BANK_DebitDetails
|
|||||||
* payto://-URI of the source account that
|
* payto://-URI of the source account that
|
||||||
* send the funds.
|
* send the funds.
|
||||||
*/
|
*/
|
||||||
const char *debit_account_url; // FIXME: rename: url->uri
|
const char *debit_account_uri;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* payto://-URI of the target account that
|
* payto://-URI of the target account that
|
||||||
* received the funds.
|
* received the funds.
|
||||||
*/
|
*/
|
||||||
const char *credit_account_url; // FIXME: rename: url->uri
|
const char *credit_account_uri;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -433,6 +436,8 @@ typedef enum GNUNET_GenericReturnValue
|
|||||||
* @param num_results how many results do we want; negative numbers to go into the past,
|
* @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;
|
* positive numbers to go into the future starting at @a start_row;
|
||||||
* must not be zero.
|
* must not be zero.
|
||||||
|
* @param timeout how long the client is willing to wait for more results
|
||||||
|
* (only useful if @a num_results is positive)
|
||||||
* @param hres_cb the callback to call with the transaction history
|
* @param hres_cb the callback to call with the transaction history
|
||||||
* @param hres_cb_cls closure for the above callback
|
* @param hres_cb_cls closure for the above callback
|
||||||
* @return NULL
|
* @return NULL
|
||||||
@ -444,6 +449,7 @@ TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
|
|||||||
const struct TALER_BANK_AuthenticationData *auth,
|
const struct TALER_BANK_AuthenticationData *auth,
|
||||||
uint64_t start_row,
|
uint64_t start_row,
|
||||||
int64_t num_results,
|
int64_t num_results,
|
||||||
|
struct GNUNET_TIME_Relative timeout,
|
||||||
TALER_BANK_DebitHistoryCallback hres_cb,
|
TALER_BANK_DebitHistoryCallback hres_cb,
|
||||||
void *hres_cb_cls);
|
void *hres_cb_cls);
|
||||||
|
|
||||||
|
@ -66,15 +66,13 @@ TALER_FAKEBANK_start (uint16_t port,
|
|||||||
* @param currency which currency should the bank offer
|
* @param currency which currency should the bank offer
|
||||||
* @param ram_limit how much memory do we use at most
|
* @param ram_limit how much memory do we use at most
|
||||||
* @param num_threads size of the thread pool, 0 to use the GNUnet scheduler
|
* @param num_threads size of the thread pool, 0 to use the GNUnet scheduler
|
||||||
* @param close_connections true to force closing a connection after each request (no HTTP keep-alive)
|
|
||||||
* @return NULL on error
|
* @return NULL on error
|
||||||
*/
|
*/
|
||||||
struct TALER_FAKEBANK_Handle *
|
struct TALER_FAKEBANK_Handle *
|
||||||
TALER_FAKEBANK_start2 (uint16_t port,
|
TALER_FAKEBANK_start2 (uint16_t port,
|
||||||
const char *currency,
|
const char *currency,
|
||||||
uint64_t ram_limit,
|
uint64_t ram_limit,
|
||||||
unsigned int num_threads,
|
unsigned int num_threads);
|
||||||
bool close_connections);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -164,7 +164,7 @@ print_expected (struct History *h,
|
|||||||
TALER_amount2s (&h[i].details.amount),
|
TALER_amount2s (&h[i].details.amount),
|
||||||
(unsigned long long) h[i].row_id,
|
(unsigned long long) h[i].row_id,
|
||||||
TALER_B2S (&h[i].details.reserve_pub),
|
TALER_B2S (&h[i].details.reserve_pub),
|
||||||
h[i].details.debit_account_url);
|
h[i].details.debit_account_uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,11 +313,11 @@ build_history (struct TALER_TESTING_Interpreter *is,
|
|||||||
total,
|
total,
|
||||||
pos * 2);
|
pos * 2);
|
||||||
h[pos].url = GNUNET_strdup (debit_account);
|
h[pos].url = GNUNET_strdup (debit_account);
|
||||||
h[pos].details.debit_account_url = h[pos].url;
|
h[pos].details.debit_account_uri = h[pos].url;
|
||||||
h[pos].details.amount = *amount;
|
h[pos].details.amount = *amount;
|
||||||
h[pos].row_id = *row_id;
|
h[pos].row_id = *row_id;
|
||||||
h[pos].details.reserve_pub = *reserve_pub;
|
h[pos].details.reserve_pub = *reserve_pub;
|
||||||
h[pos].details.credit_account_url = exchange_credit_url;
|
h[pos].details.credit_account_uri = exchange_credit_url;
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
GNUNET_assert (GNUNET_YES == ok);
|
GNUNET_assert (GNUNET_YES == ok);
|
||||||
@ -364,16 +364,16 @@ check_result (struct History *h,
|
|||||||
&details->reserve_pub)) ||
|
&details->reserve_pub)) ||
|
||||||
(0 != TALER_amount_cmp (&h[off].details.amount,
|
(0 != TALER_amount_cmp (&h[off].details.amount,
|
||||||
&details->amount)) ||
|
&details->amount)) ||
|
||||||
(0 != strcasecmp (h[off].details.debit_account_url,
|
(0 != strcasecmp (h[off].details.debit_account_uri,
|
||||||
details->debit_account_url)) )
|
details->debit_account_uri)) )
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"expected debit_account_url: %s\n",
|
"expected debit_account_uri: %s\n",
|
||||||
details->debit_account_url);
|
details->debit_account_uri);
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"actual debit_account_url: %s\n",
|
"actual debit_account_uri: %s\n",
|
||||||
h[off].details.debit_account_url);
|
h[off].details.debit_account_uri);
|
||||||
print_expected (h,
|
print_expected (h,
|
||||||
total,
|
total,
|
||||||
off);
|
off);
|
||||||
@ -521,6 +521,7 @@ history_run (void *cls,
|
|||||||
&hs->auth,
|
&hs->auth,
|
||||||
row_id,
|
row_id,
|
||||||
hs->num_results,
|
hs->num_results,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&history_cb,
|
&history_cb,
|
||||||
is);
|
is);
|
||||||
GNUNET_assert (NULL != hs->hh);
|
GNUNET_assert (NULL != hs->hh);
|
||||||
@ -554,23 +555,12 @@ history_cleanup (void *cls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make a "history" CMD.
|
|
||||||
*
|
|
||||||
* @param label command label.
|
|
||||||
* @param auth authentication data to talk with the wire gateway
|
|
||||||
* @param start_row_reference reference to a command that can
|
|
||||||
* offer a row identifier, to be used as the starting row
|
|
||||||
* to accept in the result.
|
|
||||||
* @param num_results how many rows we want in the result.
|
|
||||||
* @return the command.
|
|
||||||
*/
|
|
||||||
struct TALER_TESTING_Command
|
struct TALER_TESTING_Command
|
||||||
TALER_TESTING_cmd_bank_credits (const char *label,
|
TALER_TESTING_cmd_bank_credits (
|
||||||
const struct
|
const char *label,
|
||||||
TALER_BANK_AuthenticationData *auth,
|
const struct TALER_BANK_AuthenticationData *auth,
|
||||||
const char *start_row_reference,
|
const char *start_row_reference,
|
||||||
long long num_results)
|
long long num_results)
|
||||||
{
|
{
|
||||||
struct HistoryState *hs;
|
struct HistoryState *hs;
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ print_expected (struct History *h,
|
|||||||
TALER_amount2s (&h[i].details.amount),
|
TALER_amount2s (&h[i].details.amount),
|
||||||
(unsigned long long) h[i].row_id,
|
(unsigned long long) h[i].row_id,
|
||||||
TALER_B2S (&h[i].details.wtid),
|
TALER_B2S (&h[i].details.wtid),
|
||||||
h[i].details.credit_account_url);
|
h[i].details.credit_account_uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,8 +320,8 @@ build_history (struct TALER_TESTING_Interpreter *is,
|
|||||||
pos * 2);
|
pos * 2);
|
||||||
h[pos].c_url = GNUNET_strdup (credit_account);
|
h[pos].c_url = GNUNET_strdup (credit_account);
|
||||||
h[pos].d_url = GNUNET_strdup (debit_account);
|
h[pos].d_url = GNUNET_strdup (debit_account);
|
||||||
h[pos].details.credit_account_url = h[pos].c_url;
|
h[pos].details.credit_account_uri = h[pos].c_url;
|
||||||
h[pos].details.debit_account_url = h[pos].d_url;
|
h[pos].details.debit_account_uri = h[pos].d_url;
|
||||||
h[pos].details.amount = *amount;
|
h[pos].details.amount = *amount;
|
||||||
h[pos].row_id = *row_id;
|
h[pos].row_id = *row_id;
|
||||||
h[pos].details.wtid = *wtid;
|
h[pos].details.wtid = *wtid;
|
||||||
@ -372,8 +372,8 @@ check_result (struct History *h,
|
|||||||
&details->wtid)) ||
|
&details->wtid)) ||
|
||||||
(0 != TALER_amount_cmp (&h[off].details.amount,
|
(0 != TALER_amount_cmp (&h[off].details.amount,
|
||||||
&details->amount)) ||
|
&details->amount)) ||
|
||||||
(0 != strcasecmp (h[off].details.credit_account_url,
|
(0 != strcasecmp (h[off].details.credit_account_uri,
|
||||||
details->credit_account_url)) )
|
details->credit_account_uri)) )
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
print_expected (h,
|
print_expected (h,
|
||||||
@ -522,6 +522,7 @@ history_run (void *cls,
|
|||||||
&hs->auth,
|
&hs->auth,
|
||||||
row_id,
|
row_id,
|
||||||
hs->num_results,
|
hs->num_results,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&history_cb,
|
&history_cb,
|
||||||
is);
|
is);
|
||||||
GNUNET_assert (NULL != hs->hh);
|
GNUNET_assert (NULL != hs->hh);
|
||||||
|
Loading…
Reference in New Issue
Block a user