modify fakebank API to allow arbitrary subjects, not just well-fromed WTIDs
This commit is contained in:
parent
1eb739c670
commit
16b7c26605
@ -65,7 +65,7 @@ struct Transaction
|
|||||||
/**
|
/**
|
||||||
* Subject of the transfer.
|
* Subject of the transfer.
|
||||||
*/
|
*/
|
||||||
struct TALER_WireTransferIdentifierRawP wtid;
|
char *subject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base URL of the exchange.
|
* Base URL of the exchange.
|
||||||
@ -119,7 +119,7 @@ struct TALER_FAKEBANK_Handle
|
|||||||
/**
|
/**
|
||||||
* Check that the @a want_amount was transferred from
|
* Check that the @a want_amount was transferred from
|
||||||
* the @a want_debit to the @a want_credit account. If
|
* the @a want_debit to the @a want_credit account. If
|
||||||
* so, set the @a wtid to the transfer identifier.
|
* so, set the @a subject to the transfer identifier.
|
||||||
* If not, return #GNUNET_SYSERR.
|
* If not, return #GNUNET_SYSERR.
|
||||||
*
|
*
|
||||||
* @param h bank instance
|
* @param h bank instance
|
||||||
@ -137,11 +137,9 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
|||||||
uint64_t want_debit,
|
uint64_t want_debit,
|
||||||
uint64_t want_credit,
|
uint64_t want_credit,
|
||||||
const char *exchange_base_url,
|
const char *exchange_base_url,
|
||||||
struct TALER_WireTransferIdentifierRawP *wtid)
|
char **subject)
|
||||||
{
|
{
|
||||||
struct Transaction *t;
|
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||||
|
|
||||||
for (t = h->transactions_head; NULL != t; t = t->next)
|
|
||||||
{
|
{
|
||||||
if ( (want_debit == t->debit_account) &&
|
if ( (want_debit == t->debit_account) &&
|
||||||
(want_credit == t->credit_account) &&
|
(want_credit == t->credit_account) &&
|
||||||
@ -153,7 +151,7 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
|||||||
GNUNET_CONTAINER_DLL_remove (h->transactions_head,
|
GNUNET_CONTAINER_DLL_remove (h->transactions_head,
|
||||||
h->transactions_tail,
|
h->transactions_tail,
|
||||||
t);
|
t);
|
||||||
*wtid = t->wtid;
|
*subject = t->subject;
|
||||||
GNUNET_free (t->exchange_base_url);
|
GNUNET_free (t->exchange_base_url);
|
||||||
GNUNET_free (t);
|
GNUNET_free (t);
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
@ -161,7 +159,7 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
|||||||
}
|
}
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
"Did not find matching transaction!\nI have:\n");
|
"Did not find matching transaction!\nI have:\n");
|
||||||
for (t = h->transactions_head; NULL != t; t = t->next)
|
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
@ -178,6 +176,49 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell the fakebank to create another wire transfer.
|
||||||
|
*
|
||||||
|
* @param h fake bank handle
|
||||||
|
* @param debit_account account to debit
|
||||||
|
* @param credit_account account to credit
|
||||||
|
* @param amount amount to transfer
|
||||||
|
* @param subject wire transfer subject to use
|
||||||
|
* @param exchange_base_url exchange URL
|
||||||
|
* @return serial_id of the transfer
|
||||||
|
*/
|
||||||
|
uint64_t
|
||||||
|
TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||||
|
uint64_t debit_account,
|
||||||
|
uint64_t credit_account,
|
||||||
|
const struct TALER_Amount *amount,
|
||||||
|
const char *subject,
|
||||||
|
const char *exchange_base_url)
|
||||||
|
{
|
||||||
|
struct Transaction *t;
|
||||||
|
|
||||||
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
|
"Making transfer from %llu to %llu over %s and subject %s\n",
|
||||||
|
(unsigned long long) debit_account,
|
||||||
|
(unsigned long long) credit_account,
|
||||||
|
TALER_amount2s (amount),
|
||||||
|
subject);
|
||||||
|
t = GNUNET_new (struct Transaction);
|
||||||
|
t->debit_account = debit_account;
|
||||||
|
t->credit_account = credit_account;
|
||||||
|
t->amount = *amount;
|
||||||
|
t->exchange_base_url = GNUNET_strdup (exchange_base_url);
|
||||||
|
t->serial_id = ++h->serial_counter;
|
||||||
|
t->date = GNUNET_TIME_absolute_get ();
|
||||||
|
t->subject = GNUNET_strdup (subject);
|
||||||
|
GNUNET_TIME_round_abs (&t->date);
|
||||||
|
GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
|
||||||
|
h->transactions_tail,
|
||||||
|
t);
|
||||||
|
return t->serial_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that no wire transfers were ordered (or at least none
|
* Check that no wire transfers were ordered (or at least none
|
||||||
* that have not been taken care of via #TALER_FAKEBANK_check()).
|
* that have not been taken care of via #TALER_FAKEBANK_check()).
|
||||||
@ -228,6 +269,7 @@ TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h)
|
|||||||
GNUNET_CONTAINER_DLL_remove (h->transactions_head,
|
GNUNET_CONTAINER_DLL_remove (h->transactions_head,
|
||||||
h->transactions_tail,
|
h->transactions_tail,
|
||||||
t);
|
t);
|
||||||
|
GNUNET_free (t->subject);
|
||||||
GNUNET_free (t->exchange_base_url);
|
GNUNET_free (t->exchange_base_url);
|
||||||
GNUNET_free (t);
|
GNUNET_free (t);
|
||||||
}
|
}
|
||||||
@ -291,9 +333,9 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
|
|||||||
{
|
{
|
||||||
enum GNUNET_JSON_PostResult pr;
|
enum GNUNET_JSON_PostResult pr;
|
||||||
json_t *json;
|
json_t *json;
|
||||||
struct Transaction *t;
|
|
||||||
struct MHD_Response *resp;
|
struct MHD_Response *resp;
|
||||||
int ret;
|
int ret;
|
||||||
|
uint64_t serial_id;
|
||||||
|
|
||||||
pr = GNUNET_JSON_post_parser (REQUEST_BUFFER_MAX,
|
pr = GNUNET_JSON_post_parser (REQUEST_BUFFER_MAX,
|
||||||
con_cls,
|
con_cls,
|
||||||
@ -316,14 +358,17 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
|
|||||||
case GNUNET_JSON_PR_SUCCESS:
|
case GNUNET_JSON_PR_SUCCESS:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
t = GNUNET_new (struct Transaction);
|
|
||||||
{
|
{
|
||||||
|
const char *wtid;
|
||||||
|
uint64_t debit_account;
|
||||||
|
uint64_t credit_account;
|
||||||
const char *base_url;
|
const char *base_url;
|
||||||
|
struct TALER_Amount amount;
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
struct GNUNET_JSON_Specification spec[] = {
|
||||||
GNUNET_JSON_spec_fixed_auto ("wtid", &t->wtid),
|
GNUNET_JSON_spec_string ("wtid", &wtid),
|
||||||
GNUNET_JSON_spec_uint64 ("debit_account", &t->debit_account),
|
GNUNET_JSON_spec_uint64 ("debit_account", &debit_account),
|
||||||
GNUNET_JSON_spec_uint64 ("credit_account", &t->credit_account),
|
GNUNET_JSON_spec_uint64 ("credit_account", &credit_account),
|
||||||
TALER_JSON_spec_amount ("amount", &t->amount),
|
TALER_JSON_spec_amount ("amount", &amount),
|
||||||
GNUNET_JSON_spec_string ("exchange_url", &base_url),
|
GNUNET_JSON_spec_string ("exchange_url", &base_url),
|
||||||
GNUNET_JSON_spec_end ()
|
GNUNET_JSON_spec_end ()
|
||||||
};
|
};
|
||||||
@ -336,19 +381,18 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
|
|||||||
json_decref (json);
|
json_decref (json);
|
||||||
return MHD_NO;
|
return MHD_NO;
|
||||||
}
|
}
|
||||||
t->exchange_base_url = GNUNET_strdup (base_url);
|
serial_id = TALER_FAKEBANK_make_transfer (h,
|
||||||
t->serial_id = ++h->serial_counter;
|
debit_account,
|
||||||
t->date = GNUNET_TIME_absolute_get ();
|
credit_account,
|
||||||
GNUNET_TIME_round_abs (&t->date);
|
&amount,
|
||||||
GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
|
wtid,
|
||||||
h->transactions_tail,
|
base_url);
|
||||||
t);
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
|
"Receiving incoming wire transfer: %llu->%llu from %s\n",
|
||||||
|
(unsigned long long) debit_account,
|
||||||
|
(unsigned long long) credit_account,
|
||||||
|
base_url);
|
||||||
}
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
|
||||||
"Receiving incoming wire transfer: %llu->%llu from %s\n",
|
|
||||||
(unsigned long long) t->debit_account,
|
|
||||||
(unsigned long long) t->credit_account,
|
|
||||||
t->exchange_base_url);
|
|
||||||
json_decref (json);
|
json_decref (json);
|
||||||
|
|
||||||
/* Finally build response object */
|
/* Finally build response object */
|
||||||
@ -358,7 +402,7 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
|
|||||||
|
|
||||||
json = json_pack ("{s:I}",
|
json = json_pack ("{s:I}",
|
||||||
"serial_id",
|
"serial_id",
|
||||||
(json_int_t) t->serial_id);
|
(json_int_t) serial_id);
|
||||||
json_str = json_dumps (json,
|
json_str = json_dumps (json,
|
||||||
JSON_INDENT(2));
|
JSON_INDENT(2));
|
||||||
json_decref (json);
|
json_decref (json);
|
||||||
@ -514,17 +558,10 @@ handle_history (struct TALER_FAKEBANK_Handle *h,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
GNUNET_asprintf (&subject,
|
||||||
char *ws;
|
"%s %s",
|
||||||
|
pos->subject,
|
||||||
ws = GNUNET_STRINGS_data_to_string_alloc (&pos->wtid,
|
pos->exchange_base_url);
|
||||||
sizeof (pos->wtid));
|
|
||||||
GNUNET_asprintf (&subject,
|
|
||||||
"%s %s",
|
|
||||||
ws,
|
|
||||||
pos->exchange_base_url);
|
|
||||||
GNUNET_free (ws);
|
|
||||||
}
|
|
||||||
trans = json_pack ("{s:I, s:o, s:o, s:s, s:I, s:s}",
|
trans = json_pack ("{s:I, s:o, s:o, s:s, s:I, s:s}",
|
||||||
"row_id", (json_int_t) pos->serial_id,
|
"row_id", (json_int_t) pos->serial_id,
|
||||||
"date", GNUNET_JSON_from_time_abs (pos->date),
|
"date", GNUNET_JSON_from_time_abs (pos->date),
|
||||||
|
@ -572,7 +572,9 @@ history_cb (void *cls,
|
|||||||
"Expected history of length %llu, got %llu\n",
|
"Expected history of length %llu, got %llu\n",
|
||||||
(unsigned long long) total,
|
(unsigned long long) total,
|
||||||
(unsigned long long) cmd->details.history.results_obtained);
|
(unsigned long long) cmd->details.history.results_obtained);
|
||||||
print_expected (h, total, UINT_MAX);
|
print_expected (h,
|
||||||
|
total,
|
||||||
|
UINT_MAX);
|
||||||
free_history (h,
|
free_history (h,
|
||||||
total);
|
total);
|
||||||
fail (is);
|
fail (is);
|
||||||
@ -621,7 +623,6 @@ interpreter_run (void *cls)
|
|||||||
struct InterpreterState *is = cls;
|
struct InterpreterState *is = cls;
|
||||||
struct TBI_Command *cmd = &is->commands[is->ip];
|
struct TBI_Command *cmd = &is->commands[is->ip];
|
||||||
const struct TBI_Command *ref;
|
const struct TBI_Command *ref;
|
||||||
struct TALER_WireTransferIdentifierRawP wtid;
|
|
||||||
struct TALER_Amount amount;
|
struct TALER_Amount amount;
|
||||||
const struct GNUNET_SCHEDULER_TaskContext *tc;
|
const struct GNUNET_SCHEDULER_TaskContext *tc;
|
||||||
struct TALER_BANK_AuthenticationData auth;
|
struct TALER_BANK_AuthenticationData auth;
|
||||||
@ -719,25 +720,34 @@ interpreter_run (void *cls)
|
|||||||
GNUNET_assert (GNUNET_OK ==
|
GNUNET_assert (GNUNET_OK ==
|
||||||
TALER_string_to_amount (ref->details.admin_add_incoming.amount,
|
TALER_string_to_amount (ref->details.admin_add_incoming.amount,
|
||||||
&amount));
|
&amount));
|
||||||
if (GNUNET_OK !=
|
|
||||||
TALER_FAKEBANK_check (is->fakebank,
|
|
||||||
&amount,
|
|
||||||
ref->details.admin_add_incoming.debit_account_no,
|
|
||||||
ref->details.admin_add_incoming.credit_account_no,
|
|
||||||
ref->details.admin_add_incoming.exchange_base_url,
|
|
||||||
&wtid))
|
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
char *subject;
|
||||||
fail (is);
|
char *expect;
|
||||||
return;
|
|
||||||
}
|
if (GNUNET_OK !=
|
||||||
if (0 != memcmp (&wtid,
|
TALER_FAKEBANK_check (is->fakebank,
|
||||||
&ref->details.admin_add_incoming.wtid,
|
&amount,
|
||||||
sizeof (wtid)))
|
ref->details.admin_add_incoming.debit_account_no,
|
||||||
{
|
ref->details.admin_add_incoming.credit_account_no,
|
||||||
GNUNET_break (0);
|
ref->details.admin_add_incoming.exchange_base_url,
|
||||||
fail (is);
|
&subject))
|
||||||
return;
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
fail (is);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
expect = GNUNET_STRINGS_data_to_string_alloc (&ref->details.admin_add_incoming.wtid,
|
||||||
|
sizeof (ref->details.admin_add_incoming.wtid));
|
||||||
|
if (0 != strcmp (subject, expect))
|
||||||
|
{
|
||||||
|
GNUNET_free (expect);
|
||||||
|
GNUNET_free (subject);
|
||||||
|
GNUNET_break (0);
|
||||||
|
fail (is);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GNUNET_free (subject);
|
||||||
|
GNUNET_free (expect);
|
||||||
}
|
}
|
||||||
is->ip++;
|
is->ip++;
|
||||||
is->task = GNUNET_SCHEDULER_add_now (&interpreter_run,
|
is->task = GNUNET_SCHEDULER_add_now (&interpreter_run,
|
||||||
|
@ -636,9 +636,9 @@ struct Command
|
|||||||
const char *exchange_base_url;
|
const char *exchange_base_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set (!) to the wire transfer identifier observed.
|
* Set (!) to the wire transfer subject observed.
|
||||||
*/
|
*/
|
||||||
struct TALER_WireTransferIdentifierRawP wtid;
|
char *subject;
|
||||||
|
|
||||||
} check_bank_transfer;
|
} check_bank_transfer;
|
||||||
|
|
||||||
@ -1805,18 +1805,24 @@ deposit_wtid_cb (void *cls,
|
|||||||
if (NULL != cmd->details.deposit_wtid.bank_transfer_ref)
|
if (NULL != cmd->details.deposit_wtid.bank_transfer_ref)
|
||||||
{
|
{
|
||||||
const struct Command *ref;
|
const struct Command *ref;
|
||||||
|
char *ws;
|
||||||
|
|
||||||
|
ws = GNUNET_STRINGS_data_to_string_alloc (wtid,
|
||||||
|
sizeof (*wtid));
|
||||||
|
|
||||||
|
|
||||||
ref = find_command (is,
|
ref = find_command (is,
|
||||||
cmd->details.deposit_wtid.bank_transfer_ref);
|
cmd->details.deposit_wtid.bank_transfer_ref);
|
||||||
GNUNET_assert (NULL != ref);
|
GNUNET_assert (NULL != ref);
|
||||||
if (0 != memcmp (wtid,
|
if (0 != strcmp (ws,
|
||||||
&ref->details.check_bank_transfer.wtid,
|
ref->details.check_bank_transfer.subject))
|
||||||
sizeof (struct TALER_WireTransferIdentifierRawP)))
|
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
|
GNUNET_free (ws);
|
||||||
fail (is);
|
fail (is);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
GNUNET_free (ws);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MHD_HTTP_ACCEPTED:
|
case MHD_HTTP_ACCEPTED:
|
||||||
@ -2496,7 +2502,11 @@ interpreter_run (void *cls)
|
|||||||
cmd->details.wire_deposits.wtid = ref->details.deposit_wtid.wtid;
|
cmd->details.wire_deposits.wtid = ref->details.deposit_wtid.wtid;
|
||||||
break;
|
break;
|
||||||
case OC_CHECK_BANK_TRANSFER:
|
case OC_CHECK_BANK_TRANSFER:
|
||||||
cmd->details.wire_deposits.wtid = ref->details.check_bank_transfer.wtid;
|
GNUNET_assert (GNUNET_OK ==
|
||||||
|
GNUNET_STRINGS_string_to_data (ref->details.check_bank_transfer.subject,
|
||||||
|
strlen (ref->details.check_bank_transfer.subject),
|
||||||
|
&cmd->details.wire_deposits.wtid,
|
||||||
|
sizeof (cmd->details.wire_deposits.wtid)));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -2597,7 +2607,7 @@ interpreter_run (void *cls)
|
|||||||
cmd->details.check_bank_transfer.account_debit,
|
cmd->details.check_bank_transfer.account_debit,
|
||||||
cmd->details.check_bank_transfer.account_credit,
|
cmd->details.check_bank_transfer.account_credit,
|
||||||
cmd->details.check_bank_transfer.exchange_base_url,
|
cmd->details.check_bank_transfer.exchange_base_url,
|
||||||
&cmd->details.check_bank_transfer.wtid))
|
&cmd->details.check_bank_transfer.subject))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
fail (is);
|
fail (is);
|
||||||
@ -2951,6 +2961,8 @@ do_shutdown (void *cls)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OC_CHECK_BANK_TRANSFER:
|
case OC_CHECK_BANK_TRANSFER:
|
||||||
|
GNUNET_free_non_null (cmd->details.check_bank_transfer.subject);
|
||||||
|
cmd->details.check_bank_transfer.subject = NULL;
|
||||||
break;
|
break;
|
||||||
case OC_CHECK_BANK_TRANSFERS_EMPTY:
|
case OC_CHECK_BANK_TRANSFERS_EMPTY:
|
||||||
break;
|
break;
|
||||||
|
@ -118,7 +118,7 @@ struct Command
|
|||||||
/**
|
/**
|
||||||
* Subject of the transfer, set by the command.
|
* Subject of the transfer, set by the command.
|
||||||
*/
|
*/
|
||||||
struct TALER_WireTransferIdentifierRawP wtid;
|
char *subject;
|
||||||
|
|
||||||
} expect_transaction;
|
} expect_transaction;
|
||||||
|
|
||||||
@ -565,7 +565,7 @@ interpreter (void *cls)
|
|||||||
cmd->details.expect_transaction.debit_account,
|
cmd->details.expect_transaction.debit_account,
|
||||||
cmd->details.expect_transaction.credit_account,
|
cmd->details.expect_transaction.credit_account,
|
||||||
cmd->details.expect_transaction.exchange_base_url,
|
cmd->details.expect_transaction.exchange_base_url,
|
||||||
&cmd->details.expect_transaction.wtid))
|
&cmd->details.expect_transaction.subject))
|
||||||
{
|
{
|
||||||
fail (cmd);
|
fail (cmd);
|
||||||
return;
|
return;
|
||||||
|
@ -31,7 +31,6 @@
|
|||||||
#include "taler_fakebank_lib.h"
|
#include "taler_fakebank_lib.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Commands for the interpreter.
|
* Commands for the interpreter.
|
||||||
*/
|
*/
|
||||||
@ -127,7 +126,7 @@ struct Command
|
|||||||
/**
|
/**
|
||||||
* Subject of the transfer, set by the command.
|
* Subject of the transfer, set by the command.
|
||||||
*/
|
*/
|
||||||
struct TALER_WireTransferIdentifierRawP wtid;
|
char *subject;
|
||||||
|
|
||||||
} expect_transfer;
|
} expect_transfer;
|
||||||
|
|
||||||
@ -371,6 +370,8 @@ shutdown_action (void *cls)
|
|||||||
state);
|
state);
|
||||||
break;
|
break;
|
||||||
case OPCODE_EXPECT_TRANSFER:
|
case OPCODE_EXPECT_TRANSFER:
|
||||||
|
GNUNET_free_non_null (cmd->details.expect_transfer.subject);
|
||||||
|
cmd->details.expect_transfer.subject = NULL;
|
||||||
break;
|
break;
|
||||||
case OPCODE_EXPECT_TRANSFERS_EMPTY:
|
case OPCODE_EXPECT_TRANSFERS_EMPTY:
|
||||||
break;
|
break;
|
||||||
@ -521,7 +522,7 @@ interpreter (void *cls)
|
|||||||
cmd->details.expect_transfer.debit_account,
|
cmd->details.expect_transfer.debit_account,
|
||||||
cmd->details.expect_transfer.credit_account,
|
cmd->details.expect_transfer.credit_account,
|
||||||
cmd->details.expect_transfer.exchange_base_url,
|
cmd->details.expect_transfer.exchange_base_url,
|
||||||
&cmd->details.expect_transfer.wtid))
|
&cmd->details.expect_transfer.subject))
|
||||||
{
|
{
|
||||||
fail (cmd);
|
fail (cmd);
|
||||||
return;
|
return;
|
||||||
|
@ -61,9 +61,30 @@ int
|
|||||||
TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
|
TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell the fakebank to create another wire transfer.
|
||||||
|
*
|
||||||
|
* @param h fake bank handle
|
||||||
|
* @param debit_account account to debit
|
||||||
|
* @param credit_account account to credit
|
||||||
|
* @param amount amount to transfer
|
||||||
|
* @param subject wire transfer subject to use
|
||||||
|
* @param exchange_base_url exchange URL
|
||||||
|
* @return serial_id of the transfer
|
||||||
|
*/
|
||||||
|
uint64_t
|
||||||
|
TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||||
|
uint64_t debit_account,
|
||||||
|
uint64_t credit_account,
|
||||||
|
const struct TALER_Amount *amount,
|
||||||
|
const char *subject,
|
||||||
|
const char *exchange_base_url);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that the @a want_amount was transferred from the @a
|
* Check that the @a want_amount was transferred from the @a
|
||||||
* want_debit to the @a want_credit account. If so, set the @a wtid
|
* want_debit to the @a want_credit account. If so, set the @a subject
|
||||||
* to the transfer identifier and remove the transaction from the
|
* to the transfer identifier and remove the transaction from the
|
||||||
* list. If the transaction was not recorded, return #GNUNET_SYSERR.
|
* list. If the transaction was not recorded, return #GNUNET_SYSERR.
|
||||||
*
|
*
|
||||||
@ -73,7 +94,7 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
|
|||||||
* @param want_debit account that should have been credited
|
* @param want_debit account that should have been credited
|
||||||
* @param exchange_base_url expected base URL of the exchange,
|
* @param exchange_base_url expected base URL of the exchange,
|
||||||
* i.e. "https://example.com/"; may include a port
|
* i.e. "https://example.com/"; may include a port
|
||||||
* @param[out] wtid set to the wire transfer identifier
|
* @param[out] subject set to the wire transfer identifier
|
||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
@ -82,7 +103,7 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
|||||||
uint64_t want_debit,
|
uint64_t want_debit,
|
||||||
uint64_t want_credit,
|
uint64_t want_credit,
|
||||||
const char *exchange_base_url,
|
const char *exchange_base_url,
|
||||||
struct TALER_WireTransferIdentifierRawP *wtid);
|
char **subject);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user