gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] 94/152: modify TALER_EXCHANGE_deposits_get() API to com


From: gnunet
Subject: [taler-exchange] 94/152: modify TALER_EXCHANGE_deposits_get() API to combine returned arguments into a struct (simplifies merchant later)
Date: Sun, 05 Jul 2020 20:47:30 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

commit cde71b7fe74c2a5abb32bf07d40a112e9d7b1135
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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]