dead
This commit is contained in:
parent
00740610ba
commit
c6ba84462d
@ -64,14 +64,59 @@ struct Transaction
|
||||
char *credit_account;
|
||||
|
||||
/**
|
||||
* Subject of the transfer.
|
||||
* What does the @e subject contain?
|
||||
*/
|
||||
char *subject;
|
||||
enum
|
||||
{
|
||||
/**
|
||||
* Transfer TO the exchange.
|
||||
*/
|
||||
T_CREDIT,
|
||||
|
||||
/**
|
||||
* Transfer FROM the exchange.
|
||||
*/
|
||||
T_DEBIT
|
||||
} type;
|
||||
|
||||
/**
|
||||
* Base URL of the exchange.
|
||||
* Wire transfer subject.
|
||||
*/
|
||||
char *exchange_base_url;
|
||||
union
|
||||
{
|
||||
|
||||
/**
|
||||
* Used if @e type is T_DEBIT.
|
||||
*/
|
||||
struct
|
||||
{
|
||||
|
||||
/**
|
||||
* Subject of the transfer.
|
||||
*/
|
||||
struct TALER_WireTransferIdentifierRawP wtid;
|
||||
|
||||
/**
|
||||
* Base URL of the exchange.
|
||||
*/
|
||||
char *exchange_base_url;
|
||||
|
||||
} debit;
|
||||
|
||||
/**
|
||||
* Used if @e type is T_CREDIT.
|
||||
*/
|
||||
struct
|
||||
{
|
||||
|
||||
/**
|
||||
* Reserve public key of the credit operation.
|
||||
*/
|
||||
struct TALER_ReservePublicKeyP reserve_pub;
|
||||
|
||||
} credit;
|
||||
|
||||
} subject;
|
||||
|
||||
/**
|
||||
* When did the transaction happen?
|
||||
@ -142,43 +187,11 @@ struct TALER_FAKEBANK_Handle
|
||||
|
||||
|
||||
/**
|
||||
* Check that the @a want_amount was transferred from
|
||||
* the @a want_debit to the @a want_credit account. If
|
||||
* so, set the @a subject to the transfer identifier.
|
||||
* If not, return #GNUNET_SYSERR.
|
||||
*
|
||||
* @param h bank instance
|
||||
* @param want_amount transfer amount desired
|
||||
* @param want_debit account that should have been debited
|
||||
* @param want_credit account that should have been credited
|
||||
* @param exchange_base_url expected base URL of the exchange
|
||||
* i.e. "https://example.com/"; may include a port
|
||||
* @param[out] subject set to the wire transfer identifier
|
||||
* @return #GNUNET_OK on success
|
||||
* Generate log messages for failed check operation.
|
||||
*/
|
||||
int
|
||||
TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
||||
const struct TALER_Amount *want_amount,
|
||||
const char *want_debit,
|
||||
const char *want_credit,
|
||||
const char *exchange_base_url,
|
||||
char **subject)
|
||||
static void
|
||||
check_log (struct TALER_FAKEBANK_Handle *h)
|
||||
{
|
||||
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||
{
|
||||
if ( (want_debit == t->debit_account) &&
|
||||
(want_credit == t->credit_account) &&
|
||||
(0 == TALER_amount_cmp (want_amount,
|
||||
&t->amount)) &&
|
||||
(GNUNET_NO == t->checked) &&
|
||||
(0 == strcasecmp (exchange_base_url,
|
||||
t->exchange_base_url)) )
|
||||
{
|
||||
*subject = GNUNET_strdup (t->subject);
|
||||
t->checked = GNUNET_YES;
|
||||
return GNUNET_OK;
|
||||
}
|
||||
}
|
||||
fprintf (stderr,
|
||||
"Did not find matching transaction!\nI have:\n");
|
||||
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||
@ -198,6 +211,87 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
||||
(unsigned long long) want_credit,
|
||||
TALER_amount2s (want_amount),
|
||||
exchange_base_url);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check that the @a want_amount was transferred from the @a
|
||||
* want_debit to the @a want_credit account. If so, set the @a subject
|
||||
* to the transfer identifier and remove the transaction from the
|
||||
* list. If the transaction was not recorded, return #GNUNET_SYSERR.
|
||||
*
|
||||
* @param h bank instance
|
||||
* @param want_amount transfer amount desired
|
||||
* @param want_debit account that should have been debited
|
||||
* @param want_debit account that should have been credited
|
||||
* @param exchange_base_url expected base URL of the exchange,
|
||||
* i.e. "https://example.com/"; may include a port
|
||||
* @param[out] subject set to the wire transfer identifier
|
||||
* @return #GNUNET_OK on success
|
||||
*/
|
||||
int
|
||||
TALER_FAKEBANK_check_debit (struct TALER_FAKEBANK_Handle *h,
|
||||
const struct TALER_Amount *want_amount,
|
||||
const char *want_debit,
|
||||
const char *want_credit,
|
||||
const char *exchange_base_url,
|
||||
struct TALER_WireTransferIdentifierRawP **subject)
|
||||
{
|
||||
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||
{
|
||||
if ( (want_debit == t->debit_account) &&
|
||||
(want_credit == t->credit_account) &&
|
||||
(0 == TALER_amount_cmp (want_amount,
|
||||
&t->amount)) &&
|
||||
(GNUNET_NO == t->checked) &&
|
||||
(0 == strcasecmp (exchange_base_url,
|
||||
t->exchange_base_url)) )
|
||||
{
|
||||
*subject = GNUNET_strdup (t->subject);
|
||||
t->checked = GNUNET_YES;
|
||||
return GNUNET_OK;
|
||||
}
|
||||
}
|
||||
check_log (h);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check that the @a want_amount was transferred from the @a want_debit to the
|
||||
* @a want_credit account with the @a subject. If so, remove the transaction
|
||||
* from the list. If the transaction was not recorded, return #GNUNET_SYSERR.
|
||||
*
|
||||
* @param h bank instance
|
||||
* @param want_amount transfer amount desired
|
||||
* @param want_debit account that should have been debited
|
||||
* @param want_debit account that should have been credited
|
||||
* @param reserve_pub reserve public key expected in wire subject
|
||||
* @return #GNUNET_OK on success
|
||||
*/
|
||||
int
|
||||
TALER_FAKEBANK_check_credit (struct TALER_FAKEBANK_Handle *h,
|
||||
const struct TALER_Amount *want_amount,
|
||||
const char *want_debit,
|
||||
const char *want_credit,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub)
|
||||
{
|
||||
for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
|
||||
{
|
||||
if ( (want_debit == t->debit_account) &&
|
||||
(want_credit == t->credit_account) &&
|
||||
(0 == TALER_amount_cmp (want_amount,
|
||||
&t->amount)) &&
|
||||
(GNUNET_NO == t->checked) &&
|
||||
(0 == strcasecmp (exchange_base_url,
|
||||
t->exchange_base_url)) )
|
||||
{
|
||||
*subject = GNUNET_strdup (t->subject);
|
||||
t->checked = GNUNET_YES;
|
||||
return GNUNET_OK;
|
||||
}
|
||||
}
|
||||
check_log (h);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
@ -218,7 +312,8 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||
const char *debit_account,
|
||||
const char *credit_account,
|
||||
const struct TALER_Amount *amount,
|
||||
const char *subject,
|
||||
const struct
|
||||
TALER_WireTransferIdentifierRawP *subject,
|
||||
const char *exchange_base_url)
|
||||
{
|
||||
struct Transaction *t;
|
||||
@ -234,6 +329,50 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||
t->debit_account = GNUNET_strdup (debit_account);
|
||||
t->credit_account = GNUNET_strdup (credit_account);
|
||||
t->amount = *amount;
|
||||
t->row_id = ++h->serial_counter;
|
||||
t->date = GNUNET_TIME_absolute_get ();
|
||||
t->type = T_DEBIT;
|
||||
t->subject.debit.exchange_base_url = GNUNET_strdup (exchange_base_url);
|
||||
t->subject.debit.wtid = *subject;
|
||||
GNUNET_TIME_round_abs (&t->date);
|
||||
GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
|
||||
h->transactions_tail,
|
||||
t);
|
||||
return t->row_id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Tell the fakebank to create another wire transfer *to* an exchange.
|
||||
*
|
||||
* @param h fake bank handle
|
||||
* @param debit_account account to debit
|
||||
* @param credit_account account to credit
|
||||
* @param amount amount to transfer
|
||||
* @param reserve_pub reserve public key to use in subject
|
||||
* @return serial_id of the transfer
|
||||
*/
|
||||
uint64_t
|
||||
TALER_FAKEBANK_make_admin_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||
const char *debit_account,
|
||||
const char *credit_account,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct
|
||||
TALER_ReservePublicKeyP *reserve_pub)
|
||||
{
|
||||
struct Transaction *t;
|
||||
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||
"Making transfer from %s to %s over %s and subject %s; for exchange: %s\n",
|
||||
debit_account,
|
||||
credit_account,
|
||||
TALER_amount2s (amount),
|
||||
TALER_B2S (reserve_pub),
|
||||
exchange_base_url);
|
||||
t = GNUNET_new (struct Transaction);
|
||||
t->debit_account = GNUNET_strdup (debit_account);
|
||||
t->credit_account = GNUNET_strdup (credit_account);
|
||||
t->amount = *amount;
|
||||
t->exchange_base_url = GNUNET_strdup (exchange_base_url);
|
||||
t->row_id = ++h->serial_counter;
|
||||
t->date = GNUNET_TIME_absolute_get ();
|
||||
@ -273,18 +412,12 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h)
|
||||
while (NULL != t)
|
||||
{
|
||||
if (GNUNET_YES != t->checked)
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = TALER_amount_to_string (&t->amount);
|
||||
fprintf (stderr,
|
||||
"%s -> %s (%s) from %s\n",
|
||||
t->debit_account,
|
||||
t->credit_account,
|
||||
s,
|
||||
TALER_amount2s (&t->amount),
|
||||
t->exchange_base_url);
|
||||
GNUNET_free (s);
|
||||
}
|
||||
t = t->next;
|
||||
}
|
||||
return GNUNET_SYSERR;
|
||||
@ -309,7 +442,8 @@ TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h)
|
||||
GNUNET_free (t->subject);
|
||||
GNUNET_free (t->debit_account);
|
||||
GNUNET_free (t->credit_account);
|
||||
GNUNET_free (t->exchange_base_url);
|
||||
if (T_DEBIT == t->type)
|
||||
GNUNET_free (t->subject.debit.exchange_base_url);
|
||||
GNUNET_free (t);
|
||||
}
|
||||
if (NULL != h->mhd_task)
|
||||
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
(C) 2016-2020 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 3,
|
||||
or (at your option) any later version.
|
||||
|
||||
TALER is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with TALER; see the file COPYING. If not,
|
||||
see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file bank-lib/fakebank.h
|
||||
* @brief definitions for the "/history" layer.
|
||||
* @author Marcello Stanisci <stanisci.m@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef FAKEBANK_H
|
||||
#define FAKEBANK_H
|
||||
#include "platform.h"
|
||||
#include <gnunet/gnunet_util_lib.h>
|
||||
#include "taler_bank_service.h"
|
||||
|
||||
#endif
|
@ -62,7 +62,7 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
|
||||
|
||||
|
||||
/**
|
||||
* Tell the fakebank to create another wire transfer.
|
||||
* Tell the fakebank to create another wire transfer *from* an exchange.
|
||||
*
|
||||
* @param h fake bank handle
|
||||
* @param debit_account account to debit
|
||||
@ -77,18 +77,36 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||
const char *debit_account,
|
||||
const char *credit_account,
|
||||
const struct TALER_Amount *amount,
|
||||
const char *subject,
|
||||
const struct
|
||||
TALER_WireTransferIdentifierRawP *subject,
|
||||
const char *exchange_base_url);
|
||||
|
||||
|
||||
/**
|
||||
* Tell the fakebank to create another wire transfer *to* an exchange.
|
||||
*
|
||||
* @param h fake bank handle
|
||||
* @param debit_account account to debit
|
||||
* @param credit_account account to credit
|
||||
* @param amount amount to transfer
|
||||
* @param reserve_pub reserve public key to use in subject
|
||||
* @return serial_id of the transfer
|
||||
*/
|
||||
uint64_t
|
||||
TALER_FAKEBANK_make_admin_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||
const char *debit_account,
|
||||
const char *credit_account,
|
||||
const struct TALER_Amount *amount,
|
||||
const struct
|
||||
TALER_ReservePublicKeyP *reserve_pub);
|
||||
|
||||
|
||||
/**
|
||||
* Check that the @a want_amount was transferred from the @a
|
||||
* want_debit to the @a want_credit account. If so, set the @a subject
|
||||
* to the transfer identifier and remove the transaction from the
|
||||
* list. If the transaction was not recorded, return #GNUNET_SYSERR.
|
||||
*
|
||||
* Rejected transfers do NOT show with "check".
|
||||
*
|
||||
* @param h bank instance
|
||||
* @param want_amount transfer amount desired
|
||||
* @param want_debit account that should have been debited
|
||||
@ -99,12 +117,32 @@ TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
|
||||
* @return #GNUNET_OK on success
|
||||
*/
|
||||
int
|
||||
TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
|
||||
const struct TALER_Amount *want_amount,
|
||||
const char *want_debit,
|
||||
const char *want_credit,
|
||||
const char *exchange_base_url,
|
||||
char **subject);
|
||||
TALER_FAKEBANK_check_debit (struct TALER_FAKEBANK_Handle *h,
|
||||
const struct TALER_Amount *want_amount,
|
||||
const char *want_debit,
|
||||
const char *want_credit,
|
||||
const char *exchange_base_url,
|
||||
struct TALER_WireTransferIdentifierRawP **subject);
|
||||
|
||||
|
||||
/**
|
||||
* Check that the @a want_amount was transferred from the @a want_debit to the
|
||||
* @a want_credit account with the @a subject. If so, remove the transaction
|
||||
* from the list. If the transaction was not recorded, return #GNUNET_SYSERR.
|
||||
*
|
||||
* @param h bank instance
|
||||
* @param want_amount transfer amount desired
|
||||
* @param want_debit account that should have been debited
|
||||
* @param want_debit account that should have been credited
|
||||
* @param reserve_pub reserve public key expected in wire subject
|
||||
* @return #GNUNET_OK on success
|
||||
*/
|
||||
int
|
||||
TALER_FAKEBANK_check_credit (struct TALER_FAKEBANK_Handle *h,
|
||||
const struct TALER_Amount *want_amount,
|
||||
const char *want_debit,
|
||||
const char *want_credit,
|
||||
const struct TALER_ReservePublicKeyP *reserve_pub);
|
||||
|
||||
|
||||
/**
|
||||
|
@ -1,318 +0,0 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2016-2020 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 3, or (at your option) any later version.
|
||||
|
||||
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
/**
|
||||
* @file include/taler_wire_plugin.h
|
||||
* @brief Plugin API for the handling of wire transactions
|
||||
* @author Christian Grothoff
|
||||
*/
|
||||
#ifndef TALER_WIRE_PLUGIN_H
|
||||
#define TALER_WIRE_PLUGIN_H
|
||||
|
||||
#include <gnunet/gnunet_util_lib.h>
|
||||
#include "taler_util.h"
|
||||
#include "taler_error_codes.h"
|
||||
#include "taler_bank_service.h" /* for `enum TALER_BANK_Direction` and `struct TALER_BANK_TransferDetails` */
|
||||
|
||||
|
||||
/**
|
||||
* Callback with prepared transaction.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param buf transaction data to persist, NULL on error
|
||||
* @param buf_size number of bytes in @a buf, 0 on error
|
||||
*/
|
||||
typedef void
|
||||
(*TALER_WIRE_PrepareTransactionCallback) (void *cls,
|
||||
const char *buf,
|
||||
size_t buf_size);
|
||||
|
||||
|
||||
/**
|
||||
* Details about a valid wire transfer to the exchange.
|
||||
*/
|
||||
struct TALER_WIRE_CreditDetails
|
||||
{
|
||||
/**
|
||||
* Amount that was transferred
|
||||
*/
|
||||
struct TALER_Amount amount;
|
||||
|
||||
/**
|
||||
* Time of the the transfer
|
||||
*/
|
||||
struct GNUNET_TIME_Absolute execution_date;
|
||||
|
||||
/**
|
||||
* Binary data that was encoded in the wire transfer subject.
|
||||
*/
|
||||
struct TALER_ReservePublicKeyP reserve_pub;
|
||||
|
||||
/**
|
||||
* payto://-URL of the source's account (used
|
||||
* when the reserve is closed or for debugging).
|
||||
*/
|
||||
const char *source_account_url;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Details about a valid wire transfer made by the
|
||||
* exchange's aggregator to a merchant.
|
||||
*/
|
||||
struct TALER_WIRE_DebitDetails
|
||||
{
|
||||
/**
|
||||
* Amount that was transferred
|
||||
*/
|
||||
struct TALER_Amount amount;
|
||||
|
||||
/**
|
||||
* Time of the the transfer
|
||||
*/
|
||||
struct GNUNET_TIME_Absolute execution_date;
|
||||
|
||||
/**
|
||||
* Binary data that was encoded in the wire transfer subject.
|
||||
*/
|
||||
struct TALER_WireTransferIdentifierRawP wtid;
|
||||
|
||||
/**
|
||||
* payto://-URL of the target account which received
|
||||
* the funds.
|
||||
*/
|
||||
const char *target_account_url;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Callbacks of this type are used to serve the result of asking
|
||||
* the bank for the transaction history. NOTE: this function will
|
||||
* NOT get the list of history elements, but rather get (iteratively)
|
||||
* called for each (parsed) history element.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param ec taler error code
|
||||
* @param row_off identification of the position at which we are querying
|
||||
* @param row_off_size number of bytes in @a row_off
|
||||
* @param details details about the wire transfer
|
||||
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
|
||||
*/
|
||||
typedef int
|
||||
(*TALER_WIRE_CreditResultCallback) (void *cls,
|
||||
enum TALER_ErrorCode ec,
|
||||
const void *row_off,
|
||||
size_t row_off_size,
|
||||
const struct
|
||||
TALER_WIRE_CreditDetails *details);
|
||||
|
||||
|
||||
/**
|
||||
* Callbacks of this type are used to serve the result of asking
|
||||
* the bank for the transaction history. NOTE: this function will
|
||||
* NOT get the list of history elements, but rather get (iteratively)
|
||||
* called for each (parsed) history element.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param ec taler error code
|
||||
* @param row_off identification of the position at which we are querying
|
||||
* @param row_off_size number of bytes in @a row_off
|
||||
* @param details details about the wire transfer
|
||||
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
|
||||
*/
|
||||
typedef int
|
||||
(*TALER_WIRE_DebitResultCallback) (void *cls,
|
||||
enum TALER_ErrorCode ec,
|
||||
const void *row_off,
|
||||
size_t row_off_size,
|
||||
const struct
|
||||
TALER_WIRE_DebitDetails *details);
|
||||
|
||||
|
||||
/**
|
||||
* Handle returned for cancelling a preparation step.
|
||||
*/
|
||||
struct TALER_WIRE_PrepareHandle;
|
||||
|
||||
/**
|
||||
* Handle returned for cancelling an execution step.
|
||||
*/
|
||||
struct TALER_WIRE_ExecuteHandle;
|
||||
|
||||
/**
|
||||
* Handle returned for querying the credit transaction history.
|
||||
*/
|
||||
struct TALER_WIRE_CreditHistoryHandle;
|
||||
|
||||
/**
|
||||
* Handle returned for querying the debit transaction history.
|
||||
*/
|
||||
struct TALER_WIRE_DebitHistoryHandle;
|
||||
|
||||
|
||||
/**
|
||||
* Function called with the result from the execute step.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param success #GNUNET_OK on success, #GNUNET_SYSERR on failure
|
||||
* @param row_id unique ID of the wire transfer in the bank's records; NULL on error
|
||||
* @param row_id_size number of bytes in @e row_id
|
||||
* @param emsg NULL on success, otherwise an error message
|
||||
*/
|
||||
typedef void
|
||||
(*TALER_WIRE_ConfirmationCallback)(void *cls,
|
||||
int success,
|
||||
const void *row_id,
|
||||
size_t row_id_size,
|
||||
const char *emsg);
|
||||
|
||||
|
||||
/**
|
||||
* @brief The plugin API, returned from the plugin's "init" function.
|
||||
* The argument given to "init" is simply a configuration handle.
|
||||
*/
|
||||
struct TALER_WIRE_Plugin
|
||||
{
|
||||
|
||||
/**
|
||||
* Closure for all callbacks.
|
||||
*/
|
||||
void *cls;
|
||||
|
||||
/**
|
||||
* Name of the library which generated this plugin. Set by the
|
||||
* plugin loader.
|
||||
*/
|
||||
char *library_name;
|
||||
|
||||
/**
|
||||
* Which wire method (payto://METHOD/") is supported by this plugin?
|
||||
* For example, "x-taler-bank" or "iban".
|
||||
*/
|
||||
const char *method;
|
||||
|
||||
/**
|
||||
* Round amount DOWN to the amount that can be transferred via the wire
|
||||
* method. For example, Taler may support 0.000001 EUR as a unit of
|
||||
* payment, but IBAN only supports 0.01 EUR. This function would
|
||||
* round 0.125 EUR to 0.12 EUR in this case.
|
||||
*
|
||||
* @param cls the @e cls of this struct with the plugin-specific state
|
||||
* @param[in,out] amount amount to round down
|
||||
* @return #GNUNET_OK on success, #GNUNET_NO if rounding was unnecessary,
|
||||
* #GNUNET_SYSERR if the amount or currency was invalid
|
||||
*/
|
||||
int
|
||||
(*amount_round) (void *cls,
|
||||
struct TALER_Amount *amount);
|
||||
|
||||
|
||||
/**
|
||||
* Check if the given payto:// URL is correctly formatted for this plugin
|
||||
*
|
||||
* @param cls the @e cls of this struct with the plugin-specific state
|
||||
* @param account_url the payto:// URL
|
||||
* @return #TALER_EC_NONE if correctly formatted
|
||||
*/
|
||||
enum TALER_ErrorCode
|
||||
(*wire_validate)(void *cls,
|
||||
const char *account_url);
|
||||
|
||||
|
||||
/**
|
||||
* Query credits made to exchange account. We use the variable-size
|
||||
* @a start_off to indicate which transfers we are interested in as
|
||||
* different banking systems may have different ways to identify
|
||||
* transfers. The @a start_off value must thus match the value of
|
||||
* a `row_off` argument previously given to the @a hres_cb. Use
|
||||
* NULL to query transfers from the beginning of time (with
|
||||
* positive @a num_results) or from the latest committed transfers
|
||||
* (with negative @a num_results).
|
||||
*
|
||||
* @param cls the @e cls of this struct with the plugin-specific state
|
||||
* @param account_section specifies the configuration section which
|
||||
* identifies the account for which we should get the history
|
||||
* @param start_off from which row on do we want to get results, use NULL for the latest; exclusive
|
||||
* @param start_off_len number of bytes in @a start_off
|
||||
* @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
|
||||
*/
|
||||
struct TALER_WIRE_CreditHistoryHandle *
|
||||
(*get_credits) (void *cls,
|
||||
const char *account_section,
|
||||
const void *start_off,
|
||||
size_t start_off_len,
|
||||
int64_t num_results,
|
||||
TALER_WIRE_CreditResultCallback hres_cb,
|
||||
void *hres_cb_cls);
|
||||
|
||||
/**
|
||||
* Cancel going over the account's history.
|
||||
*
|
||||
* @param cls plugins' closure
|
||||
* @param chh operation to cancel
|
||||
*/
|
||||
void
|
||||
(*get_credits_cancel) (void *cls,
|
||||
struct TALER_WIRE_CreditHistoryHandle *chh);
|
||||
|
||||
|
||||
/**
|
||||
* Query debits (transfers to merchants) made by an exchange. We use the
|
||||
* variable-size @a start_off to indicate which transfers we are interested
|
||||
* in as different banking systems may have different ways to identify
|
||||
* transfers. The @a start_off value must thus match the value of a
|
||||
* `row_off` argument previously given to the @a hres_cb. Use NULL to query
|
||||
* transfers from the beginning of time (with positive @a num_results) or
|
||||
* from the latest committed transfers (with negative @a num_results).
|
||||
*
|
||||
* @param cls the @e cls of this struct with the plugin-specific state
|
||||
* @param account_section specifies the configuration section which
|
||||
* identifies the account for which we should get the history
|
||||
* @param start_off from which row on do we want to get results, use NULL for the latest; exclusive
|
||||
* @param start_off_len number of bytes in @a start_off
|
||||
* @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
|
||||
*/
|
||||
struct TALER_WIRE_DebitHistoryHandle *
|
||||
(*get_debits) (void *cls,
|
||||
const char *account_section,
|
||||
const void *start_off,
|
||||
size_t start_off_len,
|
||||
int64_t num_results,
|
||||
TALER_WIRE_DebitResultCallback hres_cb,
|
||||
void *hres_cb_cls);
|
||||
|
||||
/**
|
||||
* Cancel going over the account's history.
|
||||
*
|
||||
* @param cls plugins' closure
|
||||
* @param dhh operation to cancel
|
||||
*/
|
||||
void
|
||||
(*get_debits_cancel) (void *cls,
|
||||
struct TALER_WIRE_DebitHistoryHandle *dhh);
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif /* TALER_WIRE_PLUGIN_H */
|
Loading…
Reference in New Issue
Block a user