gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated (c09cd4c -> 4558050)


From: gnunet
Subject: [taler-merchant] branch master updated (c09cd4c -> 4558050)
Date: Tue, 13 Oct 2020 23:35:05 +0200

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

grothoff pushed a change to branch master
in repository merchant.

    from c09cd4c  Doxygen fixes
     new aba023e  fix format string bug
     new 24dfb75  implement #6545
     new 4558050  Merge branch 'master' of git+ssh://git.taler.net/merchant

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 src/include/taler_merchant_service.h          |  10 +
 src/lib/merchant_api_common.c                 | 284 +++++++++++---------------
 src/merchant-tools/taler-merchant-benchmark.c |   2 +-
 3 files changed, 130 insertions(+), 166 deletions(-)

diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index d68a6b1..e34226a 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -171,6 +171,11 @@ struct TALER_MERCHANT_PayUriData
    * to pay. May be NULL.
    */
   char *ssid;
+
+  /**
+   * true if the URI used taler+http.
+   */
+  bool use_http;
 };
 
 
@@ -221,6 +226,11 @@ struct TALER_MERCHANT_RefundUriData
    * to pay. May be NULL.
    */
   char *ssid;
+
+  /**
+   * true if the URI used taler+http.
+   */
+  bool use_http;
 };
 
 
diff --git a/src/lib/merchant_api_common.c b/src/lib/merchant_api_common.c
index 255b498..031e0f1 100644
--- a/src/lib/merchant_api_common.c
+++ b/src/lib/merchant_api_common.c
@@ -24,6 +24,7 @@
 #include <jansson.h>
 #include <microhttpd.h> /* just for HTTP status codes */
 #include <gnunet/gnunet_util_lib.h>
+#include <gnunet/gnunet_uri_lib.h>
 #include <gnunet/gnunet_curl_lib.h>
 #include "taler_merchant_service.h"
 #include <taler/taler_json_lib.h>
@@ -132,187 +133,130 @@ TALER_MERCHANT_baseurl_add_instance (const char 
*base_url,
 }
 
 
-/**
- * Parses the URI scheme and action of a URI. Ensures that the scheme is either
- * 'taler' or 'taler+http'.
- *
- * @param uri the uri to parse.
- * @param[out] action the action the URI is indicating.
- * @param[out] rest the substring of the URI following the action.
- * @return #GNUNET_SYSERR if the URI is malformed, #GNUNET_OK otherwise.
- */
-static int
-parse_taler_uri_scheme_action (const char *uri,
-                               char **action,
-                               char **rest)
+int
+TALER_MERCHANT_parse_pay_uri (const char *pay_uri,
+                              struct TALER_MERCHANT_PayUriData *parse_data)
 {
-  char *scheme = GNUNET_strdup (uri);
-  /* Check that the uri starts with "taler://pay" or "taler+http://pay"; and
-     then remove it */
-  char *path = strchr (scheme, ':');
+  char *cp = GNUNET_strdup (pay_uri);
+  struct GNUNET_Uri u;
 
-  if ( (NULL == path) ||
-       (strlen (path) < 3) )
+  if (0 !=
+      GNUNET_uri_parse (&u,
+                        cp))
   {
-    GNUNET_free (scheme);
+    GNUNET_free (cp);
     GNUNET_break_op (0);
     return GNUNET_SYSERR;
   }
-  path += 3; /* make path point to 'pay' */
-
-  {
-    char path_begin = *path;
-
-    *path = '\0';
-    if ((0 != strcmp ("taler://",
-                      scheme)) &&
-        (0 != strcmp ("taler+http://";,
-                      scheme)))
-    {
-      GNUNET_free (scheme);
-      GNUNET_break_op (0);
-      return GNUNET_SYSERR;
-    }
-    *path = path_begin;
-  }
-
+  if ((0 != strcasecmp ("taler",
+                        u.scheme)) &&
+      (0 != strcasecmp ("taler+http",
+                        u.scheme)))
   {
-    char *pqf = strchr (path, '/');
-
-    if (NULL == pqf)
-    {
-      GNUNET_free (scheme);
-      GNUNET_break_op (0);
-      return GNUNET_SYSERR;
-    }
-    *pqf = '\0';
-    ++pqf;
-    *rest = GNUNET_strdup (pqf);
+    fprintf (stderr,
+             "Bad schema %s\n",
+             u.scheme);
+    GNUNET_free (cp);
+    GNUNET_break_op (0);
+    return GNUNET_SYSERR;
   }
-  *action = GNUNET_strdup (path);
-
-  GNUNET_free (scheme);
-  return GNUNET_OK;
-}
-
-
-int
-TALER_MERCHANT_parse_pay_uri (const char *pay_uri,
-                              struct TALER_MERCHANT_PayUriData *parse_data)
-{
-  char *path = NULL;
+  parse_data->use_http = (0 == strcasecmp ("taler+http",
+                                           u.scheme));
+  if (0 != strcasecmp ("pay",
+                       u.host))
   {
-    char *action = NULL;
-
-    if ((GNUNET_OK !=
-         parse_taler_uri_scheme_action (pay_uri,
-                                        &action,
-                                        &path)) ||
-        (0 != strcmp ("pay",
-                      action)))
-    {
-      GNUNET_break_op (0);
-      GNUNET_free (action);
-      GNUNET_free (path);
-      return GNUNET_SYSERR;
-    }
-    GNUNET_free (action);
+    GNUNET_break_op (0);
+    GNUNET_free (cp);
+    return GNUNET_SYSERR;
   }
 
   {
-    char *mpp;
     char *order_id;
-    char *session_id = strrchr (path,
+    char *session_id = strrchr (u.path,
                                 '/');
     struct TALER_ClaimTokenP *claim_token = NULL;
-    char *ssid;
 
     if (NULL == session_id)
     {
       GNUNET_break_op (0);
-      GNUNET_free (path);
+      GNUNET_free (cp);
       return GNUNET_SYSERR;
     }
     *session_id = '\0';
     ++session_id;
 
-    order_id = strrchr (path,
+    order_id = strrchr (u.path,
                         '/');
     if (NULL == order_id)
     {
       GNUNET_break_op (0);
-      GNUNET_free (path);
+      GNUNET_free (cp);
       return GNUNET_SYSERR;
     }
     *order_id = '\0';
     ++order_id;
 
     {
-      char *ct_str = strchr (session_id,
-                             '?');
+      char *ct_str = u.query;
       char *ct_data;
-      if (NULL != ct_str)
-      {
-        *ct_str = '\0';
-        ++ct_str;
-      }
-
-      ssid = strchr (session_id,
-                     '#');
-      if (NULL != ssid)
-      {
-        *ssid = '\0';
-        ++ssid;
-      }
 
       if (NULL != ct_str)
       {
-        ct_data = strchr (ct_str,
+        ct_data = strchr (u.query,
                           '=');
         if (NULL == ct_data)
         {
           GNUNET_break_op (0);
-          GNUNET_free (path);
+          GNUNET_free (cp);
           return GNUNET_SYSERR;
         }
         *ct_data = '\0';
         ++ct_data;
         claim_token = GNUNET_new (struct TALER_ClaimTokenP);
-        if ((0 != strcmp ("c",
-                          ct_str)) ||
-            (GNUNET_OK !=
-             GNUNET_STRINGS_string_to_data (ct_data,
-                                            strlen (ct_data),
-                                            claim_token,
-                                            sizeof (*claim_token))))
+        if ( (0 != strcmp ("c",
+                           u.query)) ||
+             (GNUNET_OK !=
+              GNUNET_STRINGS_string_to_data (ct_data,
+                                             strlen (ct_data),
+                                             claim_token,
+                                             sizeof (*claim_token))) )
         {
           GNUNET_break_op (0);
-          GNUNET_free (path);
           GNUNET_free (claim_token);
+          GNUNET_free (cp);
           return GNUNET_SYSERR;
         }
       }
     }
 
-    mpp = strchr (path,
-                  '/');
-    if (NULL != mpp)
     {
-      *mpp = '\0';
-      ++mpp;
-    }
+      char *mpp;
 
-    parse_data->merchant_host = GNUNET_strdup (path);
-    parse_data->merchant_prefix_path =
-      (NULL == mpp) ? NULL : GNUNET_strdup (mpp);
+      mpp = strchr (u.path,
+                    '/');
+      if (NULL != mpp)
+      {
+        *mpp = '\0';
+        ++mpp;
+      }
+      parse_data->merchant_prefix_path
+        = (NULL == mpp)
+          ? NULL
+          : GNUNET_strdup (mpp);
+    }
+    parse_data->merchant_host = GNUNET_strdup (u.path);
     parse_data->order_id = GNUNET_strdup (order_id);
-    parse_data->session_id =
-      (0 < strlen (session_id)) ? GNUNET_strdup (session_id) : NULL;
+    parse_data->session_id
+      = (0 < strlen (session_id))
+        ? GNUNET_strdup (session_id)
+        : NULL;
     parse_data->claim_token = claim_token;
-    parse_data->ssid =
-      (NULL == ssid) ? NULL : GNUNET_strdup (ssid);
+    parse_data->ssid
+      = (NULL == u.fragment)
+        ? NULL
+        : GNUNET_strdup (u.fragment);
   }
-  GNUNET_free (path);
+  GNUNET_free (cp);
   return GNUNET_OK;
 }
 
@@ -335,83 +279,93 @@ TALER_MERCHANT_parse_refund_uri (
   const char *refund_uri,
   struct TALER_MERCHANT_RefundUriData *parse_data)
 {
-  char *path = NULL;
+  char *cp = GNUNET_strdup (refund_uri);
+  struct GNUNET_Uri u;
+
+  if (0 !=
+      GNUNET_uri_parse (&u,
+                        cp))
   {
-    char *action = NULL;
-
-    if ((GNUNET_OK !=
-         parse_taler_uri_scheme_action (refund_uri,
-                                        &action,
-                                        &path)) ||
-        (0 != strcmp ("refund",
-                      action)))
-    {
-      GNUNET_break_op (0);
-      GNUNET_free (action);
-      GNUNET_free (path);
-      return GNUNET_SYSERR;
-    }
-    GNUNET_free (action);
+    GNUNET_free (cp);
+    GNUNET_break_op (0);
+    return GNUNET_SYSERR;
+  }
+  if ((0 != strcasecmp ("taler",
+                        u.scheme)) &&
+      (0 != strcasecmp ("taler+http",
+                        u.scheme)))
+  {
+    GNUNET_free (cp);
+    GNUNET_break_op (0);
+    return GNUNET_SYSERR;
   }
+  parse_data->use_http = (0 == strcasecmp ("taler+http",
+                                           u.scheme));
+
+  if (0 != strcasecmp ("refund",
+                       u.host))
+  {
+    GNUNET_break_op (0);
+    GNUNET_free (cp);
+    return GNUNET_SYSERR;
+  }
+
 
   {
-    char *mpp;
     char *order_id;
-    char *last_seg = strrchr (path,
+    char *last_seg = strrchr (u.path,
                               '/');
-    char *ssid;
 
     if (NULL == last_seg)
     {
       GNUNET_break_op (0);
-      GNUNET_free (path);
+      GNUNET_free (cp);
       return GNUNET_SYSERR;
     }
     *last_seg = '\0';
     ++last_seg;
 
-    order_id = strrchr (path,
+    order_id = strrchr (u.path,
                         '/');
     if (NULL == order_id)
     {
       GNUNET_break_op (0);
-      GNUNET_free (path);
+      GNUNET_free (cp);
       return GNUNET_SYSERR;
     }
     *order_id = '\0';
     ++order_id;
-
-    ssid = strchr (last_seg,
-                   '#');
-    if (NULL != ssid)
-    {
-      *ssid = '\0';
-      ++ssid;
-    }
-
     if (0 != strlen (last_seg))
     {
       GNUNET_break_op (0);
-      GNUNET_free (path);
+      GNUNET_free (cp);
       return GNUNET_SYSERR;
     }
 
-    mpp = strchr (path,
-                  '/');
-    if (NULL != mpp)
     {
-      *mpp = '\0';
-      ++mpp;
-    }
+      char *mpp;
 
-    parse_data->merchant_host = GNUNET_strdup (path);
-    parse_data->merchant_prefix_path =
-      (NULL == mpp) ? NULL : GNUNET_strdup (mpp);
+      mpp = strchr (u.path,
+                    '/');
+      if (NULL != mpp)
+      {
+        *mpp = '\0';
+        ++mpp;
+      }
+
+      parse_data->merchant_prefix_path
+        = (NULL == mpp)
+          ? NULL
+          : GNUNET_strdup (mpp);
+    }
+    parse_data->merchant_host = GNUNET_strdup (u.path);
     parse_data->order_id = GNUNET_strdup (order_id);
-    parse_data->ssid =
-      (NULL == ssid) ? NULL : GNUNET_strdup (ssid);
+    parse_data->ssid
+      = (NULL == u.fragment)
+        ? NULL
+        : GNUNET_strdup (u.fragment);
   }
-  GNUNET_free (path);
+  GNUNET_free (cp);
   return GNUNET_OK;
 }
 
diff --git a/src/merchant-tools/taler-merchant-benchmark.c 
b/src/merchant-tools/taler-merchant-benchmark.c
index d14212b..2e9c9a1 100644
--- a/src/merchant-tools/taler-merchant-benchmark.c
+++ b/src/merchant-tools/taler-merchant-benchmark.c
@@ -542,7 +542,7 @@ main (int argc,
     GNUNET_assert (0 < GNUNET_asprintf (&alt_instance_url,
                                         "%s/instances/%s/",
                                         merchant_url,
-                                        &alt_instance_id));
+                                        alt_instance_id));
   }
   if (GNUNET_OK !=
       TALER_TESTING_prepare_bank (cfg_filename,

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