[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-exchange] 39/152: modify TALER_EXCHANGE_deposits_get() API to com
From: |
gnunet |
Subject: |
[taler-exchange] 39/152: modify TALER_EXCHANGE_deposits_get() API to combine returned arguments into a struct (simplifies merchant later) |
Date: |
Sun, 05 Jul 2020 20:46:35 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository exchange.
commit 3910cb74158fcd938c70d0c6ecafdef7e41d4b1a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun May 3 20:07:49 2020 +0200
modify TALER_EXCHANGE_deposits_get() API to combine returned arguments into
a struct (simplifies merchant later)
---
src/include/taler_exchange_service.h | 52 +++++++++++++++-----
src/lib/exchange_api_deposits_get.c | 77 +++++++++++++++++-------------
src/testing/testing_api_cmd_deposits_get.c | 21 ++------
3 files changed, 89 insertions(+), 61 deletions(-)
diff --git a/src/include/taler_exchange_service.h
b/src/include/taler_exchange_service.h
index 307a76de..32012304 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -1682,27 +1682,57 @@ TALER_EXCHANGE_transfers_get_cancel (
struct TALER_EXCHANGE_DepositGetHandle;
+/**
+ * Data returned for a successful GET /deposits/ request. Note that
+ * most fields are only set if the status is #MHD_HTTP_OK. Only
+ * the @e execution_time is available if the status is #MHD_HTTP_ACCEPTED.
+ */
+struct TALER_EXCHANGE_DepositData
+{
+
+ /**
+ * exchange key used to sign, NULL if exchange did not
+ * yet execute the transaction
+ */
+ const struct TALER_ExchangePublicKeyP *exchange_pub;
+
+ /**
+ * signature from the exchange over the deposit data, NULL if exchange did
not
+ * yet execute the transaction
+ */
+ const struct TALER_ExchangeSignatureP *exchange_sig;
+
+ /**
+ * wire transfer identifier used by the exchange, NULL if exchange did not
+ * yet execute the transaction
+ */
+ const struct TALER_WireTransferIdentifierRawP *wtid;
+
+ /**
+ * actual or planned execution time for the wire transfer
+ */
+ struct GNUNET_TIME_Absolute execution_time;
+
+ /**
+ * contribution to the total amount by this coin, NULL if exchange did not
+ * yet execute the transaction
+ */
+ const struct TALER_Amount *coin_contribution;
+};
+
+
/**
* Function called with detailed wire transfer data.
*
* @param cls closure
* @param hr HTTP response data
- * @param exchange_pub exchange key used to sign @a json, or NULL
- * @param wtid wire transfer identifier used by the exchange, NULL if exchange
did not
- * yet execute the transaction
- * @param execution_time actual or planned execution time for the wire transfer
- * @param coin_contribution contribution to the total amount by this coin (can
be NULL)
- * // FIXME: also return the exchange signature
- * // FIXME: combine all of the above (except cls,hr) into a 'struct'! =>
DepositData
+ * @param dd details about the deposit (NULL on errors)
*/
typedef void
(*TALER_EXCHANGE_DepositGetCallback)(
void *cls,
const struct TALER_EXCHANGE_HttpResponse *hr,
- const struct TALER_ExchangePublicKeyP *exchange_pub,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- struct GNUNET_TIME_Absolute execution_time,
- const struct TALER_Amount *coin_contribution);
+ const struct TALER_EXCHANGE_DepositData *dd);
/**
diff --git a/src/lib/exchange_api_deposits_get.c
b/src/lib/exchange_api_deposits_get.c
index aecd8824..6a2ad5c3 100644
--- a/src/lib/exchange_api_deposits_get.c
+++ b/src/lib/exchange_api_deposits_get.c
@@ -33,7 +33,7 @@
/**
- * @brief A Deposit Wtid Handle
+ * @brief A Deposit Get Handle
*/
struct TALER_EXCHANGE_DepositGetHandle
{
@@ -84,31 +84,19 @@ struct TALER_EXCHANGE_DepositGetHandle
*
* @param dwh deposit wtid handle
* @param json json reply with the signature
- * @param[out] exchange_pub set to the exchange's public key
+ * @param exchange_pub the exchange's public key
+ * @param exchange_sig the exchange's signature
* @return #GNUNET_OK if the signature is valid, #GNUNET_SYSERR if not
*/
static int
verify_deposit_wtid_signature_ok (
const struct TALER_EXCHANGE_DepositGetHandle *dwh,
const json_t *json,
- struct TALER_ExchangePublicKeyP *exchange_pub)
+ const struct TALER_ExchangePublicKeyP *exchange_pub,
+ const struct TALER_ExchangeSignatureP *exchange_sig)
{
- struct TALER_ExchangeSignatureP exchange_sig;
const struct TALER_EXCHANGE_Keys *key_state;
- struct GNUNET_JSON_Specification spec[] = {
- GNUNET_JSON_spec_fixed_auto ("exchange_sig", &exchange_sig),
- GNUNET_JSON_spec_fixed_auto ("exchange_pub", exchange_pub),
- GNUNET_JSON_spec_end ()
- };
- if (GNUNET_OK !=
- GNUNET_JSON_parse (json,
- spec,
- NULL, NULL))
- {
- GNUNET_break_op (0);
- return GNUNET_SYSERR;
- }
key_state = TALER_EXCHANGE_get_keys (dwh->exchange);
if (GNUNET_OK !=
TALER_EXCHANGE_test_signing_key (key_state,
@@ -120,7 +108,7 @@ verify_deposit_wtid_signature_ok (
if (GNUNET_OK !=
GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_EXCHANGE_CONFIRM_WIRE,
&dwh->depconf,
- &exchange_sig.eddsa_signature,
+ &exchange_sig->eddsa_signature,
&exchange_pub->eddsa_pub))
{
GNUNET_break_op (0);
@@ -144,12 +132,6 @@ handle_deposit_wtid_finished (void *cls,
const void *response)
{
struct TALER_EXCHANGE_DepositGetHandle *dwh = cls;
- const struct TALER_WireTransferIdentifierRawP *wtid = NULL;
- struct GNUNET_TIME_Absolute execution_time = GNUNET_TIME_UNIT_FOREVER_ABS;
- const struct TALER_Amount *coin_contribution = NULL;
- struct TALER_Amount coin_contribution_s;
- struct TALER_ExchangePublicKeyP exchange_pub;
- struct TALER_ExchangePublicKeyP *ep = NULL;
const json_t *j = response;
struct TALER_EXCHANGE_HttpResponse hr = {
.reply = j,
@@ -164,10 +146,16 @@ handle_deposit_wtid_finished (void *cls,
break;
case MHD_HTTP_OK:
{
+ struct GNUNET_TIME_Absolute execution_time;
+ struct TALER_Amount coin_contribution;
+ struct TALER_ExchangePublicKeyP exchange_pub;
+ struct TALER_ExchangeSignatureP exchange_sig;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("wtid", &dwh->depconf.wtid),
GNUNET_JSON_spec_absolute_time ("execution_time", &execution_time),
- TALER_JSON_spec_amount ("coin_contribution", &coin_contribution_s),
+ TALER_JSON_spec_amount ("coin_contribution", &coin_contribution),
+ GNUNET_JSON_spec_fixed_auto ("exchange_sig", &exchange_sig),
+ GNUNET_JSON_spec_fixed_auto ("exchange_pub", &exchange_pub),
GNUNET_JSON_spec_end ()
};
@@ -181,15 +169,14 @@ handle_deposit_wtid_finished (void *cls,
hr.ec = TALER_EC_DEPOSITS_INVALID_BODY_BY_EXCHANGE;
break;
}
- wtid = &dwh->depconf.wtid;
dwh->depconf.execution_time = GNUNET_TIME_absolute_hton (execution_time);
TALER_amount_hton (&dwh->depconf.coin_contribution,
- &coin_contribution_s);
- coin_contribution = &coin_contribution_s;
+ &coin_contribution);
if (GNUNET_OK !=
verify_deposit_wtid_signature_ok (dwh,
j,
- &exchange_pub))
+ &exchange_pub,
+ &exchange_sig))
{
GNUNET_break_op (0);
hr.http_status = 0;
@@ -197,13 +184,26 @@ handle_deposit_wtid_finished (void *cls,
}
else
{
- ep = &exchange_pub;
+ struct TALER_EXCHANGE_DepositData dd = {
+ .exchange_pub = &exchange_pub,
+ .exchange_sig = &exchange_sig,
+ .wtid = &dwh->depconf.wtid,
+ .execution_time = execution_time,
+ .coin_contribution = &coin_contribution
+ };
+
+ dwh->cb (dwh->cb_cls,
+ &hr,
+ &dd);
+ TALER_EXCHANGE_deposits_get_cancel (dwh);
+ return;
}
}
break;
case MHD_HTTP_ACCEPTED:
{
/* Transaction known, but not executed yet */
+ struct GNUNET_TIME_Absolute execution_time;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_absolute_time ("execution_time", &execution_time),
GNUNET_JSON_spec_end ()
@@ -219,6 +219,18 @@ handle_deposit_wtid_finished (void *cls,
hr.ec = TALER_EC_DEPOSITS_INVALID_BODY_BY_EXCHANGE;
break;
}
+ else
+ {
+ struct TALER_EXCHANGE_DepositData dd = {
+ .execution_time = execution_time
+ };
+
+ dwh->cb (dwh->cb_cls,
+ &hr,
+ &dd);
+ TALER_EXCHANGE_deposits_get_cancel (dwh);
+ return;
+ }
}
break;
case MHD_HTTP_BAD_REQUEST:
@@ -259,10 +271,7 @@ handle_deposit_wtid_finished (void *cls,
}
dwh->cb (dwh->cb_cls,
&hr,
- ep,
- wtid,
- execution_time,
- coin_contribution);
+ NULL);
TALER_EXCHANGE_deposits_get_cancel (dwh);
}
diff --git a/src/testing/testing_api_cmd_deposits_get.c
b/src/testing/testing_api_cmd_deposits_get.c
index fd02e75b..6f014011 100644
--- a/src/testing/testing_api_cmd_deposits_get.c
+++ b/src/testing/testing_api_cmd_deposits_get.c
@@ -81,29 +81,17 @@ struct TrackTransactionState
*
* @param cls closure.
* @param hr HTTP response details
- * @param exchange_pub public key of the exchange
- * @param wtid wire transfer identifier, NULL if exchange did not
- * execute the transaction yet.
- * @param execution_time actual or planned execution time for the
- * wire transfer.
- * @param coin_contribution contribution to the total amount of
- * the deposited coin (can be NULL).
+ * @param dd data about the wire transfer associated with the deposit
*/
static void
deposit_wtid_cb (void *cls,
const struct TALER_EXCHANGE_HttpResponse *hr,
- const struct TALER_ExchangePublicKeyP *exchange_pub,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- struct GNUNET_TIME_Absolute execution_time,
- const struct TALER_Amount *coin_contribution)
+ const struct TALER_EXCHANGE_DepositData *dd)
{
struct TrackTransactionState *tts = cls;
struct TALER_TESTING_Interpreter *is = tts->is;
struct TALER_TESTING_Command *cmd = &is->commands[is->ip];
- (void) coin_contribution;
- (void) exchange_pub;
- (void) execution_time;
tts->tth = NULL;
if (tts->expected_response_code != hr->http_status)
{
@@ -123,7 +111,8 @@ deposit_wtid_cb (void *cls,
switch (hr->http_status)
{
case MHD_HTTP_OK:
- tts->wtid = *wtid;
+ GNUNET_assert (NULL != dd->wtid);
+ tts->wtid = *dd->wtid;
if (NULL != tts->bank_transfer_reference)
{
const struct TALER_TESTING_Command *bank_transfer_cmd;
@@ -151,7 +140,7 @@ deposit_wtid_cb (void *cls,
}
/* Compare that expected and gotten subjects match. */
- if (0 != GNUNET_memcmp (wtid,
+ if (0 != GNUNET_memcmp (dd->wtid,
wtid_want))
{
GNUNET_break (0);
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-exchange] 25/152: return fee as well, (continued)
- [taler-exchange] 25/152: return fee as well, gnunet, 2020/07/05
- [taler-exchange] 20/152: make tests skip until we have a wallet to regen the DB, gnunet, 2020/07/05
- [taler-exchange] 22/152: modify TALER_EXCHANGE_deposits_get() API to combine returned arguments into a struct (simplifies merchant later), gnunet, 2020/07/05
- [taler-exchange] 24/152: combine sections, gnunet, 2020/07/05
- [taler-exchange] 27/152: sleep to ensure aggregator has work, gnunet, 2020/07/05
- [taler-exchange] 28/152: update, gnunet, 2020/07/05
- [taler-exchange] 40/152: modify TALER_EXCHANGE_deposits_get() API to avoid NULL pointers and need for deep copies, gnunet, 2020/07/05
- [taler-exchange] 35/152: implement #6181, gnunet, 2020/07/05
- [taler-exchange] 37/152: make tests skip until we have a wallet to regen the DB, gnunet, 2020/07/05
- [taler-exchange] 38/152: update exchange API to return struct instead of lots of individual args for TALER_EXCHANGE_transfers_get() -- simplifies merchant later, gnunet, 2020/07/05
- [taler-exchange] 39/152: modify TALER_EXCHANGE_deposits_get() API to combine returned arguments into a struct (simplifies merchant later),
gnunet <=
- [taler-exchange] 26/152: towards changing timestamp in deposit confirmation (tests failing), gnunet, 2020/07/05
- [taler-exchange] 29/152: merge, gnunet, 2020/07/05
- [taler-exchange] 30/152: use unregister, gnunet, 2020/07/05
- [taler-exchange] 32/152: v8 bump, gnunet, 2020/07/05
- [taler-exchange] 46/152: modify TALER_EXCHANGE_deposits_get() API to avoid NULL pointers and need for deep copies, gnunet, 2020/07/05
- [taler-exchange] 42/152: return fee as well, gnunet, 2020/07/05
- [taler-exchange] 44/152: sleep to ensure aggregator has work, gnunet, 2020/07/05
- [taler-exchange] 47/152: return fee as well, gnunet, 2020/07/05
- [taler-exchange] 48/152: update, gnunet, 2020/07/05
- [taler-exchange] 43/152: towards changing timestamp in deposit confirmation (tests failing), gnunet, 2020/07/05