gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: integrate p2p handlers with main


From: gnunet
Subject: [taler-exchange] branch master updated: integrate p2p handlers with main dispatcher
Date: Sat, 23 Apr 2022 19:45:36 +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 a1825d38 integrate p2p handlers with main dispatcher
a1825d38 is described below

commit a1825d38b355eb5b36d956eb470a68f071d25a6a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Apr 23 19:45:33 2022 +0200

    integrate p2p handlers with main dispatcher
---
 src/exchange/taler-exchange-httpd.c                | 148 +++++++++++++++++++--
 src/exchange/taler-exchange-httpd_reserves_purse.c |   3 +-
 src/exchange/taler-exchange-httpd_reserves_purse.h |   6 +-
 3 files changed, 139 insertions(+), 18 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd.c 
b/src/exchange/taler-exchange-httpd.c
index fb312959..48c0e534 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -44,12 +44,17 @@
 #include "taler-exchange-httpd_melt.h"
 #include "taler-exchange-httpd_metrics.h"
 #include "taler-exchange-httpd_mhd.h"
+#include "taler-exchange-httpd_purses_create.h"
+#include "taler-exchange-httpd_purses_deposit.h"
+#include "taler-exchange-httpd_purses_get.h"
+#include "taler-exchange-httpd_purses_merge.h"
 #include "taler-exchange-httpd_recoup.h"
 #include "taler-exchange-httpd_recoup-refresh.h"
 #include "taler-exchange-httpd_refreshes_reveal.h"
 #include "taler-exchange-httpd_refund.h"
 #include "taler-exchange-httpd_reserves_get.h"
 #include "taler-exchange-httpd_reserves_history.h"
+#include "taler-exchange-httpd_reserves_purse.h"
 #include "taler-exchange-httpd_reserves_status.h"
 #include "taler-exchange-httpd_terms.h"
 #include "taler-exchange-httpd_transfers_get.h"
@@ -60,6 +65,12 @@
 #include "taler_extensions.h"
 #include <gnunet/gnunet_mhd_compat.h>
 
+/**
+ * Macro to enable P2P handlers. ON for debugging,
+ * FIXME: set to OFF for 0.9.0 release as the feature is not stable!
+ */
+#define WITH_P2P 1
+
 /**
  * Backlog for listen operation on unix domain sockets.
  */
@@ -215,19 +226,6 @@ typedef MHD_RESULT
                  const struct TALER_CoinSpendPublicKeyP *coin_pub,
                  const json_t *root);
 
-/**
- * Signature of functions that handle operations on reserves.
- *
- * @param rc request context
- * @param reserve_pub the public key of the reserve
- * @param root uploaded JSON data
- * @return MHD result code
- */
-typedef MHD_RESULT
-(*ReserveOpHandler)(struct TEH_RequestContext *rc,
-                    const struct TALER_ReservePublicKeyP *reserve_pub,
-                    const json_t *root);
-
 
 /**
  * Generate a 404 "not found" reply on @a connection with
@@ -324,6 +322,20 @@ handle_post_coins (struct TEH_RequestContext *rc,
 }
 
 
+/**
+ * Signature of functions that handle operations on reserves.
+ *
+ * @param rc request context
+ * @param reserve_pub the public key of the reserve
+ * @param root uploaded JSON data
+ * @return MHD result code
+ */
+typedef MHD_RESULT
+(*ReserveOpHandler)(struct TEH_RequestContext *rc,
+                    const struct TALER_ReservePublicKeyP *reserve_pub,
+                    const json_t *root);
+
+
 /**
  * Handle a "/reserves/$RESERVE_PUB/$OP" POST request.  Parses the 
"reserve_pub"
  * EdDSA key of the reserve and demultiplexes based on $OP.
@@ -364,6 +376,12 @@ handle_post_reserves (struct TEH_RequestContext *rc,
       .op = "history",
       .handler = &TEH_handler_reserves_history
     },
+#if WITH_P2P
+    {
+      .op = "purse",
+      .handler = &TEH_handler_reserves_purse
+    },
+#endif
     {
       .op = NULL,
       .handler = NULL
@@ -393,6 +411,91 @@ handle_post_reserves (struct TEH_RequestContext *rc,
 }
 
 
+/**
+ * Signature of functions that handle operations on purses.
+ *
+ * @param rc request context
+ * @param purse_pub the public key of the purse
+ * @param root uploaded JSON data
+ * @return MHD result code
+ */
+typedef MHD_RESULT
+(*PurseOpHandler)(struct MHD_Connection *connection,
+                  const struct TALER_PurseContractPublicKeyP *purse_pub,
+                  const json_t *root);
+
+
+/**
+ * Handle a "/purses/$RESERVE_PUB/$OP" POST request.  Parses the "purse_pub"
+ * EdDSA key of the purse and demultiplexes based on $OP.
+ *
+ * @param rc request context
+ * @param root uploaded JSON data
+ * @param args array of additional options
+ * @return MHD result code
+ */
+static MHD_RESULT
+handle_post_purses (struct TEH_RequestContext *rc,
+                    const json_t *root,
+                    const char *const args[2])
+{
+  struct TALER_PurseContractPublicKeyP purse_pub;
+  static const struct
+  {
+    /**
+     * Name of the operation (args[1])
+     */
+    const char *op;
+
+    /**
+     * Function to call to perform the operation.
+     */
+    PurseOpHandler handler;
+
+  } h[] = {
+#if WITH_P2P
+    {
+      .op = "create",
+      .handler = &TEH_handler_purses_create
+    },
+    {
+      .op = "deposit",
+      .handler = &TEH_handler_purses_deposit
+    },
+    {
+      .op = "merge",
+      .handler = &TEH_handler_purses_merge
+    },
+#endif
+    {
+      .op = NULL,
+      .handler = NULL
+    },
+  };
+
+  if (GNUNET_OK !=
+      GNUNET_STRINGS_string_to_data (args[0],
+                                     strlen (args[0]),
+                                     &purse_pub,
+                                     sizeof (purse_pub)))
+  {
+    GNUNET_break_op (0);
+    return TALER_MHD_reply_with_error (rc->connection,
+                                       MHD_HTTP_BAD_REQUEST,
+                                       
TALER_EC_EXCHANGE_GENERIC_PURSE_PUB_MALFORMED,
+                                       args[0]);
+  }
+  for (unsigned int i = 0; NULL != h[i].op; i++)
+    if (0 == strcmp (h[i].op,
+                     args[1]))
+      return h[i].handler (rc->connection,
+                           &purse_pub,
+                           root);
+  return r404 (rc->connection,
+               args[1]);
+}
+
+
 /**
  * Increments our request counter and checks if this
  * process should commit suicide.
@@ -1068,13 +1171,29 @@ handle_mhd_request (void *cls,
       .handler.get = &TEH_handler_deposits_get,
       .nargs = 4
     },
-    /* Getting purse contracts */
+    /* Operating on purses */
+    {
+      .url = "purses",
+      .method = MHD_HTTP_METHOD_POST,
+      .handler.post = &handle_post_purses,
+      .nargs = 2 // ??
+    },
+#if WITH_P2P
+    /* Getting purse status */
+    {
+      .url = "purses",
+      .method = MHD_HTTP_METHOD_GET,
+      .handler.get = &TEH_handler_purses_get,
+      .nargs = 2
+    },
+    /* Getting contracts */
     {
       .url = "contracts",
       .method = MHD_HTTP_METHOD_GET,
       .handler.get = &TEH_handler_contracts_get,
       .nargs = 1
     },
+#endif
     /* KYC endpoints */
     {
       .url = "kyc-check",
@@ -1954,6 +2073,7 @@ do_shutdown (void *cls)
   mhd = TALER_MHD_daemon_stop ();
   TEH_resume_keys_requests (true);
   TEH_reserves_get_cleanup ();
+  TEH_purses_get_cleanup ();
   TEH_kyc_check_cleanup ();
   TEH_kyc_proof_cleanup ();
   if (NULL != mhd)
diff --git a/src/exchange/taler-exchange-httpd_reserves_purse.c 
b/src/exchange/taler-exchange-httpd_reserves_purse.c
index 1d665879..c38115a9 100644
--- a/src/exchange/taler-exchange-httpd_reserves_purse.c
+++ b/src/exchange/taler-exchange-httpd_reserves_purse.c
@@ -345,10 +345,11 @@ purse_transaction (void *cls,
 
 MHD_RESULT
 TEH_handler_reserves_purse (
-  struct MHD_Connection *connection,
+  struct TEH_RequestContext *rc,
   const struct TALER_ReservePublicKeyP *reserve_pub,
   const json_t *root)
 {
+  struct MHD_Connection *connection = rc->connection;
   struct ReservePurseContext rpc = {
     .reserve_pub = reserve_pub,
     .exchange_timestamp = GNUNET_TIME_timestamp_get ()
diff --git a/src/exchange/taler-exchange-httpd_reserves_purse.h 
b/src/exchange/taler-exchange-httpd_reserves_purse.h
index 0704d1d3..6d899a91 100644
--- a/src/exchange/taler-exchange-httpd_reserves_purse.h
+++ b/src/exchange/taler-exchange-httpd_reserves_purse.h
@@ -27,19 +27,19 @@
 
 
 /**
- * Handle a "/purses/$PURSE_PUB/create" request.  Parses the JSON, and, if
+ * Handle a "/reserves/$RESERVE_PUB/purse" request.  Parses the JSON, and, if
  * successful, passes the JSON data to #create_transaction() to further check
  * the details of the operation specified.  If everything checks out, this
  * will ultimately lead to the "purses create" being executed, or rejected.
  *
- * @param connection the MHD connection to handle
+ * @param rc request context
  * @param purse_pub public key of the purse
  * @param root uploaded JSON data
  * @return MHD result code
  */
 MHD_RESULT
 TEH_handler_reserves_purse (
-  struct MHD_Connection *connection,
+  struct TEH_RequestContext *rc,
   const struct TALER_ReservePublicKeyP *reserve_pub,
   const json_t *root);
 

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