2016-01-25 10:20:40 +01:00
|
|
|
/*
|
|
|
|
This file is part of TALER
|
2020-01-11 15:19:56 +01:00
|
|
|
Copyright (C) 2015-2020 Taler Systems SA
|
2016-01-25 10:20:40 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
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 Affero General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Affero General Public License along with
|
2016-07-07 17:55:25 +02:00
|
|
|
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
2016-01-25 10:20:40 +01:00
|
|
|
*/
|
|
|
|
/**
|
|
|
|
* @file include/taler_bank_service.h
|
2020-03-03 15:40:51 +01:00
|
|
|
* @brief C interface of libtalerbank, a C library to use the Taler Wire gateway HTTP API
|
|
|
|
* See https://docs.taler.net/core/api-wire.html
|
2016-01-25 10:20:40 +01:00
|
|
|
* @author Christian Grothoff
|
|
|
|
*/
|
|
|
|
#ifndef _TALER_BANK_SERVICE_H
|
|
|
|
#define _TALER_BANK_SERVICE_H
|
|
|
|
|
2016-03-23 11:34:24 +01:00
|
|
|
#include <jansson.h>
|
2016-04-17 18:03:01 +02:00
|
|
|
#include <gnunet/gnunet_curl_lib.h>
|
2016-01-25 10:20:40 +01:00
|
|
|
#include "taler_util.h"
|
2017-12-06 19:24:00 +01:00
|
|
|
#include "taler_error_codes.h"
|
2016-01-25 10:20:40 +01:00
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Authentication method types.
|
|
|
|
*/
|
2019-08-25 16:18:24 +02:00
|
|
|
enum TALER_BANK_AuthenticationMethod
|
|
|
|
{
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* No authentication.
|
|
|
|
*/
|
|
|
|
TALER_BANK_AUTH_NONE,
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Basic authentication with cleartext username and password.
|
|
|
|
*/
|
2020-01-17 01:23:32 +01:00
|
|
|
TALER_BANK_AUTH_BASIC,
|
2017-05-04 15:18:43 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Information used to authenticate to the bank.
|
|
|
|
*/
|
|
|
|
struct TALER_BANK_AuthenticationData
|
|
|
|
{
|
|
|
|
|
2020-01-17 01:23:32 +01:00
|
|
|
/**
|
|
|
|
* Base URL we use to talk to the wire gateway,
|
|
|
|
* which talks to the bank for us.
|
|
|
|
*/
|
|
|
|
char *wire_gateway_url;
|
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
/**
|
|
|
|
* Which authentication method should we use?
|
|
|
|
*/
|
|
|
|
enum TALER_BANK_AuthenticationMethod method;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Further details as per @e method.
|
|
|
|
*/
|
|
|
|
union
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Details for #TALER_BANK_AUTH_BASIC.
|
|
|
|
*/
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Username to use.
|
|
|
|
*/
|
|
|
|
char *username;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Password to use.
|
|
|
|
*/
|
|
|
|
char *password;
|
|
|
|
} basic;
|
|
|
|
|
|
|
|
} details;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2020-03-03 16:35:20 +01:00
|
|
|
/* ********************* /admin/add-incoming *********************** */
|
2016-01-25 10:20:40 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* @brief A /admin/add-incoming Handle
|
2016-01-25 10:20:40 +01:00
|
|
|
*/
|
|
|
|
struct TALER_BANK_AdminAddIncomingHandle;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* Callbacks of this type are used to return the result of submitting
|
|
|
|
* a request to transfer funds to the exchange.
|
2016-01-25 10:20:40 +01:00
|
|
|
*
|
|
|
|
* @param cls closure
|
|
|
|
* @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request
|
|
|
|
* 0 if the bank's reply is bogus (fails to follow the protocol)
|
2017-12-06 19:24:00 +01:00
|
|
|
* @param ec detailed error code
|
2017-05-07 21:11:56 +02:00
|
|
|
* @param serial_id unique ID of the wire transfer in the bank's records; UINT64_MAX on error
|
2019-04-08 23:53:52 +02:00
|
|
|
* @param timestamp time when the transaction was made.
|
2016-03-23 11:34:24 +01:00
|
|
|
* @param json detailed response from the HTTPD, or NULL if reply was not in JSON
|
2016-01-25 10:20:40 +01:00
|
|
|
*/
|
|
|
|
typedef void
|
2020-03-03 16:35:20 +01:00
|
|
|
(*TALER_BANK_AdminAddIncomingCallback) (void *cls,
|
|
|
|
unsigned int http_status,
|
|
|
|
enum TALER_ErrorCode ec,
|
|
|
|
uint64_t serial_id,
|
|
|
|
struct GNUNET_TIME_Absolute timestamp,
|
|
|
|
const json_t *json);
|
2016-01-25 10:20:40 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* Perform a wire transfer from some account to the exchange to fill a
|
|
|
|
* reserve. Note that this API is usually only used for testing (with
|
|
|
|
* fakebank and our Python bank) and thus may not be accessible in a
|
|
|
|
* production setting.
|
2016-01-25 10:20:40 +01:00
|
|
|
*
|
2016-04-17 18:03:01 +02:00
|
|
|
* @param ctx curl context for the event loop
|
2020-01-13 22:01:45 +01:00
|
|
|
* @param auth authentication data to send to the bank
|
2020-01-11 15:19:56 +01:00
|
|
|
* @param reserve_pub wire transfer subject for the transfer
|
2020-03-03 16:35:20 +01:00
|
|
|
* @param amount amount that is to be deposited
|
2020-01-13 22:01:45 +01:00
|
|
|
* @param debit_account account to deposit from (payto URI, but used as 'payfrom')
|
2016-01-25 10:20:40 +01:00
|
|
|
* @param res_cb the callback to call when the final result for this request is available
|
|
|
|
* @param res_cb_cls closure for the above callback
|
|
|
|
* @return NULL
|
2020-03-03 16:35:20 +01:00
|
|
|
* if the inputs are invalid (i.e. invalid amount) or internal errors.
|
2016-01-25 10:20:40 +01:00
|
|
|
* In this case, the callback is not called.
|
|
|
|
*/
|
|
|
|
struct TALER_BANK_AdminAddIncomingHandle *
|
2020-03-07 00:28:07 +01:00
|
|
|
TALER_BANK_admin_add_incoming (
|
|
|
|
struct GNUNET_CURL_Context *ctx,
|
|
|
|
const struct TALER_BANK_AuthenticationData *auth,
|
|
|
|
const struct TALER_ReservePublicKeyP *reserve_pub,
|
|
|
|
const struct TALER_Amount *amount,
|
|
|
|
const char *debit_account,
|
|
|
|
TALER_BANK_AdminAddIncomingCallback res_cb,
|
|
|
|
void *res_cb_cls);
|
2016-01-25 10:20:40 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* Cancel an add incoming operation. This function cannot be used on a
|
|
|
|
* request handle if a response is already served for it.
|
2016-01-25 10:20:40 +01:00
|
|
|
*
|
|
|
|
* @param aai the admin add incoming request handle
|
|
|
|
*/
|
|
|
|
void
|
2020-03-07 00:28:07 +01:00
|
|
|
TALER_BANK_admin_add_incoming_cancel (
|
|
|
|
struct TALER_BANK_AdminAddIncomingHandle *aai);
|
2016-01-25 10:20:40 +01:00
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
|
2020-02-04 21:59:43 +01:00
|
|
|
/* ********************* /transfer *********************** */
|
2020-01-11 15:19:56 +01:00
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* Prepare for execution of a wire transfer from the exchange to some
|
|
|
|
* merchant.
|
2020-01-11 15:19:56 +01:00
|
|
|
*
|
2020-01-18 20:03:54 +01:00
|
|
|
* @param destination_account_payto_uri payto:// URL identifying where to send the money
|
2020-01-11 15:19:56 +01:00
|
|
|
* @param amount amount to transfer, already rounded
|
|
|
|
* @param exchange_base_url base URL of this exchange (included in subject
|
|
|
|
* to facilitate use of tracking API by merchant backend)
|
|
|
|
* @param wtid wire transfer identifier to use
|
2020-01-18 13:23:10 +01:00
|
|
|
* @param[out] buf set to transaction data to persist, NULL on error
|
|
|
|
* @param[out] buf_size set to number of bytes in @a buf, 0 on error
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
void
|
2020-03-07 00:28:07 +01:00
|
|
|
TALER_BANK_prepare_transfer (
|
|
|
|
const char *destination_account_payto_uri,
|
|
|
|
const struct TALER_Amount *amount,
|
|
|
|
const char *exchange_base_url,
|
|
|
|
const struct TALER_WireTransferIdentifierRawP *wtid,
|
|
|
|
void **buf,
|
|
|
|
size_t *buf_size);
|
2017-05-04 15:18:43 +02:00
|
|
|
|
2017-05-04 18:35:53 +02:00
|
|
|
|
2020-01-11 15:19:56 +01:00
|
|
|
/**
|
|
|
|
* Handle for active wire transfer.
|
|
|
|
*/
|
2020-03-03 17:14:00 +01:00
|
|
|
struct TALER_BANK_TransferHandle;
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
|
2020-01-11 15:19:56 +01:00
|
|
|
/**
|
|
|
|
* Function called with the result from the execute step.
|
|
|
|
*
|
|
|
|
* @param cls closure
|
|
|
|
* @param response_code HTTP status code
|
|
|
|
* @param ec taler error code
|
|
|
|
* @param row_id unique ID of the wire transfer in the bank's records
|
|
|
|
* @param timestamp when did the transaction go into effect
|
|
|
|
*/
|
|
|
|
typedef void
|
2020-03-03 17:14:00 +01:00
|
|
|
(*TALER_BANK_TransferCallback)(void *cls,
|
|
|
|
unsigned int response_code,
|
|
|
|
enum TALER_ErrorCode ec,
|
|
|
|
uint64_t row_id,
|
|
|
|
struct GNUNET_TIME_Absolute timestamp);
|
2017-12-06 19:24:00 +01:00
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
|
2020-01-11 15:19:56 +01:00
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* Execute a wire transfer from the exchange to some merchant.
|
2020-01-11 15:19:56 +01:00
|
|
|
*
|
|
|
|
* @param ctx context for HTTP interaction
|
2020-01-18 13:07:29 +01:00
|
|
|
* @param auth authentication data to authenticate with the bank
|
2020-01-11 15:19:56 +01:00
|
|
|
* @param buf buffer with the prepared execution details
|
|
|
|
* @param buf_size number of bytes in @a buf
|
|
|
|
* @param cc function to call upon success
|
|
|
|
* @param cc_cls closure for @a cc
|
|
|
|
* @return NULL on error
|
|
|
|
*/
|
2020-03-03 17:14:00 +01:00
|
|
|
struct TALER_BANK_TransferHandle *
|
|
|
|
TALER_BANK_transfer (struct GNUNET_CURL_Context *ctx,
|
|
|
|
const struct TALER_BANK_AuthenticationData *auth,
|
|
|
|
const void *buf,
|
|
|
|
size_t buf_size,
|
|
|
|
TALER_BANK_TransferCallback cc,
|
|
|
|
void *cc_cls);
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-03-03 17:14:00 +01:00
|
|
|
* Abort execution of a wire transfer. For example, because we are shutting
|
|
|
|
* down. Note that if an execution is aborted, it may or may not still
|
|
|
|
* succeed.
|
2020-01-11 15:19:56 +01:00
|
|
|
*
|
2020-03-03 17:14:00 +01:00
|
|
|
* The caller MUST run #TALER_BANK_transfer() again for the same request as
|
2020-03-31 20:57:11 +02:00
|
|
|
* soon as possible, to ensure that the request either ultimately succeeds or
|
2020-03-03 17:14:00 +01:00
|
|
|
* ultimately fails. Until this has been done, the transaction is in limbo
|
|
|
|
* (i.e. may or may not have been committed).
|
|
|
|
*
|
|
|
|
* This function cannot be used on a request handle if a response is already
|
|
|
|
* served for it.
|
|
|
|
*
|
|
|
|
* @param th handle of the wire transfer request to cancel
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
void
|
2020-03-03 17:14:00 +01:00
|
|
|
TALER_BANK_transfer_cancel (struct TALER_BANK_TransferHandle *th);
|
2020-01-11 15:19:56 +01:00
|
|
|
|
|
|
|
|
2020-02-04 21:59:43 +01:00
|
|
|
/* ********************* /history/incoming *********************** */
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* Handle for querying the bank for transactions
|
|
|
|
* made to the exchange.
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
struct TALER_BANK_CreditHistoryHandle;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Details about a wire transfer to the exchange.
|
|
|
|
*/
|
|
|
|
struct TALER_BANK_CreditDetails
|
2017-05-04 15:18:43 +02:00
|
|
|
{
|
|
|
|
/**
|
2017-05-07 21:11:56 +02:00
|
|
|
* Amount that was transferred
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
|
|
|
struct TALER_Amount amount;
|
|
|
|
|
|
|
|
/**
|
2017-05-07 21:11:56 +02:00
|
|
|
* Time of the the transfer
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_Absolute execution_date;
|
|
|
|
|
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* Reserve public key encoded in the wire
|
|
|
|
* transfer subject.
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
struct TALER_ReservePublicKeyP reserve_pub;
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* payto://-URL of the source account that
|
|
|
|
* send the funds.
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
2020-01-13 22:01:45 +01:00
|
|
|
const char *debit_account_url;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* payto://-URL of the target account that
|
|
|
|
* received the funds.
|
|
|
|
*/
|
|
|
|
const char *credit_account_url;
|
2017-05-04 15:18:43 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Callbacks of this type are used to serve the result of asking
|
2020-01-11 15:19:56 +01:00
|
|
|
* the bank for the credit transaction history.
|
2017-05-04 15:18:43 +02:00
|
|
|
*
|
|
|
|
* @param cls closure
|
|
|
|
* @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request
|
|
|
|
* 0 if the bank's reply is bogus (fails to follow the protocol),
|
|
|
|
* #MHD_HTTP_NO_CONTENT if there are no more results; on success the
|
|
|
|
* last callback is always of this status (even if `abs(num_results)` were
|
|
|
|
* already returned).
|
2017-12-06 19:24:00 +01:00
|
|
|
* @param ec detailed error code
|
2017-05-04 18:35:53 +02:00
|
|
|
* @param serial_id monotonically increasing counter corresponding to the transaction
|
2017-05-04 15:18:43 +02:00
|
|
|
* @param details details about the wire transfer
|
|
|
|
* @param json detailed response from the HTTPD, or NULL if reply was not in JSON
|
2020-01-11 15:19:56 +01:00
|
|
|
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
|
2017-05-04 15:18:43 +02:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
typedef int
|
2020-03-07 00:28:07 +01:00
|
|
|
(*TALER_BANK_CreditHistoryCallback) (
|
|
|
|
void *cls,
|
|
|
|
unsigned int http_status,
|
|
|
|
enum TALER_ErrorCode ec,
|
|
|
|
uint64_t serial_id,
|
|
|
|
const struct TALER_BANK_CreditDetails *details,
|
|
|
|
const json_t *json);
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* Request the wire credit history of an exchange's bank account.
|
2017-05-04 15:18:43 +02:00
|
|
|
*
|
|
|
|
* @param ctx curl context for the event loop
|
|
|
|
* @param auth authentication data to use
|
2017-05-04 18:35:53 +02:00
|
|
|
* @param start_row from which row on do we want to get results, use UINT64_MAX for the latest; exclusive
|
2017-05-04 15:18:43 +02:00
|
|
|
* @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.
|
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
struct TALER_BANK_CreditHistoryHandle *
|
|
|
|
TALER_BANK_credit_history (struct GNUNET_CURL_Context *ctx,
|
|
|
|
const struct TALER_BANK_AuthenticationData *auth,
|
|
|
|
uint64_t start_row,
|
|
|
|
int64_t num_results,
|
2020-03-03 16:35:20 +01:00
|
|
|
TALER_BANK_CreditHistoryCallback hres_cb,
|
2020-01-11 15:19:56 +01:00
|
|
|
void *hres_cb_cls);
|
2017-05-04 15:18:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Cancel an history request. This function cannot be used on a request
|
|
|
|
* handle if the last response (anything with a status code other than
|
|
|
|
* 200) is already served for it.
|
|
|
|
*
|
|
|
|
* @param hh the history request handle
|
|
|
|
*/
|
|
|
|
void
|
2020-01-11 15:19:56 +01:00
|
|
|
TALER_BANK_credit_history_cancel (struct TALER_BANK_CreditHistoryHandle *hh);
|
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
|
2020-02-04 21:59:43 +01:00
|
|
|
/* ********************* /history/outgoing *********************** */
|
2017-05-04 15:18:43 +02:00
|
|
|
|
2017-12-06 19:24:00 +01:00
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* Handle for querying the bank for transactions
|
|
|
|
* made from the exchange to merchants.
|
2017-12-06 19:24:00 +01:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
struct TALER_BANK_DebitHistoryHandle;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Details about a wire transfer made by the exchange
|
|
|
|
* to a merchant.
|
|
|
|
*/
|
|
|
|
struct TALER_BANK_DebitDetails
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Amount that was transferred
|
|
|
|
*/
|
|
|
|
struct TALER_Amount amount;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Time of the the transfer
|
|
|
|
*/
|
|
|
|
struct GNUNET_TIME_Absolute execution_date;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Wire transfer identifier used by the exchange.
|
|
|
|
*/
|
|
|
|
struct TALER_WireTransferIdentifierRawP wtid;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Exchange's base URL as given in the wire transfer.
|
|
|
|
*/
|
|
|
|
const char *exchange_base_url;
|
|
|
|
|
|
|
|
/**
|
2020-05-16 11:14:44 +02:00
|
|
|
* payto://-URI of the source account that
|
2020-01-11 15:19:56 +01:00
|
|
|
* send the funds.
|
|
|
|
*/
|
2020-05-16 11:14:44 +02:00
|
|
|
const char *debit_account_url; // FIXME: rename: url->uri
|
2020-01-13 22:01:45 +01:00
|
|
|
|
|
|
|
/**
|
2020-05-16 11:14:44 +02:00
|
|
|
* payto://-URI of the target account that
|
2020-01-13 22:01:45 +01:00
|
|
|
* received the funds.
|
|
|
|
*/
|
2020-05-16 11:14:44 +02:00
|
|
|
const char *credit_account_url; // FIXME: rename: url->uri
|
2020-01-13 22:01:45 +01:00
|
|
|
|
2020-01-11 15:19:56 +01:00
|
|
|
};
|
2017-12-06 19:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Callbacks of this type are used to serve the result of asking
|
2020-01-11 15:19:56 +01:00
|
|
|
* the bank for the debit transaction history.
|
2017-12-06 19:24:00 +01:00
|
|
|
*
|
|
|
|
* @param cls closure
|
2020-01-11 15:19:56 +01:00
|
|
|
* @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request
|
2017-12-06 19:24:00 +01:00
|
|
|
* 0 if the bank's reply is bogus (fails to follow the protocol),
|
2020-01-11 15:19:56 +01:00
|
|
|
* #MHD_HTTP_NO_CONTENT if there are no more results; on success the
|
|
|
|
* last callback is always of this status (even if `abs(num_results)` were
|
|
|
|
* already returned).
|
2017-12-06 19:24:00 +01:00
|
|
|
* @param ec detailed error code
|
2020-01-11 15:19:56 +01:00
|
|
|
* @param serial_id monotonically increasing counter corresponding to the transaction
|
|
|
|
* @param details details about the wire transfer
|
|
|
|
* @param json detailed response from the HTTPD, or NULL if reply was not in JSON
|
|
|
|
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
|
2017-12-06 19:24:00 +01:00
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
typedef int
|
2020-03-07 00:28:07 +01:00
|
|
|
(*TALER_BANK_DebitHistoryCallback) (
|
|
|
|
void *cls,
|
|
|
|
unsigned int http_status,
|
|
|
|
enum TALER_ErrorCode ec,
|
|
|
|
uint64_t serial_id,
|
|
|
|
const struct TALER_BANK_DebitDetails *details,
|
|
|
|
const json_t *json);
|
2017-12-06 19:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* Request the wire credit history of an exchange's bank account.
|
2017-12-06 19:24:00 +01:00
|
|
|
*
|
|
|
|
* @param ctx curl context for the event loop
|
|
|
|
* @param auth authentication data to use
|
2020-01-11 15:19:56 +01:00
|
|
|
* @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
|
2017-12-06 19:24:00 +01:00
|
|
|
* @return NULL
|
2020-01-11 15:19:56 +01:00
|
|
|
* if the inputs are invalid (i.e. zero value for @e num_results).
|
2017-12-06 19:24:00 +01:00
|
|
|
* In this case, the callback is not called.
|
|
|
|
*/
|
2020-01-11 15:19:56 +01:00
|
|
|
struct TALER_BANK_DebitHistoryHandle *
|
|
|
|
TALER_BANK_debit_history (struct GNUNET_CURL_Context *ctx,
|
|
|
|
const struct TALER_BANK_AuthenticationData *auth,
|
|
|
|
uint64_t start_row,
|
|
|
|
int64_t num_results,
|
2020-03-03 16:35:20 +01:00
|
|
|
TALER_BANK_DebitHistoryCallback hres_cb,
|
2020-01-11 15:19:56 +01:00
|
|
|
void *hres_cb_cls);
|
2017-12-06 19:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-01-11 15:19:56 +01:00
|
|
|
* Cancel an history request. This function cannot be used on a request
|
|
|
|
* handle if the last response (anything with a status code other than
|
|
|
|
* 200) is already served for it.
|
2017-12-06 19:24:00 +01:00
|
|
|
*
|
2020-01-11 15:19:56 +01:00
|
|
|
* @param hh the history request handle
|
2017-12-06 19:24:00 +01:00
|
|
|
*/
|
|
|
|
void
|
2020-01-11 15:19:56 +01:00
|
|
|
TALER_BANK_debit_history_cancel (struct TALER_BANK_DebitHistoryHandle *hh);
|
|
|
|
|
|
|
|
|
2020-01-13 18:16:01 +01:00
|
|
|
/* ******************** Convenience functions **************** */
|
|
|
|
|
2017-05-04 15:18:43 +02:00
|
|
|
|
2018-04-02 14:24:45 +02:00
|
|
|
/**
|
|
|
|
* Convenience method for parsing configuration section with bank
|
2020-01-19 19:12:47 +01:00
|
|
|
* authentication data.
|
2018-04-02 14:24:45 +02:00
|
|
|
*
|
|
|
|
* @param cfg configuration to parse
|
|
|
|
* @param section the section with the configuration data
|
2020-01-18 13:23:10 +01:00
|
|
|
* @param[out] auth set to the configuration data found
|
2018-04-02 14:24:45 +02:00
|
|
|
* @return #GNUNET_OK on success
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
TALER_BANK_auth_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
|
|
|
|
const char *section,
|
|
|
|
struct TALER_BANK_AuthenticationData *auth);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2020-03-03 16:35:20 +01:00
|
|
|
* Free memory inside of @a auth (but not @a auth itself).
|
2018-04-02 14:24:45 +02:00
|
|
|
* Dual to #TALER_BANK_auth_parse_cfg().
|
|
|
|
*
|
|
|
|
* @param auth authentication data to free
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
TALER_BANK_auth_free (struct TALER_BANK_AuthenticationData *auth);
|
|
|
|
|
2020-01-13 18:16:01 +01:00
|
|
|
|
2016-01-25 10:20:40 +01:00
|
|
|
#endif /* _TALER_BANK_SERVICE_H */
|