From f948a10f712ebd6f52182dc4bf71deee1c45b35f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 1 Jul 2015 00:01:21 +0200 Subject: implementing #3851 --- src/include/taler_mintdb_plugin.h | 2 ++ src/mint-tools/taler-mint-reservemod.c | 2 ++ src/mint/taler-mint-httpd_db.c | 29 +++++++++++++++++++++++++++-- src/mintdb/plugin_mintdb_postgres.c | 8 ++++---- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/include/taler_mintdb_plugin.h b/src/include/taler_mintdb_plugin.h index 88fe2801e..d7f0f99cd 100644 --- a/src/include/taler_mintdb_plugin.h +++ b/src/include/taler_mintdb_plugin.h @@ -742,6 +742,7 @@ struct TALER_MINTDB_Plugin * @param db the database connection handle * @param reserve_pub public key of the reserve * @param balance the amount that has to be added to the reserve + * @param execution_time when was the amount added * @param details bank transaction details justifying the increment, * must be unique for each incoming transaction * @return #GNUNET_OK upon success; #GNUNET_NO if the given @@ -753,6 +754,7 @@ struct TALER_MINTDB_Plugin struct TALER_MINTDB_Session *db, const struct TALER_ReservePublicKeyP *reserve_pub, const struct TALER_Amount *balance, + struct GNUNET_TIME_Absolute execution_time, const json_t *details); diff --git a/src/mint-tools/taler-mint-reservemod.c b/src/mint-tools/taler-mint-reservemod.c index 888b34baa..11d67ed5d 100644 --- a/src/mint-tools/taler-mint-reservemod.c +++ b/src/mint-tools/taler-mint-reservemod.c @@ -172,10 +172,12 @@ main (int argc, char *const *argv) error.source); goto cleanup; } + /* FIXME: maybe allow passing timestamp via command-line? */ ret = plugin->reserves_in_insert (plugin->cls, session, &reserve_pub, &add_value, + GNUNET_TIME_absolute_get (), jdetails); json_decref (jdetails); if (GNUNET_SYSERR == ret) diff --git a/src/mint/taler-mint-httpd_db.c b/src/mint/taler-mint-httpd_db.c index 512ed9a48..e4e8c59ec 100644 --- a/src/mint/taler-mint-httpd_db.c +++ b/src/mint/taler-mint-httpd_db.c @@ -1393,8 +1393,33 @@ TMH_DB_execute_admin_add_incoming (struct MHD_Connection *connection, struct GNUNET_TIME_Absolute execution_time, json_t *wire) { - GNUNET_break (0); // FIXME: #3851! - return MHD_NO; + struct TALER_MINTDB_Session *session; + int ret; + + if (NULL == (session = TMH_plugin->get_session (TMH_plugin->cls, + TMH_test_mode))) + { + GNUNET_break (0); + return TMH_RESPONSE_reply_internal_db_error (connection); + } + ret = TMH_plugin->reserves_in_insert (TMH_plugin->cls, + session, + reserve_pub, + amount, + execution_time, + wire); + if (GNUNET_SYSERR == ret) + { + GNUNET_break (0); + return TMH_RESPONSE_reply_internal_db_error (connection); + } + return TMH_RESPONSE_reply_json_pack (connection, + MHD_HTTP_OK, + "{s:s}", + "status", + (GNUNET_OK == ret) + ? "NEW" + : "DUP"); } diff --git a/src/mintdb/plugin_mintdb_postgres.c b/src/mintdb/plugin_mintdb_postgres.c index 836a8a8c8..81a372e4a 100644 --- a/src/mintdb/plugin_mintdb_postgres.c +++ b/src/mintdb/plugin_mintdb_postgres.c @@ -1284,6 +1284,7 @@ reserves_update (void *cls, * @param session the database connection handle * @param reserve_pub public key of the reserve * @param balance the amount that has to be added to the reserve + * @param execution_time when was the amount added * @param details bank transaction details justifying the increment, * must be unique for each incoming transaction * @return #GNUNET_OK upon success; #GNUNET_NO if the given @@ -1295,12 +1296,12 @@ postgres_reserves_in_insert (void *cls, struct TALER_MINTDB_Session *session, const struct TALER_ReservePublicKeyP *reserve_pub, const struct TALER_Amount *balance, + struct GNUNET_TIME_Absolute execution_time, const json_t *details) { PGresult *result; int reserve_exists; struct TALER_MINTDB_Reserve reserve; - struct GNUNET_TIME_Absolute now; struct GNUNET_TIME_Absolute expiry; if (GNUNET_OK != postgres_start (cls, @@ -1318,8 +1319,7 @@ postgres_reserves_in_insert (void *cls, GNUNET_break (0); goto rollback; } - now = GNUNET_TIME_absolute_get (); - expiry = GNUNET_TIME_absolute_add (now, + expiry = GNUNET_TIME_absolute_add (execution_time, TALER_IDLE_RESERVE_EXPIRATION_TIME); if (GNUNET_NO == reserve_exists) { @@ -1358,7 +1358,7 @@ postgres_reserves_in_insert (void *cls, TALER_PQ_query_param_auto_from_type (&reserve.pub), TALER_PQ_query_param_amount (balance), TALER_PQ_query_param_json (details), - TALER_PQ_query_param_absolute_time (&now), + TALER_PQ_query_param_absolute_time (&execution_time), TALER_PQ_query_param_end }; -- cgit v1.2.3