add request UID repetition detection to fakebank
This commit is contained in:
parent
7ce48d622e
commit
5f6d867469
@ -28,7 +28,7 @@
|
|||||||
#include "taler_mhd_lib.h"
|
#include "taler_mhd_lib.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum POST request size (for /admin/add/incoming)
|
* Maximum POST request size (for /admin/add-incoming)
|
||||||
*/
|
*/
|
||||||
#define REQUEST_BUFFER_MAX (4 * 1024)
|
#define REQUEST_BUFFER_MAX (4 * 1024)
|
||||||
|
|
||||||
@ -63,6 +63,11 @@ struct Transaction
|
|||||||
*/
|
*/
|
||||||
char *credit_account;
|
char *credit_account;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Random unique identifier for the request.
|
||||||
|
*/
|
||||||
|
struct GNUNET_HashCode request_uid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What does the @e subject contain?
|
* What does the @e subject contain?
|
||||||
*/
|
*/
|
||||||
@ -346,6 +351,7 @@ TALER_FAKEBANK_check_credit (struct TALER_FAKEBANK_Handle *h,
|
|||||||
* @param amount amount to transfer
|
* @param amount amount to transfer
|
||||||
* @param subject wire transfer subject to use
|
* @param subject wire transfer subject to use
|
||||||
* @param exchange_base_url exchange URL
|
* @param exchange_base_url exchange URL
|
||||||
|
* @param request_uid unique number to make the request unique, or NULL to create one
|
||||||
* @return row_id of the transfer
|
* @return row_id of the transfer
|
||||||
*/
|
*/
|
||||||
uint64_t
|
uint64_t
|
||||||
@ -355,10 +361,27 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
|||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct
|
const struct
|
||||||
TALER_WireTransferIdentifierRawP *subject,
|
TALER_WireTransferIdentifierRawP *subject,
|
||||||
const char *exchange_base_url)
|
const char *exchange_base_url,
|
||||||
|
const struct GNUNET_HashCode *request_uid)
|
||||||
{
|
{
|
||||||
struct Transaction *t;
|
struct Transaction *t;
|
||||||
|
|
||||||
|
if (NULL != request_uid)
|
||||||
|
{
|
||||||
|
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||||
|
if ( (0 == GNUNET_memcmp (request_uid,
|
||||||
|
&t->request_uid)) &&
|
||||||
|
(0 == strcasecmp (debit_account,
|
||||||
|
t->debit_account)) &&
|
||||||
|
(0 == strcasecmp (credit_account,
|
||||||
|
t->credit_account)) &&
|
||||||
|
(0 == TALER_amount_cmp (amount,
|
||||||
|
&t->amount)) &&
|
||||||
|
(T_DEBIT == t->type) &&
|
||||||
|
(0 == GNUNET_memcmp (subject,
|
||||||
|
&t->subject.debit.wtid)) )
|
||||||
|
return t->row_id;
|
||||||
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"Making transfer from %s to %s over %s and subject %s; for exchange: %s\n",
|
"Making transfer from %s to %s over %s and subject %s; for exchange: %s\n",
|
||||||
debit_account,
|
debit_account,
|
||||||
@ -375,6 +398,11 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
|||||||
t->type = T_DEBIT;
|
t->type = T_DEBIT;
|
||||||
t->subject.debit.exchange_base_url = GNUNET_strdup (exchange_base_url);
|
t->subject.debit.exchange_base_url = GNUNET_strdup (exchange_base_url);
|
||||||
t->subject.debit.wtid = *subject;
|
t->subject.debit.wtid = *subject;
|
||||||
|
if (NULL == request_uid)
|
||||||
|
GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_NONCE,
|
||||||
|
&t->request_uid);
|
||||||
|
else
|
||||||
|
t->request_uid = *request_uid;
|
||||||
GNUNET_TIME_round_abs (&t->date);
|
GNUNET_TIME_round_abs (&t->date);
|
||||||
GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
|
GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
|
||||||
h->transactions_tail,
|
h->transactions_tail,
|
||||||
@ -690,13 +718,13 @@ handle_transfer (struct TALER_FAKEBANK_Handle *h,
|
|||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
// FIXME: use uuid here!!!
|
|
||||||
row_id = TALER_FAKEBANK_make_transfer (h,
|
row_id = TALER_FAKEBANK_make_transfer (h,
|
||||||
account,
|
account,
|
||||||
credit_account,
|
credit_account,
|
||||||
&amount,
|
&amount,
|
||||||
&wtid,
|
&wtid,
|
||||||
base_url);
|
base_url,
|
||||||
|
&uuid);
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Receiving incoming wire transfer: %s->%s, subject: %s, amount: %s, from %s\n",
|
"Receiving incoming wire transfer: %s->%s, subject: %s, amount: %s, from %s\n",
|
||||||
account,
|
account,
|
||||||
|
@ -70,6 +70,7 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
|
|||||||
* @param amount amount to transfer
|
* @param amount amount to transfer
|
||||||
* @param subject wire transfer subject to use
|
* @param subject wire transfer subject to use
|
||||||
* @param exchange_base_url exchange URL
|
* @param exchange_base_url exchange URL
|
||||||
|
* @param request_uid unique number to make the request unique, or NULL to create one
|
||||||
* @return serial_id of the transfer
|
* @return serial_id of the transfer
|
||||||
*/
|
*/
|
||||||
uint64_t
|
uint64_t
|
||||||
@ -79,7 +80,8 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
|||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct
|
const struct
|
||||||
TALER_WireTransferIdentifierRawP *subject,
|
TALER_WireTransferIdentifierRawP *subject,
|
||||||
const char *exchange_base_url);
|
const char *exchange_base_url,
|
||||||
|
const struct GNUNET_HashCode *request_uid);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user