allow auditor to operate per-account
This commit is contained in:
parent
2b0f98dd4b
commit
aea82d3dcd
@ -861,11 +861,12 @@ check_exchange_wire_out ()
|
|||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
struct GNUNET_TIME_Absolute next_timestamp;
|
struct GNUNET_TIME_Absolute next_timestamp;
|
||||||
|
|
||||||
qs = edb->select_wire_out_above_serial_id (edb->cls,
|
qs = edb->select_wire_out_above_serial_id_by_account (edb->cls,
|
||||||
esession,
|
esession,
|
||||||
pp.last_wire_out_serial_id,
|
wp_section_name,
|
||||||
&wire_out_cb,
|
pp.last_wire_out_serial_id,
|
||||||
NULL);
|
&wire_out_cb,
|
||||||
|
NULL);
|
||||||
if (0 > qs)
|
if (0 > qs)
|
||||||
{
|
{
|
||||||
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
|
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
|
||||||
@ -1439,11 +1440,12 @@ process_next_account (void *cls)
|
|||||||
|
|
||||||
in_map = GNUNET_CONTAINER_multihashmap_create (1024,
|
in_map = GNUNET_CONTAINER_multihashmap_create (1024,
|
||||||
GNUNET_YES);
|
GNUNET_YES);
|
||||||
qs = edb->select_reserves_in_above_serial_id (edb->cls,
|
qs = edb->select_reserves_in_above_serial_id_by_account (edb->cls,
|
||||||
esession,
|
esession,
|
||||||
pp.last_reserve_in_serial_id,
|
wp_section_name,
|
||||||
&reserve_in_cb,
|
pp.last_reserve_in_serial_id,
|
||||||
NULL);
|
&reserve_in_cb,
|
||||||
|
NULL);
|
||||||
if (0 > qs)
|
if (0 > qs)
|
||||||
{
|
{
|
||||||
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
|
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
|
||||||
|
@ -723,7 +723,10 @@ deposit_cb (void *cls,
|
|||||||
GNUNET_free (url);
|
GNUNET_free (url);
|
||||||
}
|
}
|
||||||
if (NULL == au->wa)
|
if (NULL == au->wa)
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
/* make sure we have current fees */
|
/* make sure we have current fees */
|
||||||
au->execution_time = GNUNET_TIME_absolute_get ();
|
au->execution_time = GNUNET_TIME_absolute_get ();
|
||||||
@ -1570,6 +1573,7 @@ prepare_cb (void *cls,
|
|||||||
au->execution_time,
|
au->execution_time,
|
||||||
&au->wtid,
|
&au->wtid,
|
||||||
au->wire,
|
au->wire,
|
||||||
|
au->wa->section_name,
|
||||||
&au->final_amount);
|
&au->final_amount);
|
||||||
cleanup_au ();
|
cleanup_au ();
|
||||||
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
||||||
|
@ -368,6 +368,7 @@ postgres_create_tables (void *cls)
|
|||||||
",execution_date INT8 NOT NULL"
|
",execution_date INT8 NOT NULL"
|
||||||
",wtid_raw BYTEA UNIQUE NOT NULL CHECK (LENGTH(wtid_raw)=" TALER_WIRE_TRANSFER_IDENTIFIER_LEN_STR ")"
|
",wtid_raw BYTEA UNIQUE NOT NULL CHECK (LENGTH(wtid_raw)=" TALER_WIRE_TRANSFER_IDENTIFIER_LEN_STR ")"
|
||||||
",wire_target TEXT NOT NULL"
|
",wire_target TEXT NOT NULL"
|
||||||
|
",exchange_account_section TEXT NOT NULL"
|
||||||
",amount_val INT8 NOT NULL"
|
",amount_val INT8 NOT NULL"
|
||||||
",amount_frac INT4 NOT NULL"
|
",amount_frac INT4 NOT NULL"
|
||||||
",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
@ -621,6 +622,22 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" WHERE reserve_in_serial_id>=$1"
|
" WHERE reserve_in_serial_id>=$1"
|
||||||
" ORDER BY reserve_in_serial_id;",
|
" ORDER BY reserve_in_serial_id;",
|
||||||
1),
|
1),
|
||||||
|
/* Used in postgres_select_reserves_in_above_serial_id() to obtain inbound
|
||||||
|
transactions for reserves with serial id '\geq' the given parameter */
|
||||||
|
GNUNET_PQ_make_prepare ("audit_reserves_in_get_transactions_incr_by_account",
|
||||||
|
"SELECT"
|
||||||
|
" reserve_pub"
|
||||||
|
",wire_reference"
|
||||||
|
",credit_val"
|
||||||
|
",credit_frac"
|
||||||
|
",credit_curr"
|
||||||
|
",execution_date"
|
||||||
|
",sender_account_details"
|
||||||
|
",reserve_in_serial_id"
|
||||||
|
" FROM reserves_in"
|
||||||
|
" WHERE reserve_in_serial_id>=$1 AND exchange_account_section=$2"
|
||||||
|
" ORDER BY reserve_in_serial_id;",
|
||||||
|
2),
|
||||||
/* Used in #postgres_get_reserve_history() to obtain inbound transactions
|
/* Used in #postgres_get_reserve_history() to obtain inbound transactions
|
||||||
for a reserve */
|
for a reserve */
|
||||||
GNUNET_PQ_make_prepare ("reserves_in_get_transactions",
|
GNUNET_PQ_make_prepare ("reserves_in_get_transactions",
|
||||||
@ -1215,12 +1232,13 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
"(execution_date"
|
"(execution_date"
|
||||||
",wtid_raw"
|
",wtid_raw"
|
||||||
",wire_target"
|
",wire_target"
|
||||||
|
",exchange_account_section"
|
||||||
",amount_val"
|
",amount_val"
|
||||||
",amount_frac"
|
",amount_frac"
|
||||||
",amount_curr"
|
",amount_curr"
|
||||||
") VALUES "
|
") VALUES "
|
||||||
"($1, $2, $3, $4, $5, $6);",
|
"($1, $2, $3, $4, $5, $6, $7);",
|
||||||
6),
|
7),
|
||||||
/* Used in #postgres_wire_prepare_data_insert() to store
|
/* Used in #postgres_wire_prepare_data_insert() to store
|
||||||
wire transfer information before actually committing it with the bank */
|
wire transfer information before actually committing it with the bank */
|
||||||
GNUNET_PQ_make_prepare ("wire_prepare_data_insert",
|
GNUNET_PQ_make_prepare ("wire_prepare_data_insert",
|
||||||
@ -1290,6 +1308,20 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" WHERE wireout_uuid>=$1"
|
" WHERE wireout_uuid>=$1"
|
||||||
" ORDER BY wireout_uuid ASC;",
|
" ORDER BY wireout_uuid ASC;",
|
||||||
1),
|
1),
|
||||||
|
/* Used in #postgres_select_wire_out_above_serial_id_by_account() */
|
||||||
|
GNUNET_PQ_make_prepare ("audit_get_wire_incr_by_account",
|
||||||
|
"SELECT"
|
||||||
|
" wireout_uuid"
|
||||||
|
",execution_date"
|
||||||
|
",wtid_raw"
|
||||||
|
",wire_target"
|
||||||
|
",amount_val"
|
||||||
|
",amount_frac"
|
||||||
|
",amount_curr"
|
||||||
|
" FROM wire_out"
|
||||||
|
" WHERE wireout_uuid>=$1 AND exchange_account_section=$2"
|
||||||
|
" ORDER BY wireout_uuid ASC;",
|
||||||
|
2),
|
||||||
/* Used in #postgres_insert_payback_request() to store payback
|
/* Used in #postgres_insert_payback_request() to store payback
|
||||||
information */
|
information */
|
||||||
GNUNET_PQ_make_prepare ("payback_insert",
|
GNUNET_PQ_make_prepare ("payback_insert",
|
||||||
@ -4883,6 +4915,8 @@ postgres_start_deferred_wire_out (void *cls,
|
|||||||
* @param date time of the wire transfer
|
* @param date time of the wire transfer
|
||||||
* @param wtid subject of the wire transfer
|
* @param wtid subject of the wire transfer
|
||||||
* @param wire_account details about the receiver account of the wire transfer
|
* @param wire_account details about the receiver account of the wire transfer
|
||||||
|
* @param exchange_account_section configuration section of the exchange specifying the
|
||||||
|
* exchange's bank account being used
|
||||||
* @param amount amount that was transmitted
|
* @param amount amount that was transmitted
|
||||||
* @return transaction status code
|
* @return transaction status code
|
||||||
*/
|
*/
|
||||||
@ -4892,12 +4926,14 @@ postgres_store_wire_transfer_out (void *cls,
|
|||||||
struct GNUNET_TIME_Absolute date,
|
struct GNUNET_TIME_Absolute date,
|
||||||
const struct TALER_WireTransferIdentifierRawP *wtid,
|
const struct TALER_WireTransferIdentifierRawP *wtid,
|
||||||
const json_t *wire_account,
|
const json_t *wire_account,
|
||||||
|
const char *exchange_account_section,
|
||||||
const struct TALER_Amount *amount)
|
const struct TALER_Amount *amount)
|
||||||
{
|
{
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
TALER_PQ_query_param_absolute_time (&date),
|
TALER_PQ_query_param_absolute_time (&date),
|
||||||
GNUNET_PQ_query_param_auto_from_type (wtid),
|
GNUNET_PQ_query_param_auto_from_type (wtid),
|
||||||
TALER_PQ_query_param_json (wire_account),
|
TALER_PQ_query_param_json (wire_account),
|
||||||
|
GNUNET_PQ_query_param_string (exchange_account_section),
|
||||||
TALER_PQ_query_param_amount (amount),
|
TALER_PQ_query_param_amount (amount),
|
||||||
GNUNET_PQ_query_param_end
|
GNUNET_PQ_query_param_end
|
||||||
};
|
};
|
||||||
@ -5507,6 +5543,49 @@ postgres_select_reserves_in_above_serial_id (void *cls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select inbound wire transfers into reserves_in above @a serial_id
|
||||||
|
* in monotonically increasing order by account.
|
||||||
|
*
|
||||||
|
* @param cls closure
|
||||||
|
* @param session database connection
|
||||||
|
* @param account_name name of the account to select by
|
||||||
|
* @param serial_id highest serial ID to exclude (select strictly larger)
|
||||||
|
* @param cb function to call on each result
|
||||||
|
* @param cb_cls closure for @a cb
|
||||||
|
* @return transaction status code
|
||||||
|
*/
|
||||||
|
static enum GNUNET_DB_QueryStatus
|
||||||
|
postgres_select_reserves_in_above_serial_id_by_account (void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *account_name,
|
||||||
|
uint64_t serial_id,
|
||||||
|
TALER_EXCHANGEDB_ReserveInCallback cb,
|
||||||
|
void *cb_cls)
|
||||||
|
{
|
||||||
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_uint64 (&serial_id),
|
||||||
|
GNUNET_PQ_query_param_string (account_name),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
struct ReservesInSerialContext risc = {
|
||||||
|
.cb = cb,
|
||||||
|
.cb_cls = cb_cls,
|
||||||
|
.status = GNUNET_OK
|
||||||
|
};
|
||||||
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
|
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
||||||
|
"audit_reserves_in_get_transactions_incr_by_account",
|
||||||
|
params,
|
||||||
|
&reserves_in_serial_helper_cb,
|
||||||
|
&risc);
|
||||||
|
if (GNUNET_OK != risc.status)
|
||||||
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
|
return qs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closure for #reserves_out_serial_helper_cb().
|
* Closure for #reserves_out_serial_helper_cb().
|
||||||
*/
|
*/
|
||||||
@ -5763,6 +5842,49 @@ postgres_select_wire_out_above_serial_id (void *cls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called to select all wire transfers the exchange
|
||||||
|
* executed by account.
|
||||||
|
*
|
||||||
|
* @param cls closure
|
||||||
|
* @param session database connection
|
||||||
|
* @param account_name account to select
|
||||||
|
* @param serial_id highest serial ID to exclude (select strictly larger)
|
||||||
|
* @param cb function to call for ONE unfinished item
|
||||||
|
* @param cb_cls closure for @a cb
|
||||||
|
* @return transaction status code
|
||||||
|
*/
|
||||||
|
static enum GNUNET_DB_QueryStatus
|
||||||
|
postgres_select_wire_out_above_serial_id_by_account (void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *account_name,
|
||||||
|
uint64_t serial_id,
|
||||||
|
TALER_EXCHANGEDB_WireTransferOutCallback cb,
|
||||||
|
void *cb_cls)
|
||||||
|
{
|
||||||
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_uint64 (&serial_id),
|
||||||
|
GNUNET_PQ_query_param_string (account_name),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
struct WireOutSerialContext wosc = {
|
||||||
|
.cb = cb,
|
||||||
|
.cb_cls = cb_cls,
|
||||||
|
.status = GNUNET_OK
|
||||||
|
};
|
||||||
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
|
qs = GNUNET_PQ_eval_prepared_multi_select (session->conn,
|
||||||
|
"audit_get_wire_incr_by_account",
|
||||||
|
params,
|
||||||
|
&wire_out_serial_helper_cb,
|
||||||
|
&wosc);
|
||||||
|
if (GNUNET_OK != wosc.status)
|
||||||
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
|
return qs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closure for #payback_serial_helper_cb().
|
* Closure for #payback_serial_helper_cb().
|
||||||
*/
|
*/
|
||||||
@ -6448,19 +6570,36 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
|
|||||||
plugin->start_deferred_wire_out = &postgres_start_deferred_wire_out;
|
plugin->start_deferred_wire_out = &postgres_start_deferred_wire_out;
|
||||||
plugin->store_wire_transfer_out = &postgres_store_wire_transfer_out;
|
plugin->store_wire_transfer_out = &postgres_store_wire_transfer_out;
|
||||||
plugin->gc = &postgres_gc;
|
plugin->gc = &postgres_gc;
|
||||||
plugin->select_deposits_above_serial_id = &postgres_select_deposits_above_serial_id;
|
plugin->select_deposits_above_serial_id
|
||||||
plugin->select_refreshs_above_serial_id = &postgres_select_refreshs_above_serial_id;
|
= &postgres_select_deposits_above_serial_id;
|
||||||
plugin->select_refunds_above_serial_id = &postgres_select_refunds_above_serial_id;
|
plugin->select_refreshs_above_serial_id
|
||||||
plugin->select_reserves_in_above_serial_id = &postgres_select_reserves_in_above_serial_id;
|
= &postgres_select_refreshs_above_serial_id;
|
||||||
plugin->select_reserves_out_above_serial_id = &postgres_select_reserves_out_above_serial_id;
|
plugin->select_refunds_above_serial_id
|
||||||
plugin->select_wire_out_above_serial_id = &postgres_select_wire_out_above_serial_id;
|
= &postgres_select_refunds_above_serial_id;
|
||||||
plugin->select_payback_above_serial_id = &postgres_select_payback_above_serial_id;
|
plugin->select_reserves_in_above_serial_id
|
||||||
plugin->select_reserve_closed_above_serial_id = &postgres_select_reserve_closed_above_serial_id;
|
= &postgres_select_reserves_in_above_serial_id;
|
||||||
plugin->insert_payback_request = &postgres_insert_payback_request;
|
plugin->select_reserves_in_above_serial_id_by_account
|
||||||
plugin->get_reserve_by_h_blind = &postgres_get_reserve_by_h_blind;
|
= &postgres_select_reserves_in_above_serial_id_by_account;
|
||||||
plugin->insert_denomination_revocation = &postgres_insert_denomination_revocation;
|
plugin->select_reserves_out_above_serial_id
|
||||||
plugin->get_denomination_revocation = &postgres_get_denomination_revocation;
|
= &postgres_select_reserves_out_above_serial_id;
|
||||||
plugin->select_deposits_missing_wire = &postgres_select_deposits_missing_wire;
|
plugin->select_wire_out_above_serial_id
|
||||||
|
= &postgres_select_wire_out_above_serial_id;
|
||||||
|
plugin->select_wire_out_above_serial_id_by_account
|
||||||
|
= &postgres_select_wire_out_above_serial_id_by_account;
|
||||||
|
plugin->select_payback_above_serial_id
|
||||||
|
= &postgres_select_payback_above_serial_id;
|
||||||
|
plugin->select_reserve_closed_above_serial_id
|
||||||
|
= &postgres_select_reserve_closed_above_serial_id;
|
||||||
|
plugin->insert_payback_request
|
||||||
|
= &postgres_insert_payback_request;
|
||||||
|
plugin->get_reserve_by_h_blind
|
||||||
|
= &postgres_get_reserve_by_h_blind;
|
||||||
|
plugin->insert_denomination_revocation
|
||||||
|
= &postgres_insert_denomination_revocation;
|
||||||
|
plugin->get_denomination_revocation
|
||||||
|
= &postgres_get_denomination_revocation;
|
||||||
|
plugin->select_deposits_missing_wire
|
||||||
|
= &postgres_select_deposits_missing_wire;
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1273,6 +1273,7 @@ test_wire_out (struct TALER_EXCHANGEDB_Session *session,
|
|||||||
wire_out_date,
|
wire_out_date,
|
||||||
&wire_out_wtid,
|
&wire_out_wtid,
|
||||||
wire_out_account,
|
wire_out_account,
|
||||||
|
"my-config-section",
|
||||||
&wire_out_amount))
|
&wire_out_amount))
|
||||||
{
|
{
|
||||||
json_decref (wire_out_account);
|
json_decref (wire_out_account);
|
||||||
@ -2187,7 +2188,8 @@ run (void *cls)
|
|||||||
result = 0;
|
result = 0;
|
||||||
|
|
||||||
drop:
|
drop:
|
||||||
if (0 != result)
|
if ( (0 != result) &&
|
||||||
|
(NULL != session) )
|
||||||
plugin->rollback (plugin->cls,
|
plugin->rollback (plugin->cls,
|
||||||
session);
|
session);
|
||||||
if (NULL != rh)
|
if (NULL != rh)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2017 Inria and GNUnet e.V.
|
Copyright (C) 2014-2018 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
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
|
terms of the GNU General Public License as published by the Free Software
|
||||||
|
@ -1878,6 +1878,8 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
* @param wire_account details about the receiver account of the wire transfer,
|
* @param wire_account details about the receiver account of the wire transfer,
|
||||||
* including 'url' in payto://-format
|
* including 'url' in payto://-format
|
||||||
* @param amount amount that was transmitted
|
* @param amount amount that was transmitted
|
||||||
|
* @param exchange_account_section configuration section of the exchange specifying the
|
||||||
|
* exchange's bank account being used
|
||||||
* @return transaction status code
|
* @return transaction status code
|
||||||
*/
|
*/
|
||||||
enum GNUNET_DB_QueryStatus
|
enum GNUNET_DB_QueryStatus
|
||||||
@ -1886,6 +1888,7 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
struct GNUNET_TIME_Absolute date,
|
struct GNUNET_TIME_Absolute date,
|
||||||
const struct TALER_WireTransferIdentifierRawP *wtid,
|
const struct TALER_WireTransferIdentifierRawP *wtid,
|
||||||
const json_t *wire_account,
|
const json_t *wire_account,
|
||||||
|
const char *exchange_account_section,
|
||||||
const struct TALER_Amount *amount);
|
const struct TALER_Amount *amount);
|
||||||
|
|
||||||
|
|
||||||
@ -1983,12 +1986,33 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
TALER_EXCHANGEDB_ReserveInCallback cb,
|
TALER_EXCHANGEDB_ReserveInCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select inbound wire transfers into reserves_in above @a serial_id
|
||||||
|
* in monotonically increasing order by @a account_name.
|
||||||
|
*
|
||||||
|
* @param cls closure
|
||||||
|
* @param session database connection
|
||||||
|
* @param account_name name of the account for which we do the selection
|
||||||
|
* @param serial_id highest serial ID to exclude (select strictly larger)
|
||||||
|
* @param cb function to call on each result
|
||||||
|
* @param cb_cls closure for @a cb
|
||||||
|
* @return transaction status code
|
||||||
|
*/
|
||||||
|
enum GNUNET_DB_QueryStatus
|
||||||
|
(*select_reserves_in_above_serial_id_by_account)(void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *account_name,
|
||||||
|
uint64_t serial_id,
|
||||||
|
TALER_EXCHANGEDB_ReserveInCallback cb,
|
||||||
|
void *cb_cls);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select withdraw operations from reserves_out above @a serial_id
|
* Select withdraw operations from reserves_out above @a serial_id
|
||||||
* in monotonically increasing order.
|
* in monotonically increasing order.
|
||||||
*
|
*
|
||||||
* @param cls closure
|
* @param cls closure
|
||||||
* @param session database connection
|
* @param session database connection
|
||||||
|
* @param account_name name of the account for which we do the selection
|
||||||
* @param serial_id highest serial ID to exclude (select strictly larger)
|
* @param serial_id highest serial ID to exclude (select strictly larger)
|
||||||
* @param cb function to call on each result
|
* @param cb function to call on each result
|
||||||
* @param cb_cls closure for @a cb
|
* @param cb_cls closure for @a cb
|
||||||
@ -2001,7 +2025,6 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
TALER_EXCHANGEDB_WithdrawCallback cb,
|
TALER_EXCHANGEDB_WithdrawCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called to select outgoing wire transfers the exchange
|
* Function called to select outgoing wire transfers the exchange
|
||||||
* executed, ordered by serial ID (monotonically increasing).
|
* executed, ordered by serial ID (monotonically increasing).
|
||||||
@ -2020,6 +2043,26 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
TALER_EXCHANGEDB_WireTransferOutCallback cb,
|
TALER_EXCHANGEDB_WireTransferOutCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function called to select outgoing wire transfers the exchange
|
||||||
|
* executed, ordered by serial ID (monotonically increasing).
|
||||||
|
*
|
||||||
|
* @param cls closure
|
||||||
|
* @param session database connection
|
||||||
|
* @param account_name name to select by
|
||||||
|
* @param serial_id lowest serial ID to include (select larger or equal)
|
||||||
|
* @param cb function to call for ONE unfinished item
|
||||||
|
* @param cb_cls closure for @a cb
|
||||||
|
* @return transaction status code
|
||||||
|
*/
|
||||||
|
enum GNUNET_DB_QueryStatus
|
||||||
|
(*select_wire_out_above_serial_id_by_account)(void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *account_name,
|
||||||
|
uint64_t serial_id,
|
||||||
|
TALER_EXCHANGEDB_WireTransferOutCallback cb,
|
||||||
|
void *cb_cls);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called to select payback requests the exchange
|
* Function called to select payback requests the exchange
|
||||||
|
Loading…
Reference in New Issue
Block a user