gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: finish implementation for #7808


From: gnunet
Subject: [taler-exchange] branch master updated: finish implementation for #7808
Date: Thu, 04 May 2023 17:36:46 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 1e887960 finish implementation for #7808
1e887960 is described below

commit 1e88796045ca0216b6c83234522423d1f9831fdd
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Thu May 4 17:36:43 2023 +0200

    finish implementation for #7808
---
 src/exchange/taler-exchange-httpd_deposits_get.c |  6 +--
 src/exchangedb/pg_aggregate.c                    | 69 ++++++++++++++----------
 src/include/taler_exchange_service.h             |  2 +
 src/include/taler_exchangedb_plugin.h            | 12 +----
 src/lib/exchange_api_deposits_get.c              | 26 +++++++--
 src/testing/testing_api_cmd_deposits_get.c       |  1 +
 6 files changed, 70 insertions(+), 46 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_deposits_get.c 
b/src/exchange/taler-exchange-httpd_deposits_get.c
index 10b4af51..818900c6 100644
--- a/src/exchange/taler-exchange-httpd_deposits_get.c
+++ b/src/exchange/taler-exchange-httpd_deposits_get.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2014-2017, 2021 Taler Systems SA
+  Copyright (C) 2014-2023 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero General Public License as published by the Free 
Software
@@ -347,9 +347,7 @@ handle_track_transaction_request (
     struct TALER_CoinDepositEventP rep = {
       .header.size = htons (sizeof (rep)),
       .header.type = htons (TALER_DBEVENT_EXCHANGE_DEPOSIT_STATUS_CHANGED),
-      .coin_pub = ctx->coin_pub,
-      .merchant_pub = ctx->merchant,
-      .h_wire = ctx->h_wire
+      .merchant_pub = ctx->merchant
     };
 
     ctx->eh = TEH_plugin->event_listen (
diff --git a/src/exchangedb/pg_aggregate.c b/src/exchangedb/pg_aggregate.c
index 6e94cbeb..76d0adec 100644
--- a/src/exchangedb/pg_aggregate.c
+++ b/src/exchangedb/pg_aggregate.c
@@ -22,6 +22,7 @@
 #include "taler_error_codes.h"
 #include "taler_dbevents.h"
 #include "taler_pq_lib.h"
+#include "pg_event_notify.h"
 #include "pg_aggregate.h"
 #include "pg_helper.h"
 
@@ -35,34 +36,12 @@ TEH_PG_aggregate (
 {
   struct PostgresClosure *pg = cls;
   struct GNUNET_TIME_Absolute now = {0};
-  struct GNUNET_PQ_QueryParam params[] = {
-    GNUNET_PQ_query_param_absolute_time (&now),
-    GNUNET_PQ_query_param_auto_from_type (merchant_pub),
-    GNUNET_PQ_query_param_auto_from_type (h_payto),
-    GNUNET_PQ_query_param_auto_from_type (wtid),
-    GNUNET_PQ_query_param_end
-  };
   uint64_t sum_deposit_value;
   uint64_t sum_deposit_frac;
   uint64_t sum_refund_value;
   uint64_t sum_refund_frac;
   uint64_t sum_fee_value;
   uint64_t sum_fee_frac;
-  struct GNUNET_PQ_ResultSpec rs[] = {
-    GNUNET_PQ_result_spec_uint64 ("sum_deposit_value",
-                                  &sum_deposit_value),
-    GNUNET_PQ_result_spec_uint64 ("sum_deposit_fraction",
-                                  &sum_deposit_frac),
-    GNUNET_PQ_result_spec_uint64 ("sum_refund_value",
-                                  &sum_refund_value),
-    GNUNET_PQ_result_spec_uint64 ("sum_refund_fraction",
-                                  &sum_refund_frac),
-    GNUNET_PQ_result_spec_uint64 ("sum_fee_value",
-                                  &sum_fee_value),
-    GNUNET_PQ_result_spec_uint64 ("sum_fee_fraction",
-                                  &sum_fee_frac),
-    GNUNET_PQ_result_spec_end
-  };
   enum GNUNET_DB_QueryStatus qs;
   struct TALER_Amount sum_deposit;
   struct TALER_Amount sum_refund;
@@ -71,8 +50,6 @@ TEH_PG_aggregate (
 
   now = GNUNET_TIME_absolute_round_down (GNUNET_TIME_absolute_get (),
                                          pg->aggregator_shift);
-
-  /* Used in #postgres_aggregate() */
   PREPARE (pg,
            "aggregate",
            "WITH dep AS (" /* restrict to our merchant and account and mark as 
done */
@@ -148,11 +125,35 @@ TEH_PG_aggregate (
            "   FULL OUTER JOIN ref ON (FALSE)"    /* We just want all sums */
            "   FULL OUTER JOIN fees ON (FALSE);");
 
+  {
+    struct GNUNET_PQ_QueryParam params[] = {
+      GNUNET_PQ_query_param_absolute_time (&now),
+      GNUNET_PQ_query_param_auto_from_type (merchant_pub),
+      GNUNET_PQ_query_param_auto_from_type (h_payto),
+      GNUNET_PQ_query_param_auto_from_type (wtid),
+      GNUNET_PQ_query_param_end
+    };
+    struct GNUNET_PQ_ResultSpec rs[] = {
+      GNUNET_PQ_result_spec_uint64 ("sum_deposit_value",
+                                    &sum_deposit_value),
+      GNUNET_PQ_result_spec_uint64 ("sum_deposit_fraction",
+                                    &sum_deposit_frac),
+      GNUNET_PQ_result_spec_uint64 ("sum_refund_value",
+                                    &sum_refund_value),
+      GNUNET_PQ_result_spec_uint64 ("sum_refund_fraction",
+                                    &sum_refund_frac),
+      GNUNET_PQ_result_spec_uint64 ("sum_fee_value",
+                                    &sum_fee_value),
+      GNUNET_PQ_result_spec_uint64 ("sum_fee_fraction",
+                                    &sum_fee_frac),
+      GNUNET_PQ_result_spec_end
+    };
 
-  qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
-                                                 "aggregate",
-                                                 params,
-                                                 rs);
+    qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
+                                                   "aggregate",
+                                                   params,
+                                                   rs);
+  }
   if (qs < 0)
   {
     GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
@@ -165,6 +166,18 @@ TEH_PG_aggregate (
                                           total));
     return qs;
   }
+  {
+    struct TALER_CoinDepositEventP rep = {
+      .header.size = htons (sizeof (rep)),
+      .header.type = htons (TALER_DBEVENT_EXCHANGE_DEPOSIT_STATUS_CHANGED),
+      .merchant_pub = *merchant_pub
+    };
+
+    TEH_PG_event_notify (pg,
+                         &rep.header,
+                         NULL,
+                         0);
+  }
   GNUNET_assert (GNUNET_OK ==
                  TALER_amount_set_zero (pg->currency,
                                         &sum_deposit));
diff --git a/src/include/taler_exchange_service.h 
b/src/include/taler_exchange_service.h
index fc5fb284..3769315e 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -3546,6 +3546,7 @@ typedef void
  * @param h_wire hash of merchant's wire transfer details
  * @param h_contract_terms hash of the proposal data
  * @param coin_pub public key of the coin
+ * @param timeout timeout to use for long-polling, 0 for no long polling
  * @param cb function to call with the result
  * @param cb_cls closure for @a cb
  * @return handle to abort request
@@ -3557,6 +3558,7 @@ TALER_EXCHANGE_deposits_get (
   const struct TALER_MerchantWireHashP *h_wire,
   const struct TALER_PrivateContractHashP *h_contract_terms,
   const struct TALER_CoinSpendPublicKeyP *coin_pub,
+  struct GNUNET_TIME_Relative timeout,
   TALER_EXCHANGE_DepositGetCallback cb,
   void *cb_cls);
 
diff --git a/src/include/taler_exchangedb_plugin.h 
b/src/include/taler_exchangedb_plugin.h
index d55f9642..3a6ba651 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -160,20 +160,10 @@ struct TALER_CoinDepositEventP
   struct GNUNET_DB_EventHeaderP header;
 
   /**
-   * The coin's public key.
-   */
-  struct TALER_CoinSpendPublicKeyP coin_pub;
-
-  /**
-   * The Merchant's public key.
+   * Public key of the merchant.
    */
   struct TALER_MerchantPublicKeyP merchant_pub;
 
-  /**
-   * Hash over the wiring information of the merchant.
-   */
-  struct TALER_MerchantWireHashP h_wire;
-
 };
 
 /**
diff --git a/src/lib/exchange_api_deposits_get.c 
b/src/lib/exchange_api_deposits_get.c
index bd5f2f65..9ec25e45 100644
--- a/src/lib/exchange_api_deposits_get.c
+++ b/src/lib/exchange_api_deposits_get.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2014-2021 Taler Systems SA
+  Copyright (C) 2014-2023 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU General Public License as published by the Free Software
@@ -260,6 +260,7 @@ TALER_EXCHANGE_deposits_get (
   const struct TALER_MerchantWireHashP *h_wire,
   const struct TALER_PrivateContractHashP *h_contract_terms,
   const struct TALER_CoinSpendPublicKeyP *coin_pub,
+  struct GNUNET_TIME_Relative timeout,
   TALER_EXCHANGE_DepositGetCallback cb,
   void *cb_cls)
 {
@@ -293,6 +294,7 @@ TALER_EXCHANGE_deposits_get (
     char msig_str[sizeof (struct TALER_MerchantSignatureP) * 2];
     char chash_str[sizeof (struct TALER_PrivateContractHashP) * 2];
     char whash_str[sizeof (struct TALER_MerchantWireHashP) * 2];
+    char timeout_str[24];
     char *end;
 
     end = GNUNET_STRINGS_data_to_string (h_wire,
@@ -320,15 +322,33 @@ TALER_EXCHANGE_deposits_get (
                                          msig_str,
                                          sizeof (msig_str));
     *end = '\0';
+    if (GNUNET_TIME_relative_is_zero (timeout))
+    {
+      timeout_str[0] = '\0';
+    }
+    else
+    {
+      GNUNET_snprintf (
+        timeout_str,
+        sizeof (timeout_str),
+        "%llu",
+        (unsigned long long) (
+          timeout.rel_value_us
+          / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us));
+    }
 
     GNUNET_snprintf (arg_str,
                      sizeof (arg_str),
-                     "/deposits/%s/%s/%s/%s?merchant_sig=%s",
+                     "/deposits/%s/%s/%s/%s?merchant_sig=%s%s%s",
                      whash_str,
                      mpub_str,
                      chash_str,
                      cpub_str,
-                     msig_str);
+                     msig_str,
+                     GNUNET_TIME_relative_is_zero (timeout)
+                     ? ""
+                     : "&timeout_ms=",
+                     timeout_str);
   }
 
   dwh = GNUNET_new (struct TALER_EXCHANGE_DepositGetHandle);
diff --git a/src/testing/testing_api_cmd_deposits_get.c 
b/src/testing/testing_api_cmd_deposits_get.c
index 8f797089..c39d7f6c 100644
--- a/src/testing/testing_api_cmd_deposits_get.c
+++ b/src/testing/testing_api_cmd_deposits_get.c
@@ -281,6 +281,7 @@ track_transaction_run (void *cls,
                                           &h_wire_details,
                                           &h_contract_terms,
                                           &coin_pub,
+                                          GNUNET_TIME_UNIT_ZERO,
                                           &deposit_wtid_cb,
                                           tts);
   GNUNET_assert (NULL != tts->tth);

-- 
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]