diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-06-19 20:46:24 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-06-19 20:46:24 +0200 |
commit | 703c54a279af8441e1a1e686f71d26bcd69bfd7d (patch) | |
tree | 233f57e999224430f2844c6a01c7e1da07d63a86 /src | |
parent | a0c66e79191ca4339ea91e74e3742ccd8bd515ab (diff) |
fix #5010 for /track/transaction
Diffstat (limited to 'src')
-rw-r--r-- | src/exchange/taler-exchange-httpd_admin.c | 75 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd_db.c | 64 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd_db.h | 22 | ||||
-rw-r--r-- | src/exchange/taler-exchange-httpd_track_transaction.c | 219 | ||||
-rw-r--r-- | src/exchangedb/plugin_exchangedb_postgres.c | 159 | ||||
-rw-r--r-- | src/exchangedb/test_exchangedb.c | 4 | ||||
-rw-r--r-- | src/include/taler_exchangedb_plugin.h | 5 |
7 files changed, 248 insertions, 300 deletions
diff --git a/src/exchange/taler-exchange-httpd_admin.c b/src/exchange/taler-exchange-httpd_admin.c index 8bb4b4988..e40775f51 100644 --- a/src/exchange/taler-exchange-httpd_admin.c +++ b/src/exchange/taler-exchange-httpd_admin.c @@ -27,6 +27,69 @@ #include "taler-exchange-httpd_validation.h" +/** + * Add an incoming transaction to the database. Checks if the + * transaction is fresh (not a duplicate) and if so adds it to + * the database. + * + * @param connection the MHD connection to handle + * @param reserve_pub public key of the reserve + * @param amount amount to add to the reserve + * @param execution_time when did we receive the wire transfer + * @param sender_account_details which account send the funds + * @param transfer_details information that uniquely identifies the transfer + * @return MHD result code + */ +static int +execute_admin_add_incoming (struct MHD_Connection *connection, + const struct TALER_ReservePublicKeyP *reserve_pub, + const struct TALER_Amount *amount, + struct GNUNET_TIME_Absolute execution_time, + const json_t *sender_account_details, + const json_t *transfer_details) +{ + struct TALER_EXCHANGEDB_Session *session; + int ret; + void *json_str; + + if (NULL == (session = TEH_plugin->get_session (TEH_plugin->cls))) + { + GNUNET_break (0); + return TEH_RESPONSE_reply_internal_db_error (connection, + TALER_EC_DB_SETUP_FAILED); + } + json_str = json_dumps (transfer_details, + JSON_INDENT(2)); + if (NULL == json_str) + { + GNUNET_break (0); + return TEH_RESPONSE_reply_internal_db_error (connection, + TALER_EC_PARSER_OUT_OF_MEMORY); + } + ret = TEH_plugin->reserves_in_insert (TEH_plugin->cls, + session, + reserve_pub, + amount, + execution_time, + sender_account_details, + json_str, + strlen (json_str)); + free (json_str); + if (GNUNET_SYSERR == ret) + { + GNUNET_break (0); + return TEH_RESPONSE_reply_internal_db_error (connection, + TALER_EC_ADMIN_ADD_INCOMING_DB_STORE); + } + return TEH_RESPONSE_reply_json_pack (connection, + MHD_HTTP_OK, + "{s:s}", + "status", + (GNUNET_OK == ret) + ? "NEW" + : "DUP"); +} + /** * Handle a "/admin/add/incoming" request. Parses the @@ -108,12 +171,12 @@ TEH_ADMIN_handler_admin_add_incoming (struct TEH_RequestHandler *rh, TALER_EC_ADMIN_ADD_INCOMING_CURRENCY_UNSUPPORTED, "amount:currency"); } - res = TEH_DB_execute_admin_add_incoming (connection, - &reserve_pub, - &amount, - at, - sender_account_details, - transfer_details); + res = execute_admin_add_incoming (connection, + &reserve_pub, + &amount, + at, + sender_account_details, + transfer_details); GNUNET_JSON_parse_free (spec); return res; } diff --git a/src/exchange/taler-exchange-httpd_db.c b/src/exchange/taler-exchange-httpd_db.c index bed2a7fb7..9871b7f34 100644 --- a/src/exchange/taler-exchange-httpd_db.c +++ b/src/exchange/taler-exchange-httpd_db.c @@ -1145,68 +1145,4 @@ TEH_DB_execute_refresh_link (struct MHD_Connection *connection, } -/** - * Add an incoming transaction to the database. Checks if the - * transaction is fresh (not a duplicate) and if so adds it to - * the database. - * - * @param connection the MHD connection to handle - * @param reserve_pub public key of the reserve - * @param amount amount to add to the reserve - * @param execution_time when did we receive the wire transfer - * @param sender_account_details which account send the funds - * @param transfer_details information that uniquely identifies the transfer - * @return MHD result code - */ -int -TEH_DB_execute_admin_add_incoming (struct MHD_Connection *connection, - const struct TALER_ReservePublicKeyP *reserve_pub, - const struct TALER_Amount *amount, - struct GNUNET_TIME_Absolute execution_time, - const json_t *sender_account_details, - const json_t *transfer_details) -{ - struct TALER_EXCHANGEDB_Session *session; - int ret; - void *json_str; - - if (NULL == (session = TEH_plugin->get_session (TEH_plugin->cls))) - { - GNUNET_break (0); - return TEH_RESPONSE_reply_internal_db_error (connection, - TALER_EC_DB_SETUP_FAILED); - } - json_str = json_dumps (transfer_details, - JSON_INDENT(2)); - if (NULL == json_str) - { - GNUNET_break (0); - return TEH_RESPONSE_reply_internal_db_error (connection, - TALER_EC_PARSER_OUT_OF_MEMORY); - } - ret = TEH_plugin->reserves_in_insert (TEH_plugin->cls, - session, - reserve_pub, - amount, - execution_time, - sender_account_details, - json_str, - strlen (json_str)); - free (json_str); - if (GNUNET_SYSERR == ret) - { - GNUNET_break (0); - return TEH_RESPONSE_reply_internal_db_error (connection, - TALER_EC_ADMIN_ADD_INCOMING_DB_STORE); - } - return TEH_RESPONSE_reply_json_pack (connection, - MHD_HTTP_OK, - "{s:s}", - "status", - (GNUNET_OK == ret) - ? "NEW" - : "DUP"); -} - - /* end of taler-exchange-httpd_db.c */ diff --git a/src/exchange/taler-exchange-httpd_db.h b/src/exchange/taler-exchange-httpd_db.h index 662f034de..85a1604cf 100644 --- a/src/exchange/taler-exchange-httpd_db.h +++ b/src/exchange/taler-exchange-httpd_db.h @@ -175,27 +175,5 @@ int TEH_DB_execute_refresh_link (struct MHD_Connection *connection, const struct TALER_CoinSpendPublicKeyP *coin_pub); - - -/** - * Add an incoming transaction to the database. - * - * @param connection the MHD connection to handle - * @param reserve_pub public key of the reserve - * @param amount amount to add to the reserve - * @param execution_time when did we receive the wire transfer - * @param sender_account_details which account send the funds - * @param transfer_details information that uniquely identifies the transfer - * @return MHD result code - */ -int -TEH_DB_execute_admin_add_incoming (struct MHD_Connection *connection, - const struct TALER_ReservePublicKeyP *reserve_pub, - const struct TALER_Amount *amount, - struct GNUNET_TIME_Absolute execution_time, - const json_t *sender_account_details, - const json_t *transfer_details); - - #endif /* TALER_EXCHANGE_HTTPD_DB_H */ diff --git a/src/exchange/taler-exchange-httpd_track_transaction.c b/src/exchange/taler-exchange-httpd_track_transaction.c index b617021eb..7c4052fc5 100644 --- a/src/exchange/taler-exchange-httpd_track_transaction.c +++ b/src/exchange/taler-exchange-httpd_track_transaction.c @@ -44,14 +44,14 @@ * @param exec_time execution time of the wire transfer * @return MHD result code */ -int -TEH_RESPONSE_reply_track_transaction (struct MHD_Connection *connection, - const struct GNUNET_HashCode *h_contract_terms, - const struct GNUNET_HashCode *h_wire, - const struct TALER_CoinSpendPublicKeyP *coin_pub, - const struct TALER_Amount *coin_contribution, - const struct TALER_WireTransferIdentifierRawP *wtid, - struct GNUNET_TIME_Absolute exec_time) +static int +reply_track_transaction (struct MHD_Connection *connection, + const struct GNUNET_HashCode *h_contract_terms, + const struct GNUNET_HashCode *h_wire, + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_Amount *coin_contribution, + const struct TALER_WireTransferIdentifierRawP *wtid, + struct GNUNET_TIME_Absolute exec_time) { struct TALER_ConfirmWirePS cw; struct TALER_ExchangePublicKeyP pub; @@ -87,29 +87,47 @@ struct DepositWtidContext { /** - * Where should we send the reply? + * Deposit details. */ - struct MHD_Connection *connection; + const struct TALER_DepositTrackPS *tps; /** - * Hash of the proposal data we are looking up. + * Public key of the merchant. */ - struct GNUNET_HashCode h_contract_terms; + const struct TALER_MerchantPublicKeyP *merchant_pub; + + /** + * Set by #handle_wtid data to the wire transfer ID. + */ + struct TALER_WireTransferIdentifierRawP wtid; + + /** + * Set by #handle_wtid data to the coin's contribution to the wire transfer. + */ + struct TALER_Amount coin_contribution; + + /** + * Set by #handle_wtid data to the fee charged to the coin. + */ + struct TALER_Amount coin_fee; /** - * Hash of the wire transfer details we are looking up. - */ - struct GNUNET_HashCode h_wire; + * Set by #handle_wtid data to the wire transfer execution time. + */ + struct GNUNET_TIME_Absolute execution_time; /** - * Public key we are looking up. + * Set by #handle_wtid to the coin contribution to the transaction + * (that is, @e coin_contribution minus @e coin_fee). */ - struct TALER_CoinSpendPublicKeyP coin_pub; + struct TALER_Amount coin_delta; /** - * MHD result code to return. + * Set to #GNUNET_YES by #handle_wtid if the wire transfer is still pending + * (and the above were not set). + * Set to #GNUNET_SYSERR if there was a serious error. */ - int res; + int pending; }; @@ -136,35 +154,26 @@ handle_wtid_data (void *cls, struct GNUNET_TIME_Absolute execution_time) { struct DepositWtidContext *ctx = cls; - struct TALER_Amount coin_delta; if (NULL == wtid) { - ctx->res = TEH_RESPONSE_reply_transfer_pending (ctx->connection, - execution_time); + ctx->pending = GNUNET_YES; + ctx->execution_time = execution_time; + return; } - else + if (GNUNET_SYSERR == + TALER_amount_subtract (&ctx->coin_delta, + coin_contribution, + coin_fee)) { - if (GNUNET_SYSERR == - TALER_amount_subtract (&coin_delta, - coin_contribution, - coin_fee)) - { - GNUNET_break (0); - ctx->res = TEH_RESPONSE_reply_internal_db_error (ctx->connection, - TALER_EC_TRACK_TRANSACTION_DB_FEE_INCONSISTENT); - } - else - { - ctx->res = TEH_RESPONSE_reply_track_transaction (ctx->connection, - &ctx->h_contract_terms, - &ctx->h_wire, - &ctx->coin_pub, - &coin_delta, - wtid, - execution_time); - } + GNUNET_break (0); + ctx->pending = GNUNET_SYSERR; + return; } + ctx->wtid = *wtid; + ctx->execution_time = execution_time; + ctx->coin_contribution = *coin_contribution; + ctx->coin_fee = *coin_fee; } @@ -172,64 +181,53 @@ handle_wtid_data (void *cls, * Execute a "/track/transaction". Returns the transfer information * associated with the given deposit. * - * @param connection the MHD connection to handle - * @param h_contract_terms hash of the proposal data - * @param h_wire hash of the wire details - * @param coin_pub public key of the coin to link - * @param merchant_pub public key of the merchant - * @return MHD result code + * If it returns a non-error code, the transaction logic MUST + * NOT queue a MHD response. IF it returns an hard error, the + * transaction logic MUST queue a MHD response and set @a mhd_ret. IF + * it returns the soft error code, the function MAY be called again to + * retry and MUST not queue a MHD response. + * + * @param cls closure of type `struct DepositWtidContext *` + * @param connection MHD request which triggered the transaction + * @param session database session to use + * @param[out] mhd_ret set to MHD response status for @a connection, + * if transaction failed (!) + * @return transaction status */ -int -TEH_DB_execute_track_transaction (struct MHD_Connection *connection, - const struct GNUNET_HashCode *h_contract_terms, - const struct GNUNET_HashCode *h_wire, - const struct TALER_CoinSpendPublicKeyP *coin_pub, - const struct TALER_MerchantPublicKeyP *merchant_pub) +static enum GNUNET_DB_QueryStatus +track_transaction_transaction (void *cls, + struct MHD_Connection *connection, + struct TALER_EXCHANGEDB_Session *session, + int *mhd_ret) { - int ret; - struct DepositWtidContext ctx; - struct TALER_EXCHANGEDB_Session *session; + struct DepositWtidContext *ctx = cls; + enum GNUNET_DB_QueryStatus qs; - if (NULL == (session = TEH_plugin->get_session (TEH_plugin->cls))) - { - GNUNET_break (0); - return TEH_RESPONSE_reply_internal_db_error (connection, - TALER_EC_DB_SETUP_FAILED); - } - ctx.connection = connection; - ctx.h_contract_terms = *h_contract_terms; - ctx.h_wire = *h_wire; - ctx.coin_pub = *coin_pub; - ctx.res = GNUNET_SYSERR; - ret = TEH_plugin->wire_lookup_deposit_wtid (TEH_plugin->cls, - session, - h_contract_terms, - h_wire, - coin_pub, - merchant_pub, - &handle_wtid_data, - &ctx); - if (GNUNET_SYSERR == ret) - { - GNUNET_break (0); - GNUNET_break (GNUNET_SYSERR == ctx.res); - return TEH_RESPONSE_reply_internal_db_error (connection, - TALER_EC_TRACK_TRANSACTION_DB_FETCH_FAILED); - } - if (GNUNET_NO == ret) + qs = TEH_plugin->wire_lookup_deposit_wtid (TEH_plugin->cls, + session, + &ctx->tps->h_contract_terms, + &ctx->tps->h_wire, + &ctx->tps->coin_pub, + ctx->merchant_pub, + &handle_wtid_data, + ctx); + if (0 > qs) { - GNUNET_break (GNUNET_SYSERR == ctx.res); - return TEH_RESPONSE_reply_transaction_unknown (connection, - TALER_EC_TRACK_TRANSACTION_NOT_FOUND); + if (GNUNET_DB_STATUS_HARD_ERROR == qs) + { + GNUNET_break (0); + *mhd_ret = TEH_RESPONSE_reply_internal_db_error (connection, + TALER_EC_TRACK_TRANSACTION_DB_FETCH_FAILED); + } + return qs; } - if (GNUNET_SYSERR == ctx.res) + if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) { - GNUNET_break (0); - return TEH_RESPONSE_reply_internal_error (connection, - TALER_EC_TRACK_TRANSACTION_WTID_RESOLUTION_ERROR, - "bug resolving deposit wtid"); + *mhd_ret = TEH_RESPONSE_reply_transaction_unknown (connection, + TALER_EC_TRACK_TRANSACTION_NOT_FOUND); + return GNUNET_DB_STATUS_HARD_ERROR; } - return ctx.res; + return qs; } @@ -246,9 +244,12 @@ TEH_DB_execute_track_transaction (struct MHD_Connection *connection, static int check_and_handle_track_transaction_request (struct MHD_Connection *connection, const struct TALER_DepositTrackPS *tps, - struct TALER_MerchantPublicKeyP *merchant_pub, - struct TALER_MerchantSignatureP *merchant_sig) + const struct TALER_MerchantPublicKeyP *merchant_pub, + const struct TALER_MerchantSignatureP *merchant_sig) { + struct DepositWtidContext ctx; + int mhd_ret; + if (GNUNET_OK != GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MERCHANT_TRACK_TRANSACTION, &tps->purpose, @@ -260,11 +261,29 @@ check_and_handle_track_transaction_request (struct MHD_Connection *connection, TALER_EC_TRACK_TRANSACTION_MERCHANT_SIGNATURE_INVALID, "merchant_sig"); } - return TEH_DB_execute_track_transaction (connection, - &tps->h_contract_terms, - &tps->h_wire, - &tps->coin_pub, - merchant_pub); + ctx.pending = GNUNET_NO; + ctx.tps = tps; + ctx.merchant_pub = merchant_pub; + + if (GNUNET_OK != + TEH_DB_run_transaction (connection, + &mhd_ret, + &track_transaction_transaction, + &ctx)) + return mhd_ret; + if (GNUNET_YES == ctx.pending) + return TEH_RESPONSE_reply_transfer_pending (connection, + ctx.execution_time); + if (GNUNET_SYSERR == ctx.pending) + return TEH_RESPONSE_reply_internal_db_error (connection, + TALER_EC_TRACK_TRANSACTION_DB_FEE_INCONSISTENT); + return reply_track_transaction (connection, + &tps->h_contract_terms, + &tps->h_wire, + &tps->coin_pub, + &ctx.coin_delta, + &ctx.wtid, + ctx.execution_time); } diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index 2f05c0233..b029db587 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -4584,10 +4584,9 @@ postgres_lookup_wire_transfer (void *cls, * @param merchant_pub merchant public key * @param cb function to call with the result * @param cb_cls closure to pass to @a cb - * @return #GNUNET_OK on success, #GNUNET_SYSERR on DB errors, - * #GNUNET_NO if nothing was found + * @return transaction status code */ -static int +static enum GNUNET_DB_QueryStatus postgres_wire_lookup_deposit_wtid (void *cls, struct TALER_EXCHANGEDB_Session *session, const struct GNUNET_HashCode *h_contract_terms, @@ -4597,7 +4596,7 @@ postgres_wire_lookup_deposit_wtid (void *cls, TALER_EXCHANGEDB_TrackTransactionCallback cb, void *cb_cls) { - PGresult *result; + enum GNUNET_DB_QueryStatus qs; struct GNUNET_PQ_QueryParam params[] = { GNUNET_PQ_query_param_auto_from_type (coin_pub), GNUNET_PQ_query_param_auto_from_type (h_contract_terms), @@ -4605,122 +4604,76 @@ postgres_wire_lookup_deposit_wtid (void *cls, GNUNET_PQ_query_param_auto_from_type (merchant_pub), GNUNET_PQ_query_param_end }; - int nrows; - + struct TALER_WireTransferIdentifierRawP wtid; + struct GNUNET_TIME_Absolute exec_time; + struct TALER_Amount amount_with_fee; + struct TALER_Amount deposit_fee; + struct GNUNET_PQ_ResultSpec rs[] = { + GNUNET_PQ_result_spec_auto_from_type ("wtid_raw", &wtid), + GNUNET_PQ_result_spec_absolute_time ("execution_date", &exec_time), + TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee), + TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee), + GNUNET_PQ_result_spec_end + }; + /* check if the melt record exists and get it */ - result = GNUNET_PQ_exec_prepared (session->conn, - "lookup_deposit_wtid", - params); - if (PGRES_TUPLES_OK != PQresultStatus (result)) + qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn, + "lookup_deposit_wtid", + params, + rs); + if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) { - BREAK_DB_ERR (result, session->conn); - PQclear (result); - return GNUNET_SYSERR; + cb (cb_cls, + &wtid, + &amount_with_fee, + &deposit_fee, + exec_time); + return qs; } - nrows = PQntuples (result); - if (0 == nrows) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "lookup_deposit_wtid returned 0 matching rows\n"); - PQclear (result); + if (0 > qs) + return qs; + GNUNET_assert (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "lookup_deposit_wtid returned 0 matching rows\n"); + { /* Check if transaction exists in deposits, so that we just do not have a WTID yet, if so, do call the CB with a NULL wtid and return #GNUNET_YES! */ - { - struct GNUNET_PQ_QueryParam params2[] = { - GNUNET_PQ_query_param_auto_from_type (coin_pub), - GNUNET_PQ_query_param_auto_from_type (merchant_pub), - GNUNET_PQ_query_param_auto_from_type (h_contract_terms), - GNUNET_PQ_query_param_auto_from_type (h_wire), - GNUNET_PQ_query_param_end - }; - - result = GNUNET_PQ_exec_prepared (session->conn, - "get_deposit_for_wtid", - params2); - if (PGRES_TUPLES_OK != PQresultStatus (result)) - { - BREAK_DB_ERR (result, session->conn); - PQclear (result); - return GNUNET_SYSERR; - } - } - nrows = PQntuples (result); - if (0 == nrows) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "get_deposit_for_wtid returned 0 matching rows\n"); - PQclear (result); - return GNUNET_NO; - } - - /* Ok, we're aware of the transaction, but it has not yet been - executed */ - { - struct GNUNET_TIME_Absolute exec_time; - struct TALER_Amount amount_with_fee; - struct TALER_Amount deposit_fee; - struct GNUNET_PQ_ResultSpec rs[] = { - TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee), - TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee), - GNUNET_PQ_result_spec_absolute_time ("wire_deadline", &exec_time), - GNUNET_PQ_result_spec_end - }; - - if (GNUNET_OK != - GNUNET_PQ_extract_result (result, - rs, - 0)) - { - GNUNET_break (0); - PQclear (result); - return GNUNET_SYSERR; - } - cb (cb_cls, - NULL, - &amount_with_fee, - &deposit_fee, - exec_time); - PQclear (result); - return GNUNET_YES; - } - } - if (1 != nrows) - { - GNUNET_break (0); - PQclear (result); - return GNUNET_SYSERR; - } - { - struct TALER_WireTransferIdentifierRawP wtid; + struct GNUNET_PQ_QueryParam params2[] = { + GNUNET_PQ_query_param_auto_from_type (coin_pub), + GNUNET_PQ_query_param_auto_from_type (merchant_pub), + GNUNET_PQ_query_param_auto_from_type (h_contract_terms), + GNUNET_PQ_query_param_auto_from_type (h_wire), + GNUNET_PQ_query_param_end + }; struct GNUNET_TIME_Absolute exec_time; struct TALER_Amount amount_with_fee; struct TALER_Amount deposit_fee; - struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_auto_from_type ("wtid_raw", &wtid), - GNUNET_PQ_result_spec_absolute_time ("execution_date", &exec_time), + struct GNUNET_PQ_ResultSpec rs2[] = { TALER_PQ_result_spec_amount ("amount_with_fee", &amount_with_fee), TALER_PQ_result_spec_amount ("fee_deposit", &deposit_fee), + GNUNET_PQ_result_spec_absolute_time ("wire_deadline", &exec_time), GNUNET_PQ_result_spec_end }; - if (GNUNET_OK != - GNUNET_PQ_extract_result (result, - rs, - 0)) + + qs = GNUNET_PQ_eval_prepared_singleton_select (session->conn, + "get_deposit_for_wtid", + params2, + rs2); + if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) { - GNUNET_break (0); - PQclear (result); - return GNUNET_SYSERR; + /* Ok, we're aware of the transaction, but it has not yet been + executed */ + cb (cb_cls, + NULL, + &amount_with_fee, + &deposit_fee, + exec_time); + return qs; } - cb (cb_cls, - &wtid, - &amount_with_fee, - &deposit_fee, - exec_time); + return qs; } - PQclear (result); - return GNUNET_OK; } diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c index 5c33418e1..9a58a38ec 100644 --- a/src/exchangedb/test_exchangedb.c +++ b/src/exchangedb/test_exchangedb.c @@ -1313,7 +1313,7 @@ test_wire_out (struct TALER_EXCHANGEDB_Session *session, struct GNUNET_HashCode h_contract_terms_wt2 = h_contract_terms_wt; h_contract_terms_wt2.bits[0]++; - FAILIF (GNUNET_NO != + FAILIF (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS != plugin->wire_lookup_deposit_wtid (plugin->cls, session, &h_contract_terms_wt2, @@ -1350,7 +1350,7 @@ test_wire_out (struct TALER_EXCHANGEDB_Session *session, &wire_out_wtid, &cb_wt_check, &cb_wt_never)); - FAILIF (GNUNET_OK != + FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != plugin->wire_lookup_deposit_wtid (plugin->cls, session, &h_contract_terms_wt, diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h index 8795811a2..23e80c077 100644 --- a/src/include/taler_exchangedb_plugin.h +++ b/src/include/taler_exchangedb_plugin.h @@ -1754,10 +1754,9 @@ struct TALER_EXCHANGEDB_Plugin * @param merchant_pub merchant public key * @param cb function to call with the result * @param cb_cls closure to pass to @a cb - * @return #GNUNET_OK on success, #GNUNET_SYSERR on DB errors, - * #GNUNET_NO if nothing was found + * @return transaction status code */ - int + enum GNUNET_DB_QueryStatus (*wire_lookup_deposit_wtid)(void *cls, struct TALER_EXCHANGEDB_Session *session, const struct GNUNET_HashCode *h_contract_terms, |