summaryrefslogtreecommitdiff
path: root/src/mint/taler-mint-httpd_db.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-12-09 15:36:34 +0100
committerChristian Grothoff <christian@grothoff.org>2015-12-09 15:36:34 +0100
commitc20f955ae43a57208b40d9a7978a7f089592ad60 (patch)
tree93f142c11461c77654f76fb427d8ea5bbb57ef0d /src/mint/taler-mint-httpd_db.c
parentc5204d3a213fb70d10ec873fc869013390a5435f (diff)
downloadexchange-c20f955ae43a57208b40d9a7978a7f089592ad60.tar.gz
exchange-c20f955ae43a57208b40d9a7978a7f089592ad60.tar.bz2
exchange-c20f955ae43a57208b40d9a7978a7f089592ad60.zip
towards /deposit/wtid handling (more skeleton work)
Diffstat (limited to 'src/mint/taler-mint-httpd_db.c')
-rw-r--r--src/mint/taler-mint-httpd_db.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/mint/taler-mint-httpd_db.c b/src/mint/taler-mint-httpd_db.c
index 2d8af2759..7f0fdb0a9 100644
--- a/src/mint/taler-mint-httpd_db.c
+++ b/src/mint/taler-mint-httpd_db.c
@@ -1551,4 +1551,97 @@ TMH_DB_execute_admin_add_incoming (struct MHD_Connection *connection,
}
+/**
+ * Closure for #handle_wtid_data.
+ */
+struct DepositWtidContext
+{
+
+ /**
+ * Where should we send the reply?
+ */
+ struct MHD_Connection *connection;
+
+ /**
+ * MHD result code to return.
+ */
+ int res;
+};
+
+
+/**
+ * Function called with the results of the lookup of the
+ * wire transfer identifier information.
+ *
+ * @param cls our context for transmission
+ * @param wtid base32-encoded wire transfer identifier, NULL
+ * if the transaction was not yet done
+ * @param execution_time when was the transaction done, or
+ * when we expect it to be done (if @a wtid was NULL);
+ * #GNUNET_TIME_UNIT_FOREVER_ABS if the /deposit is unknown
+ * to the mint
+ */
+static void
+handle_wtid_data (void *cls,
+ const char *wtid,
+ struct GNUNET_TIME_Absolute execution_time)
+{
+ struct DepositWtidContext *ctx = cls;
+
+ if (NULL == wtid)
+ {
+ if (GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us ==
+ execution_time.abs_value_us)
+ return TMH_RESPONSE_reply_deposit_unknown (ctx->connection);
+ else
+ return TMH_RESPONSE_reply_deposit_pending (ctx->connection);
+ }
+ else
+ {
+ return TMH_RESPONSE_reply_deposit_wtid (ctx->connection);
+ }
+}
+
+
+/**
+ * Execute a "/deposit/wtid". Returns the transfer information
+ * associated with the given deposit.
+ *
+ * @param connection the MHD connection to handle
+ * @param h_contract hash of the contract
+ * @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
+ * @param transaction_id transaction ID of the merchant
+ * @return MHD result code
+ */
+int
+TMH_DB_execute_deposit_wtid (struct MHD_Connection *connection,
+ const struct GNUNET_HashCode *h_contract,
+ const struct GNUNET_HashCode *h_wire,
+ const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ const struct TALER_MerchantPublicKeyP *merchant_pub,
+ uint64_t transaction_id)
+{
+ int ret;
+ struct DepositWtidContext ctx;
+
+ ctx.connection = connection;
+ ret = TMH_plugin->wire_lookup_deposit_wtid (TMH_plugin->cls,
+ h_contract,
+ h_wire,
+ coin_pub,
+ merchant_pub,
+ transaction_id,
+ &handle_wtid_data,
+ connection);
+ if (GNUNET_SYSERR == ret)
+ {
+ GNUNET_break (0);
+ return TMH_RESPONSE_reply_internal_db_error (connection);
+ }
+ return ctx.res;
+}
+
+
/* end of taler-mint-httpd_db.c */