summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-07-01 00:01:21 +0200
committerChristian Grothoff <christian@grothoff.org>2015-07-01 00:01:21 +0200
commitf948a10f712ebd6f52182dc4bf71deee1c45b35f (patch)
tree4ef609067c513547585f74bbd1d310cecae36e79
parent253d220ea54d45557f33dd3a7affef0e79593218 (diff)
downloadexchange-f948a10f712ebd6f52182dc4bf71deee1c45b35f.tar.gz
exchange-f948a10f712ebd6f52182dc4bf71deee1c45b35f.tar.bz2
exchange-f948a10f712ebd6f52182dc4bf71deee1c45b35f.zip
implementing #3851
-rw-r--r--src/include/taler_mintdb_plugin.h2
-rw-r--r--src/mint-tools/taler-mint-reservemod.c2
-rw-r--r--src/mint/taler-mint-httpd_db.c29
-rw-r--r--src/mintdb/plugin_mintdb_postgres.c8
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
};