Merge branch 'master' of git+ssh://taler.net/var/git/exchange
This commit is contained in:
commit
3b9248e9c6
@ -1,3 +1,7 @@
|
|||||||
|
Wed Jun 8 11:32:41 CEST 2016
|
||||||
|
Export libtalerfakebank API so we can use it in testcases for the
|
||||||
|
merchant as well. -CG
|
||||||
|
|
||||||
Tue Jun 7 15:13:46 CEST 2016
|
Tue Jun 7 15:13:46 CEST 2016
|
||||||
Adding public key of the exchange that was used to sign replies
|
Adding public key of the exchange that was used to sign replies
|
||||||
to applicable callbacks of libtalerexchange. (This will eventually
|
to applicable callbacks of libtalerexchange. (This will eventually
|
||||||
|
@ -7,10 +7,8 @@ if USE_COVERAGE
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
lib_LTLIBRARIES = \
|
lib_LTLIBRARIES = \
|
||||||
libtalerbank.la
|
libtalerbank.la \
|
||||||
|
libtalerfakebank.la
|
||||||
noinst_LTLIBRARIES = \
|
|
||||||
libfakebank.la
|
|
||||||
|
|
||||||
libtalerbank_la_LDFLAGS = \
|
libtalerbank_la_LDFLAGS = \
|
||||||
-version-info 0:0:0 \
|
-version-info 0:0:0 \
|
||||||
@ -27,10 +25,15 @@ libtalerbank_la_LIBADD = \
|
|||||||
-ljansson \
|
-ljansson \
|
||||||
$(XLIB)
|
$(XLIB)
|
||||||
|
|
||||||
libfakebank_la_SOURCES = \
|
|
||||||
fakebank.c fakebank.h
|
|
||||||
|
|
||||||
libfakebank_la_LIBADD = \
|
libtalerfakebank_la_LDFLAGS = \
|
||||||
|
-version-info 0:0:0 \
|
||||||
|
-no-undefined
|
||||||
|
|
||||||
|
libtalerfakebank_la_SOURCES = \
|
||||||
|
fakebank.c
|
||||||
|
|
||||||
|
libtalerfakebank_la_LIBADD = \
|
||||||
$(top_builddir)/src/json/libtalerjson.la \
|
$(top_builddir)/src/json/libtalerjson.la \
|
||||||
-lgnunetjson \
|
-lgnunetjson \
|
||||||
-lgnunetutil \
|
-lgnunetutil \
|
||||||
@ -58,7 +61,7 @@ test_bank_api_SOURCES = \
|
|||||||
test_bank_api.c
|
test_bank_api.c
|
||||||
test_bank_api_LDADD = \
|
test_bank_api_LDADD = \
|
||||||
libtalerbank.la \
|
libtalerbank.la \
|
||||||
libfakebank.la \
|
libtalerfakebank.la \
|
||||||
$(top_builddir)/src/util/libtalerutil.la \
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
-lgnunetcurl \
|
-lgnunetcurl \
|
||||||
-lgnunetutil \
|
-lgnunetutil \
|
||||||
@ -70,7 +73,7 @@ test_bank_api_with_fakebank_SOURCES = \
|
|||||||
test_bank_api_with_fakebank.c
|
test_bank_api_with_fakebank.c
|
||||||
test_bank_api_with_fakebank_LDADD = \
|
test_bank_api_with_fakebank_LDADD = \
|
||||||
libtalerbank.la \
|
libtalerbank.la \
|
||||||
libfakebank.la \
|
libtalerfakebank.la \
|
||||||
$(top_builddir)/src/util/libtalerutil.la \
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
-lgnunetcurl \
|
-lgnunetcurl \
|
||||||
-lgnunetutil \
|
-lgnunetutil \
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "fakebank.h"
|
#include "taler_fakebank_lib.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum POST request size (for /admin/add/incoming)
|
* Maximum POST request size (for /admin/add/incoming)
|
||||||
@ -71,7 +71,7 @@ struct Transaction
|
|||||||
/**
|
/**
|
||||||
* Handle for the fake bank.
|
* Handle for the fake bank.
|
||||||
*/
|
*/
|
||||||
struct FAKEBANK_Handle
|
struct TALER_FAKEBANK_Handle
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* We store transactions in a DLL.
|
* We store transactions in a DLL.
|
||||||
@ -109,11 +109,11 @@ struct FAKEBANK_Handle
|
|||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
FAKEBANK_check (struct FAKEBANK_Handle *h,
|
TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
||||||
const struct TALER_Amount *want_amount,
|
const struct TALER_Amount *want_amount,
|
||||||
uint64_t want_debit,
|
uint64_t want_debit,
|
||||||
uint64_t want_credit,
|
uint64_t want_credit,
|
||||||
struct TALER_WireTransferIdentifierRawP *wtid)
|
struct TALER_WireTransferIdentifierRawP *wtid)
|
||||||
{
|
{
|
||||||
struct Transaction *t;
|
struct Transaction *t;
|
||||||
|
|
||||||
@ -152,14 +152,14 @@ FAKEBANK_check (struct FAKEBANK_Handle *h,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 #FAKEBANK_check()).
|
* that have not been taken care of via #TALER_FAKEBANK_check()).
|
||||||
* If any transactions are onrecord, return #GNUNET_SYSERR.
|
* If any transactions are onrecord, return #GNUNET_SYSERR.
|
||||||
*
|
*
|
||||||
* @param h bank instance
|
* @param h bank instance
|
||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
FAKEBANK_check_empty (struct FAKEBANK_Handle *h)
|
TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h)
|
||||||
{
|
{
|
||||||
struct Transaction *t;
|
struct Transaction *t;
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ FAKEBANK_check_empty (struct FAKEBANK_Handle *h)
|
|||||||
* @param h bank to stop
|
* @param h bank to stop
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
FAKEBANK_stop (struct FAKEBANK_Handle *h)
|
TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h)
|
||||||
{
|
{
|
||||||
if (NULL != h->mhd_task)
|
if (NULL != h->mhd_task)
|
||||||
{
|
{
|
||||||
@ -226,7 +226,7 @@ handle_mhd_completion_callback (void *cls,
|
|||||||
void **con_cls,
|
void **con_cls,
|
||||||
enum MHD_RequestTerminationCode toe)
|
enum MHD_RequestTerminationCode toe)
|
||||||
{
|
{
|
||||||
/* struct FAKEBANK_Handle *h = cls; */
|
/* struct TALER_FAKEBANK_Handle *h = cls; */
|
||||||
|
|
||||||
GNUNET_JSON_post_parser_cleanup (*con_cls);
|
GNUNET_JSON_post_parser_cleanup (*con_cls);
|
||||||
*con_cls = NULL;
|
*con_cls = NULL;
|
||||||
@ -256,7 +256,7 @@ handle_mhd_request (void *cls,
|
|||||||
size_t *upload_data_size,
|
size_t *upload_data_size,
|
||||||
void **con_cls)
|
void **con_cls)
|
||||||
{
|
{
|
||||||
struct FAKEBANK_Handle *h = cls;
|
struct TALER_FAKEBANK_Handle *h = cls;
|
||||||
enum GNUNET_JSON_PostResult pr;
|
enum GNUNET_JSON_PostResult pr;
|
||||||
json_t *json;
|
json_t *json;
|
||||||
struct Transaction *t;
|
struct Transaction *t;
|
||||||
@ -331,7 +331,7 @@ handle_mhd_request (void *cls,
|
|||||||
/**
|
/**
|
||||||
* Task run whenever HTTP server operations are pending.
|
* Task run whenever HTTP server operations are pending.
|
||||||
*
|
*
|
||||||
* @param cls the `struct FAKEBANK_Handle`
|
* @param cls the `struct TALER_FAKEBANK_Handle`
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
run_mhd (void *cls);
|
run_mhd (void *cls);
|
||||||
@ -343,7 +343,7 @@ run_mhd (void *cls);
|
|||||||
* always be called later whenever there is work to be done.
|
* always be called later whenever there is work to be done.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
schedule_httpd (struct FAKEBANK_Handle *h)
|
schedule_httpd (struct TALER_FAKEBANK_Handle *h)
|
||||||
{
|
{
|
||||||
fd_set rs;
|
fd_set rs;
|
||||||
fd_set ws;
|
fd_set ws;
|
||||||
@ -399,12 +399,12 @@ schedule_httpd (struct FAKEBANK_Handle *h)
|
|||||||
/**
|
/**
|
||||||
* Task run whenever HTTP server operations are pending.
|
* Task run whenever HTTP server operations are pending.
|
||||||
*
|
*
|
||||||
* @param cls the `struct FAKEBANK_Handle`
|
* @param cls the `struct TALER_FAKEBANK_Handle`
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
run_mhd (void *cls)
|
run_mhd (void *cls)
|
||||||
{
|
{
|
||||||
struct FAKEBANK_Handle *h = cls;
|
struct TALER_FAKEBANK_Handle *h = cls;
|
||||||
|
|
||||||
h->mhd_task = NULL;
|
h->mhd_task = NULL;
|
||||||
MHD_run (h->mhd_bank);
|
MHD_run (h->mhd_bank);
|
||||||
@ -418,12 +418,12 @@ run_mhd (void *cls)
|
|||||||
* @param port port to listen to
|
* @param port port to listen to
|
||||||
* @return NULL on error
|
* @return NULL on error
|
||||||
*/
|
*/
|
||||||
struct FAKEBANK_Handle *
|
struct TALER_FAKEBANK_Handle *
|
||||||
FAKEBANK_start (uint16_t port)
|
TALER_FAKEBANK_start (uint16_t port)
|
||||||
{
|
{
|
||||||
struct FAKEBANK_Handle *h;
|
struct TALER_FAKEBANK_Handle *h;
|
||||||
|
|
||||||
h = GNUNET_new (struct FAKEBANK_Handle);
|
h = GNUNET_new (struct TALER_FAKEBANK_Handle);
|
||||||
h->mhd_bank = MHD_start_daemon (MHD_USE_DEBUG,
|
h->mhd_bank = MHD_start_daemon (MHD_USE_DEBUG,
|
||||||
port,
|
port,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include <gnunet/gnunet_curl_lib.h>
|
#include <gnunet/gnunet_curl_lib.h>
|
||||||
#include <microhttpd.h>
|
#include <microhttpd.h>
|
||||||
#include "test_bank_interpreter.h"
|
#include "test_bank_interpreter.h"
|
||||||
#include "fakebank.h"
|
#include "taler_fakebank_lib.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -72,7 +72,7 @@ struct InterpreterState
|
|||||||
/**
|
/**
|
||||||
* Fakebank, or NULL if we are not using the fakebank.
|
* Fakebank, or NULL if we are not using the fakebank.
|
||||||
*/
|
*/
|
||||||
struct FAKEBANK_Handle *fakebank;
|
struct TALER_FAKEBANK_Handle *fakebank;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instruction pointer. Tells #interpreter_run() which
|
* Instruction pointer. Tells #interpreter_run() which
|
||||||
@ -242,7 +242,7 @@ interpreter_run (void *cls)
|
|||||||
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 !=
|
if (GNUNET_OK !=
|
||||||
FAKEBANK_check (is->fakebank,
|
TALER_FAKEBANK_check (is->fakebank,
|
||||||
&amount,
|
&amount,
|
||||||
ref->details.admin_add_incoming.debit_account_no,
|
ref->details.admin_add_incoming.debit_account_no,
|
||||||
ref->details.admin_add_incoming.credit_account_no,
|
ref->details.admin_add_incoming.credit_account_no,
|
||||||
@ -265,7 +265,7 @@ interpreter_run (void *cls)
|
|||||||
is);
|
is);
|
||||||
return;
|
return;
|
||||||
case TBI_OC_EXPECT_TRANSFERS_EMPTY:
|
case TBI_OC_EXPECT_TRANSFERS_EMPTY:
|
||||||
if (GNUNET_OK != FAKEBANK_check_empty (is->fakebank))
|
if (GNUNET_OK != TALER_FAKEBANK_check_empty (is->fakebank))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
fail (is);
|
fail (is);
|
||||||
@ -355,7 +355,7 @@ do_shutdown (void *cls)
|
|||||||
}
|
}
|
||||||
if (NULL != is->fakebank)
|
if (NULL != is->fakebank)
|
||||||
{
|
{
|
||||||
FAKEBANK_stop (is->fakebank);
|
TALER_FAKEBANK_stop (is->fakebank);
|
||||||
is->fakebank = NULL;
|
is->fakebank = NULL;
|
||||||
}
|
}
|
||||||
GNUNET_CURL_fini (is->ctx);
|
GNUNET_CURL_fini (is->ctx);
|
||||||
@ -381,7 +381,7 @@ TBI_run_interpreter (int *resultp,
|
|||||||
|
|
||||||
is = GNUNET_new (struct InterpreterState);
|
is = GNUNET_new (struct InterpreterState);
|
||||||
if (GNUNET_YES == run_bank)
|
if (GNUNET_YES == run_bank)
|
||||||
is->fakebank = FAKEBANK_start (8081);
|
is->fakebank = TALER_FAKEBANK_start (8081);
|
||||||
is->resultp = resultp;
|
is->resultp = resultp;
|
||||||
is->commands = commands;
|
is->commands = commands;
|
||||||
is->ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
|
is->ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
|
||||||
|
1
src/benchmark/merchant_details.json
Normal file
1
src/benchmark/merchant_details.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"type":"test", "bank_uri":"https://bank.test.taler.net/", "account_number":63}
|
1
src/benchmark/sender_details.json
Normal file
1
src/benchmark/sender_details.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"type":"test", "bank_uri":"https://bank.test.taler.net/", "account_number":63}
|
@ -26,17 +26,38 @@
|
|||||||
#include <gnunet/gnunet_util_lib.h>
|
#include <gnunet/gnunet_util_lib.h>
|
||||||
#include <gnunet/gnunet_curl_lib.h>
|
#include <gnunet/gnunet_curl_lib.h>
|
||||||
#include <microhttpd.h>
|
#include <microhttpd.h>
|
||||||
|
#include <jansson.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many coins the benchmark should operate on
|
* How many coins the benchmark should operate on
|
||||||
*/
|
*/
|
||||||
static unsigned int pool_size = 100;
|
static unsigned int pool_size = 100;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration file path
|
||||||
|
*/
|
||||||
|
static char *config_file;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuation object (used to get BANK_URI)
|
||||||
|
*/
|
||||||
|
struct GNUNET_CONFIGURATION_Handle *cfg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many reservers ought to be created given the pool size
|
* How many reservers ought to be created given the pool size
|
||||||
*/
|
*/
|
||||||
static unsigned int nreserves;
|
static unsigned int nreserves;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bank details of who creates reserves
|
||||||
|
*/
|
||||||
|
json_t *sender_details;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bank details of who deposits coins
|
||||||
|
*/
|
||||||
|
json_t *merchant_details;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Needed information for a reserve. Other values are the same for all reserves, therefore defined in global variables
|
* Needed information for a reserve. Other values are the same for all reserves, therefore defined in global variables
|
||||||
*/
|
*/
|
||||||
@ -182,7 +203,7 @@ static struct TALER_MerchantPrivateKeyP merchant_priv;
|
|||||||
/**
|
/**
|
||||||
* URI under which the exchange is reachable during the benchmark.
|
* URI under which the exchange is reachable during the benchmark.
|
||||||
*/
|
*/
|
||||||
#define EXCHANGE_URI "http://localhost:8081"
|
#define EXCHANGE_URI "http://localhost:8081/"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many coins (AKA withdraw operations) per reserve should be withdrawn
|
* How many coins (AKA withdraw operations) per reserve should be withdrawn
|
||||||
@ -190,17 +211,21 @@ static struct TALER_MerchantPrivateKeyP merchant_priv;
|
|||||||
#define COINS_PER_RESERVE 12
|
#define COINS_PER_RESERVE 12
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used currency (to be preferably gotten via config file, together
|
* Used currency (read from /keys' output)
|
||||||
* exchange URI and other needed values)
|
|
||||||
*/
|
*/
|
||||||
#define CURRENCY "PUDOS"
|
static char *currency;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Large enough value to allow having 12 coins per reserve without parsing
|
* Large enough value to allow having 12 coins per reserve without parsing
|
||||||
* /keys in the first place
|
* /keys in the first place
|
||||||
*/
|
*/
|
||||||
#define RESERVE_AMOUNT CURRENCY":1000"
|
#define RESERVE_VALUE 1000
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The benchmark withdraws always the same denomination, since the calculation
|
||||||
|
* for refreshing is statically done (at least in its very first version).
|
||||||
|
*/
|
||||||
|
#define COIN_VALUE 5
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Probability a coin can be spent
|
* Probability a coin can be spent
|
||||||
@ -246,6 +271,7 @@ fail (const char *msg)
|
|||||||
"%s\n",
|
"%s\n",
|
||||||
msg);
|
msg);
|
||||||
GNUNET_SCHEDULER_shutdown ();
|
GNUNET_SCHEDULER_shutdown ();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -335,7 +361,6 @@ deposit_cb (void *cls,
|
|||||||
{
|
{
|
||||||
/* TODO: all the refresh logic here */
|
/* TODO: all the refresh logic here */
|
||||||
refreshed_once = GNUNET_YES;
|
refreshed_once = GNUNET_YES;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +398,6 @@ reserve_withdraw_cb (void *cls,
|
|||||||
struct GNUNET_TIME_Absolute timestamp;
|
struct GNUNET_TIME_Absolute timestamp;
|
||||||
struct GNUNET_TIME_Absolute refund_deadline;
|
struct GNUNET_TIME_Absolute refund_deadline;
|
||||||
struct GNUNET_HashCode h_contract;
|
struct GNUNET_HashCode h_contract;
|
||||||
json_t *merchant_details;
|
|
||||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||||
struct TALER_DepositRequestPS dr;
|
struct TALER_DepositRequestPS dr;
|
||||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||||
@ -394,10 +418,6 @@ reserve_withdraw_cb (void *cls,
|
|||||||
TALER_amount_subtract (&amount,
|
TALER_amount_subtract (&amount,
|
||||||
&coins[coin_index].pk->value,
|
&coins[coin_index].pk->value,
|
||||||
&coins[coin_index].pk->fee_deposit);
|
&coins[coin_index].pk->fee_deposit);
|
||||||
merchant_details = json_loads ("{ \"type\":\"test\", \"bank_uri\":\"https://bank.test.taler.net/\", \"account_number\":63}",
|
|
||||||
JSON_REJECT_DUPLICATES,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
memset (&dr, 0, sizeof (dr));
|
memset (&dr, 0, sizeof (dr));
|
||||||
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
|
dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
|
||||||
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
|
dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
|
||||||
@ -482,7 +502,8 @@ add_incoming_cb (void *cls,
|
|||||||
coin_index = reserve_index * COINS_PER_RESERVE + i;
|
coin_index = reserve_index * COINS_PER_RESERVE + i;
|
||||||
coins[coin_index].coin_priv.eddsa_priv = *coin_priv;
|
coins[coin_index].coin_priv.eddsa_priv = *coin_priv;
|
||||||
coins[coin_index].reserve_index = reserve_index;
|
coins[coin_index].reserve_index = reserve_index;
|
||||||
TALER_string_to_amount (CURRENCY":5", &amount);
|
TALER_amount_get_zero (currency, &amount);
|
||||||
|
amount.value = COIN_VALUE;
|
||||||
GNUNET_assert (NULL != (coins[coin_index].pk = find_pk (keys, &amount)));
|
GNUNET_assert (NULL != (coins[coin_index].pk = find_pk (keys, &amount)));
|
||||||
GNUNET_free (coin_priv);
|
GNUNET_free (coin_priv);
|
||||||
coins[coin_index].wsh =
|
coins[coin_index].wsh =
|
||||||
@ -508,7 +529,6 @@ benchmark_run (void *cls)
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
struct GNUNET_CRYPTO_EddsaPrivateKey *priv;
|
struct GNUNET_CRYPTO_EddsaPrivateKey *priv;
|
||||||
json_t *transfer_details;
|
json_t *transfer_details;
|
||||||
json_t *sender_details;
|
|
||||||
char *uuid;
|
char *uuid;
|
||||||
struct TALER_ReservePublicKeyP reserve_pub;
|
struct TALER_ReservePublicKeyP reserve_pub;
|
||||||
struct GNUNET_TIME_Absolute execution_date;
|
struct GNUNET_TIME_Absolute execution_date;
|
||||||
@ -521,18 +541,13 @@ benchmark_run (void *cls)
|
|||||||
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
|
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
|
||||||
&blinding_key,
|
&blinding_key,
|
||||||
sizeof (blinding_key));
|
sizeof (blinding_key));
|
||||||
TALER_string_to_amount (RESERVE_AMOUNT, &reserve_amount);
|
TALER_amount_get_zero (currency, &reserve_amount);
|
||||||
sender_details = json_loads ("{ \"type\":\"test\", \"bank_uri\":\"https://bank.test.taler.net/\", \"account_number\":62}",
|
reserve_amount.value = RESERVE_VALUE;
|
||||||
JSON_REJECT_DUPLICATES,
|
|
||||||
NULL);
|
|
||||||
execution_date = GNUNET_TIME_absolute_get ();
|
execution_date = GNUNET_TIME_absolute_get ();
|
||||||
GNUNET_TIME_round_abs (&execution_date);
|
GNUNET_TIME_round_abs (&execution_date);
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"benchmark_run() invoked\n");
|
"benchmark_run() invoked\n");
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
|
||||||
"gotten pool_size of %d\n",
|
|
||||||
pool_size);
|
|
||||||
nreserves = pool_size / COINS_PER_RESERVE;
|
nreserves = pool_size / COINS_PER_RESERVE;
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"creating %d reserves\n",
|
"creating %d reserves\n",
|
||||||
@ -600,6 +615,9 @@ cert_cb (void *cls,
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Certificate callback invoked, invoking benchmark_run()\n");
|
"Certificate callback invoked, invoking benchmark_run()\n");
|
||||||
keys = _keys;
|
keys = _keys;
|
||||||
|
currency = _keys->denom_keys[0].value.currency;
|
||||||
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
|
"Using currency: %s\n", currency);
|
||||||
benchmark_task = GNUNET_SCHEDULER_add_now (&benchmark_run,
|
benchmark_task = GNUNET_SCHEDULER_add_now (&benchmark_run,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
@ -662,6 +680,11 @@ do_shutdown (void *cls)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (NULL != sender_details)
|
||||||
|
json_decref (sender_details);
|
||||||
|
if (NULL != merchant_details)
|
||||||
|
json_decref (sender_details);
|
||||||
|
|
||||||
GNUNET_free_non_null (reserves);
|
GNUNET_free_non_null (reserves);
|
||||||
GNUNET_free_non_null (coins);
|
GNUNET_free_non_null (coins);
|
||||||
GNUNET_free_non_null (spent_coins);
|
GNUNET_free_non_null (spent_coins);
|
||||||
@ -692,13 +715,51 @@ do_shutdown (void *cls)
|
|||||||
static void
|
static void
|
||||||
run (void *cls)
|
run (void *cls)
|
||||||
{
|
{
|
||||||
|
char *sender_details_filename;
|
||||||
|
char *merchant_details_filename;
|
||||||
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"running run()\n");
|
"running run()\n");
|
||||||
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
|
"gotten pool_size of %d\n",
|
||||||
|
pool_size);
|
||||||
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
|
"config file: %s\n",
|
||||||
|
config_file);
|
||||||
|
if (NULL == config_file)
|
||||||
|
fail ("-c option is mandatory\n");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read sender_details.json here
|
||||||
|
*/
|
||||||
|
cfg = GNUNET_CONFIGURATION_create ();
|
||||||
|
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_parse (cfg, config_file))
|
||||||
|
fail ("failed to parse configuration file\n");
|
||||||
|
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg,
|
||||||
|
"benchmark",
|
||||||
|
"sender_details",
|
||||||
|
&sender_details_filename))
|
||||||
|
fail ("failed to get SENDER_DETAILS value\n");
|
||||||
|
|
||||||
|
sender_details = json_load_file (sender_details_filename,
|
||||||
|
JSON_REJECT_DUPLICATES,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_get_value_filename (cfg,
|
||||||
|
"benchmark",
|
||||||
|
"merchant_details",
|
||||||
|
&merchant_details_filename))
|
||||||
|
fail ("failed to get MERCHANT_DETAILS value\n");
|
||||||
|
|
||||||
|
merchant_details = json_load_file (merchant_details_filename,
|
||||||
|
JSON_REJECT_DUPLICATES,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
GNUNET_CONFIGURATION_destroy (cfg);
|
||||||
GNUNET_array_append (spent_coins,
|
GNUNET_array_append (spent_coins,
|
||||||
spent_coins_size,
|
spent_coins_size,
|
||||||
1);
|
1);
|
||||||
spent_coins_size++;
|
spent_coins_size++;
|
||||||
|
|
||||||
reserves = NULL;
|
reserves = NULL;
|
||||||
coins = NULL;
|
coins = NULL;
|
||||||
ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
|
ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
|
||||||
@ -720,18 +781,96 @@ main (int argc,
|
|||||||
char * const *argv)
|
char * const *argv)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
struct GNUNET_OS_Process *proc;
|
||||||
|
struct GNUNET_OS_Process *exchanged;
|
||||||
|
unsigned int cnt;
|
||||||
|
|
||||||
GNUNET_log_setup ("taler-exchange-benchmark",
|
GNUNET_log_setup ("taler-exchange-benchmark",
|
||||||
"WARNING",
|
"WARNING",
|
||||||
NULL);
|
NULL);
|
||||||
const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
||||||
{'s', "pool-size", NULL,
|
{'s', "pool-size", NULL,
|
||||||
"How many coins this benchmark should instantiate", GNUNET_YES,
|
"How many coins this benchmark should instantiate", GNUNET_YES,
|
||||||
&GNUNET_GETOPT_set_uint, &pool_size}
|
&GNUNET_GETOPT_set_uint, &pool_size},
|
||||||
|
{'c', "config", NULL,
|
||||||
|
"Configuration file", GNUNET_YES,
|
||||||
|
&GNUNET_GETOPT_set_string, &config_file}
|
||||||
};
|
};
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_SYSERR !=
|
GNUNET_assert (GNUNET_SYSERR !=
|
||||||
GNUNET_GETOPT_run ("taler-exchange-benchmark",
|
GNUNET_GETOPT_run ("taler-exchange-benchmark",
|
||||||
options, argc, argv));
|
options, argc, argv));
|
||||||
|
|
||||||
|
proc = GNUNET_OS_start_process (GNUNET_NO,
|
||||||
|
GNUNET_OS_INHERIT_STD_ALL,
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
"taler-exchange-keyup",
|
||||||
|
"taler-exchange-keyup",
|
||||||
|
NULL);
|
||||||
|
if (NULL == proc)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to run taler-exchange-keyup. Check your PATH.\n");
|
||||||
|
return 77;
|
||||||
|
}
|
||||||
|
|
||||||
|
GNUNET_OS_process_wait (proc);
|
||||||
|
GNUNET_OS_process_destroy (proc);
|
||||||
|
|
||||||
|
proc = GNUNET_OS_start_process (GNUNET_NO,
|
||||||
|
GNUNET_OS_INHERIT_STD_ALL,
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
"taler-exchange-dbinit",
|
||||||
|
"taler-exchange-dbinit",
|
||||||
|
"-r",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
|
||||||
|
if (NULL == proc)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to run taler-exchange-dbinit. Check your PATH.\n");
|
||||||
|
return 77;
|
||||||
|
}
|
||||||
|
GNUNET_OS_process_wait (proc);
|
||||||
|
GNUNET_OS_process_destroy (proc);
|
||||||
|
|
||||||
|
exchanged = GNUNET_OS_start_process (GNUNET_NO,
|
||||||
|
GNUNET_OS_INHERIT_STD_ALL,
|
||||||
|
NULL, NULL, NULL,
|
||||||
|
"taler-exchange-httpd",
|
||||||
|
"taler-exchange-httpd",
|
||||||
|
NULL);
|
||||||
|
if (NULL == exchanged)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to run taler-exchange-httpd. Check your PATH.\n");
|
||||||
|
return 77;
|
||||||
|
}
|
||||||
|
|
||||||
|
cnt = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
fprintf (stderr, ".");
|
||||||
|
sleep (1);
|
||||||
|
cnt++;
|
||||||
|
if (cnt > 60)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"\nFailed to start taler-exchange-httpd\n");
|
||||||
|
GNUNET_OS_process_kill (exchanged,
|
||||||
|
SIGKILL);
|
||||||
|
GNUNET_OS_process_wait (exchanged);
|
||||||
|
GNUNET_OS_process_destroy (exchanged);
|
||||||
|
return 77;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (0 != system ("wget -q -t 1 -T 1 " EXCHANGE_URI "keys -o /dev/null -O /dev/null"));
|
||||||
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
GNUNET_SCHEDULER_run (&run, NULL);
|
GNUNET_SCHEDULER_run (&run, NULL);
|
||||||
|
GNUNET_OS_process_wait (exchanged);
|
||||||
|
GNUNET_OS_process_destroy (exchanged);
|
||||||
|
|
||||||
return GNUNET_OK;
|
return GNUNET_OK;
|
||||||
}
|
}
|
||||||
|
3
src/benchmark/taler-exchange-benchmark.conf
Normal file
3
src/benchmark/taler-exchange-benchmark.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[benchmark]
|
||||||
|
SENDER_DETAILS = ~/exchange/src/benchmark/sender_details.json
|
||||||
|
MERCHANT_DETAILS = ~/exchange/src/benchmark/merchant_details.json
|
@ -56,7 +56,7 @@ test_exchange_api_SOURCES = \
|
|||||||
test_exchange_api_LDADD = \
|
test_exchange_api_LDADD = \
|
||||||
libtalerexchange.la \
|
libtalerexchange.la \
|
||||||
$(LIBGCRYPT_LIBS) \
|
$(LIBGCRYPT_LIBS) \
|
||||||
$(top_builddir)/src/bank-lib/libfakebank.la \
|
$(top_builddir)/src/bank-lib/libtalerfakebank.la \
|
||||||
$(top_builddir)/src/json/libtalerjson.la \
|
$(top_builddir)/src/json/libtalerjson.la \
|
||||||
$(top_builddir)/src/util/libtalerutil.la \
|
$(top_builddir)/src/util/libtalerutil.la \
|
||||||
-lgnunetcurl \
|
-lgnunetcurl \
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include "taler_json_lib.h"
|
#include "taler_json_lib.h"
|
||||||
#include <gnunet/gnunet_util_lib.h>
|
#include <gnunet/gnunet_util_lib.h>
|
||||||
#include <microhttpd.h>
|
#include <microhttpd.h>
|
||||||
#include "fakebank.h"
|
#include "taler_fakebank_lib.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,7 +62,7 @@ static struct GNUNET_SCHEDULER_Task *timeout_task;
|
|||||||
/**
|
/**
|
||||||
* Handle to our fakebank.
|
* Handle to our fakebank.
|
||||||
*/
|
*/
|
||||||
static struct FAKEBANK_Handle *fakebank;
|
static struct TALER_FAKEBANK_Handle *fakebank;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Result of the testcases, #GNUNET_OK on success
|
* Result of the testcases, #GNUNET_OK on success
|
||||||
@ -2252,7 +2252,7 @@ interpreter_run (void *cls)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
FAKEBANK_check (fakebank,
|
TALER_FAKEBANK_check (fakebank,
|
||||||
&amount,
|
&amount,
|
||||||
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,
|
||||||
@ -2268,7 +2268,7 @@ interpreter_run (void *cls)
|
|||||||
case OC_CHECK_BANK_TRANSFERS_EMPTY:
|
case OC_CHECK_BANK_TRANSFERS_EMPTY:
|
||||||
{
|
{
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
FAKEBANK_check_empty (fakebank))
|
TALER_FAKEBANK_check_empty (fakebank))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
fail (is);
|
fail (is);
|
||||||
@ -2580,7 +2580,7 @@ do_shutdown (void *cls)
|
|||||||
GNUNET_free (is);
|
GNUNET_free (is);
|
||||||
if (NULL != fakebank)
|
if (NULL != fakebank)
|
||||||
{
|
{
|
||||||
FAKEBANK_stop (fakebank);
|
TALER_FAKEBANK_stop (fakebank);
|
||||||
fakebank = NULL;
|
fakebank = NULL;
|
||||||
}
|
}
|
||||||
if (NULL != exchange)
|
if (NULL != exchange)
|
||||||
@ -3012,7 +3012,7 @@ run (void *cls)
|
|||||||
&rc);
|
&rc);
|
||||||
GNUNET_assert (NULL != ctx);
|
GNUNET_assert (NULL != ctx);
|
||||||
rc = GNUNET_CURL_gnunet_rc_create (ctx);
|
rc = GNUNET_CURL_gnunet_rc_create (ctx);
|
||||||
fakebank = FAKEBANK_start (8082);
|
fakebank = TALER_FAKEBANK_start (8082);
|
||||||
exchange = TALER_EXCHANGE_connect (ctx,
|
exchange = TALER_EXCHANGE_connect (ctx,
|
||||||
"http://localhost:8081",
|
"http://localhost:8081",
|
||||||
&cert_cb, is,
|
&cert_cb, is,
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#include "taler_json_lib.h"
|
#include "taler_json_lib.h"
|
||||||
#include "taler_exchangedb_plugin.h"
|
#include "taler_exchangedb_plugin.h"
|
||||||
#include <microhttpd.h>
|
#include <microhttpd.h>
|
||||||
#include "fakebank.h"
|
#include "taler_fakebank_lib.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ static struct GNUNET_CRYPTO_RsaPublicKey *coin_pub;
|
|||||||
/**
|
/**
|
||||||
* Handle for our fake bank.
|
* Handle for our fake bank.
|
||||||
*/
|
*/
|
||||||
static struct FAKEBANK_Handle *fb;
|
static struct TALER_FAKEBANK_Handle *fb;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -295,7 +295,7 @@ shutdown_action (void *cls)
|
|||||||
}
|
}
|
||||||
if (NULL != fb)
|
if (NULL != fb)
|
||||||
{
|
{
|
||||||
FAKEBANK_stop (fb);
|
TALER_FAKEBANK_stop (fb);
|
||||||
fb = NULL;
|
fb = NULL;
|
||||||
}
|
}
|
||||||
if (NULL != child_death_task)
|
if (NULL != child_death_task)
|
||||||
@ -532,7 +532,7 @@ interpreter (void *cls)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case OPCODE_EXPECT_TRANSACTIONS_EMPTY:
|
case OPCODE_EXPECT_TRANSACTIONS_EMPTY:
|
||||||
if (GNUNET_OK != FAKEBANK_check_empty (fb))
|
if (GNUNET_OK != TALER_FAKEBANK_check_empty (fb))
|
||||||
{
|
{
|
||||||
fail (cmd);
|
fail (cmd);
|
||||||
return;
|
return;
|
||||||
@ -561,7 +561,7 @@ interpreter (void *cls)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
FAKEBANK_check (fb,
|
TALER_FAKEBANK_check (fb,
|
||||||
&want_amount,
|
&want_amount,
|
||||||
cmd->details.expect_transaction.debit_account,
|
cmd->details.expect_transaction.debit_account,
|
||||||
cmd->details.expect_transaction.credit_account,
|
cmd->details.expect_transaction.credit_account,
|
||||||
@ -1179,7 +1179,7 @@ run (void *cls)
|
|||||||
&timeout_action,
|
&timeout_action,
|
||||||
NULL);
|
NULL);
|
||||||
result = 1; /* test failed for undefined reason */
|
result = 1; /* test failed for undefined reason */
|
||||||
fb = FAKEBANK_start (8082);
|
fb = TALER_FAKEBANK_start (8082);
|
||||||
if (NULL == fb)
|
if (NULL == fb)
|
||||||
{
|
{
|
||||||
GNUNET_SCHEDULER_shutdown ();
|
GNUNET_SCHEDULER_shutdown ();
|
||||||
|
@ -15,11 +15,12 @@ talerinclude_HEADERS = \
|
|||||||
taler_amount_lib.h \
|
taler_amount_lib.h \
|
||||||
taler_bank_service.h \
|
taler_bank_service.h \
|
||||||
taler_crypto_lib.h \
|
taler_crypto_lib.h \
|
||||||
taler_json_lib.h \
|
|
||||||
taler_util.h \
|
|
||||||
taler_exchange_service.h \
|
taler_exchange_service.h \
|
||||||
taler_exchangedb_lib.h \
|
taler_exchangedb_lib.h \
|
||||||
taler_exchangedb_plugin.h \
|
taler_exchangedb_plugin.h \
|
||||||
|
taler_fakebank_lib.h \
|
||||||
|
taler_json_lib.h \
|
||||||
|
taler_util.h \
|
||||||
taler_pq_lib.h \
|
taler_pq_lib.h \
|
||||||
taler_signatures.h \
|
taler_signatures.h \
|
||||||
taler_wire_lib.h \
|
taler_wire_lib.h \
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
* @brief API for a library that fakes being a Taler bank
|
* @brief API for a library that fakes being a Taler bank
|
||||||
* @author Christian Grothoff <christian@grothoff.org>
|
* @author Christian Grothoff <christian@grothoff.org>
|
||||||
*/
|
*/
|
||||||
#ifndef FAKEBANK_H
|
#ifndef TALER_FAKEBANK_H
|
||||||
#define FAKEBANK_H
|
#define TALER_FAKEBANK_H
|
||||||
|
|
||||||
#include "taler_util.h"
|
#include "taler_util.h"
|
||||||
#include <gnunet/gnunet_json_lib.h>
|
#include <gnunet/gnunet_json_lib.h>
|
||||||
@ -30,14 +30,14 @@
|
|||||||
/**
|
/**
|
||||||
* Handle for the fake bank.
|
* Handle for the fake bank.
|
||||||
*/
|
*/
|
||||||
struct FAKEBANK_Handle;
|
struct TALER_FAKEBANK_Handle;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the fake bank. The fake bank will, like the normal bank,
|
* Start the fake bank. The fake bank will, like the normal bank,
|
||||||
* listen for requests for /admin/add/incoming. However, instead of
|
* listen for requests for /admin/add/incoming. However, instead of
|
||||||
* executing or storing those requests, it will simply allow querying
|
* executing or storing those requests, it will simply allow querying
|
||||||
* whether such a request has been made via #FAKEBANK_check().
|
* whether such a request has been made via #TALER_FAKEBANK_check().
|
||||||
*
|
*
|
||||||
* This is useful for writing testcases to check whether the exchange
|
* This is useful for writing testcases to check whether the exchange
|
||||||
* would have issued the correct wire transfer orders.
|
* would have issued the correct wire transfer orders.
|
||||||
@ -45,20 +45,20 @@ struct FAKEBANK_Handle;
|
|||||||
* @param port port to listen to
|
* @param port port to listen to
|
||||||
* @return NULL on error
|
* @return NULL on error
|
||||||
*/
|
*/
|
||||||
struct FAKEBANK_Handle *
|
struct TALER_FAKEBANK_Handle *
|
||||||
FAKEBANK_start (uint16_t port);
|
TALER_FAKEBANK_start (uint16_t port);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 #FAKEBANK_check()).
|
* that have not been taken care of via #TALER_FAKEBANK_check()).
|
||||||
* If any transactions are onrecord, return #GNUNET_SYSERR.
|
* If any transactions are onrecord, return #GNUNET_SYSERR.
|
||||||
*
|
*
|
||||||
* @param h bank instance
|
* @param h bank instance
|
||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
FAKEBANK_check_empty (struct FAKEBANK_Handle *h);
|
TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,7 +75,7 @@ FAKEBANK_check_empty (struct FAKEBANK_Handle *h);
|
|||||||
* @return #GNUNET_OK on success
|
* @return #GNUNET_OK on success
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
FAKEBANK_check (struct FAKEBANK_Handle *h,
|
TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
||||||
const struct TALER_Amount *want_amount,
|
const struct TALER_Amount *want_amount,
|
||||||
uint64_t want_debit,
|
uint64_t want_debit,
|
||||||
uint64_t want_credit,
|
uint64_t want_credit,
|
||||||
@ -88,7 +88,7 @@ FAKEBANK_check (struct FAKEBANK_Handle *h,
|
|||||||
* @param h bank to stop
|
* @param h bank to stop
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
FAKEBANK_stop (struct FAKEBANK_Handle *h);
|
TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user