gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-exchange] branch master updated: Benchmark,


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated: Benchmark,
Date: Fri, 27 Jul 2018 14:47:44 +0200

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

marcello pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new d973855  Benchmark,
d973855 is described below

commit d9738553b2f655f431b1c12a7895851d1befd120
Author: Marcello Stanisci <address@hidden>
AuthorDate: Fri Jul 27 14:47:02 2018 +0200

    Benchmark,
    
    extract bank url from the configuration; then
    make example config usable.
---
 .gitignore                               |   1 +
 src/benchmark/taler-exchange-benchmark.c | 222 ++++++++++++++++++++++++++-----
 2 files changed, 189 insertions(+), 34 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8a10c09..f2bb9e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,6 +64,7 @@ 
src/benchmark/exchange_benchmark_home/.local/share/taler/exchange/live-keys/*
 src/benchmark/exchange_benchmark_home/.local/share/taler/auditors/
 src/benchmark/exchange_benchmark_home/.local/share/taler/auditor/
 src/benchmark/exchange_benchmark_home/.local/share/taler/exchange/wirefees/*
+src/benchmark/exchange_benchmark_home/.config/taler/account-2.json
 src/json/test_json
 src/wire-plugins/test_ebics_wireformat
 src/wire-plugins/test_wire_plugin
diff --git a/src/benchmark/taler-exchange-benchmark.c 
b/src/benchmark/taler-exchange-benchmark.c
index 40526af..eb035f3 100644
--- a/src/benchmark/taler-exchange-benchmark.c
+++ b/src/benchmark/taler-exchange-benchmark.c
@@ -59,23 +59,50 @@ enum BenchmarkError {
  */
 #define UNITY_SIZE 6
 
-/* Hard-coded params.  Note, the bank is expected to
- * have the Tor user with account number 3 and password 'x'.
- *
- * This is not a problem _so far_, as the fakebank mocks logins,
- * and the Python bank makes that account by default.  */
-#define USER_ACCOUNT_NO 3
-#define EXCHANGE_ACCOUNT_NO 2
-#define USER_LOGIN_NAME "Tor"
-#define USER_LOGIN_PASS "x"
-#define EXCHANGE_URL "http://example.com/";
+/**
+ * Account number of the merchant.  Fakebank likes any number,
+ * the only requirement is that this number then matches the
+ * number given when building payto URLs at deposit time. 
+ */
+#define USER_ACCOUNT_NUMBER 3
 
 #define FIRST_INSTRUCTION -1
 
 #define CMD_TRANSFER_TO_EXCHANGE(label,amount) \
    TALER_TESTING_cmd_fakebank_transfer (label, amount, \
-     fakebank_url, USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO, \
-     USER_LOGIN_NAME, USER_LOGIN_PASS, EXCHANGE_URL)
+     exchange_bank_account.bank_base_url, \
+     USER_ACCOUNT_NUMBER, \
+     exchange_bank_account.no, \
+     "dummy_user", \
+     "dummy_password", \
+     "http://example.com/";)
+
+/**
+ * Information about an account extracted from a payto://-URL.
+ */
+struct Account
+{
+  /**
+   * Hostname of the bank (possibly including port).
+   */
+  char *hostname;
+
+  /**
+   * Bank account number.
+   */
+  unsigned long long no;
+
+  /**
+   * Base URL of the bank hosting the account above.
+   */
+  char *bank_base_url;
+};
+
+
+/**
+ * Hold information regarding which bank has the exchange account.
+ */
+static struct Account exchange_bank_account;
 
 
 /**
@@ -125,11 +152,6 @@ static char *logfile;
 static char *cfg_filename;
 
 /**
- * Fake bank base URL.
- */
-static char *fakebank_url;
-
-/**
  * Currency used.
  */
 static char *currency;
@@ -157,6 +179,128 @@ static char *currency;
                    currency);
 
 /**
+ * Decide which exchange account is going to be
+ * used to address a wire transfer to.  Used at
+ * withdrawal time.
+ *
+ * @param cls closure
+ * @param section section name.
+ */
+static void
+pick_exchange_account_cb (void *cls,
+                          const char *section)
+{
+  if (0 == strncasecmp ("account-",
+                         section,
+                        strlen ("account-")))
+  {
+    const char **s = cls;
+    *s = section;
+  }
+  
+}
+
+/**
+ * Parse payto:// account URL (only account information,
+ * wire subject and amount are ignored).
+ *
+ * @param account_url URL to parse
+ * @param account[out] set to information, can be NULL
+ * @return #TALER_EC_NONE if @a account_url is well-formed
+ */
+static enum TALER_ErrorCode
+parse_payto (const char *account_url,
+             struct Account *account)
+{
+  const char *hostname;
+  const char *a;
+  const char *q;
+  unsigned long long no;
+
+#define PREFIX "payto://x-taler-bank/"
+#define MAX_ACCOUNT_NO (1LLU << 52)
+
+  if (0 != strncasecmp (account_url,
+                        PREFIX,
+                        strlen (PREFIX)))
+    return TALER_EC_PAYTO_WRONG_METHOD;
+  hostname = &account_url[strlen (PREFIX)];
+  if (NULL == (a = strchr (hostname,
+                           (unsigned char) '/')))
+    return TALER_EC_PAYTO_MALFORMED;
+  a++;
+  if (NULL != (q = strchr (a,
+                           (unsigned char) '?')))
+  {
+    char *s;
+
+    s = GNUNET_strndup (a,
+                        q - a);
+    if (1 != sscanf (s,
+                     "%llu",
+                     &no))
+    {
+      GNUNET_free (s);
+      return TALER_EC_PAYTO_MALFORMED;
+    }
+    GNUNET_free (s);
+  }
+  else
+  {
+    if (1 != sscanf (a,
+                     "%llu",
+                     &no))
+      return TALER_EC_PAYTO_MALFORMED;
+  }
+  if (no > MAX_ACCOUNT_NO)
+    return TALER_EC_PAYTO_MALFORMED;
+
+  if (NULL != account)
+  {
+    long long unsigned port;
+    char *p;
+
+    /* the "-1" crops the final slash away.  */
+    account->hostname = GNUNET_strndup (hostname,
+                                        a - hostname - 1);
+    account->no = no;
+    port = 443; /* if non given, equals 443.  */
+    if (NULL != (p = strchr (account->hostname,
+                           (unsigned char) ':')))
+    {
+      p++;
+      if (1 != sscanf (p,
+                       "%llu",
+                       &port))
+      {
+        GNUNET_break (0); 
+        TALER_LOG_ERROR ("Malformed host from payto:// URI\n");
+        GNUNET_free (account->hostname);
+        return TALER_EC_PAYTO_MALFORMED;
+      }
+    }
+    if (443 != port)
+    {
+      GNUNET_assert
+        (GNUNET_SYSERR != GNUNET_asprintf
+          (&account->bank_base_url,
+           "http://%s";,
+           account->hostname));
+    }
+    else
+    {
+      GNUNET_assert
+        (GNUNET_SYSERR != GNUNET_asprintf
+          (&account->bank_base_url,
+           "https://%s";,
+           account->hostname));  
+    }
+  }
+  return TALER_EC_NONE;
+}
+
+
+/**
  * Throw a weighted coin with @a probability.
  *
  * @return #GNUNET_OK with @a probability,
@@ -197,6 +341,7 @@ run (void *cls,
      AMOUNT_1);
 
   total_reserve_amount.value = 5 * howmany_coins;
+  total_reserve_amount.fraction = 0;
   strncpy (total_reserve_amount.currency,
            currency,
            TALER_CURRENCY_LEN);
@@ -254,8 +399,8 @@ run (void *cls,
        withdraw_label,
        0, /* Index of the one withdrawn coin in the traits.  */
        TALER_TESTING_make_wire_details
-         (24,
-          "no-aggregation"),
+         (USER_ACCOUNT_NUMBER,
+          exchange_bank_account.hostname),
        order_enc,
        GNUNET_TIME_UNIT_ZERO,
        AMOUNT_1,
@@ -303,9 +448,10 @@ run (void *cls,
   }
   all_commands[1 + howmany_coins] = TALER_TESTING_cmd_end ();
   start_time = GNUNET_TIME_absolute_get ();
-  TALER_TESTING_run_with_fakebank (is,
-                                   all_commands,
-                                   fakebank_url);
+  TALER_TESTING_run_with_fakebank
+    (is,
+     all_commands,
+     exchange_bank_account.bank_base_url);
   result = 1;
 }
 
@@ -348,14 +494,6 @@ main (int argc,
        &howmany_coins),
 
     GNUNET_GETOPT_option_string
-      ('b',
-       "bank-url",
-       "BU",
-       "bank base url, mandatory,"
-       " must match exchange's escrow bank",
-       &fakebank_url),
-
-    GNUNET_GETOPT_option_string
       ('l',
        "logfile",
        "LF",
@@ -405,13 +543,29 @@ main (int argc,
     GNUNET_CONFIGURATION_destroy (cfg);
     return BAD_CONFIG_FILE;
   }
-  GNUNET_CONFIGURATION_destroy (cfg);
 
-  if (NULL == fakebank_url)
   {
-    TALER_LOG_ERROR ("Option -b is mandatory!\n");
-    return MISSING_BANK_URL;
+    char *bank_details_section;
+    char *exchange_payto_url;
+
+    GNUNET_CONFIGURATION_iterate_sections
+      (cfg, 
+       pick_exchange_account_cb,
+       &bank_details_section);
+
+    GNUNET_assert (NULL != bank_details_section);
+    GNUNET_assert
+      (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string
+        (cfg,
+         bank_details_section,
+         "url",
+         &exchange_payto_url));
+
+    GNUNET_assert
+      (TALER_EC_NONE == parse_payto (exchange_payto_url,
+                                     &exchange_bank_account));
   }
+  GNUNET_CONFIGURATION_destroy (cfg);
 
   compute_wire_response = GNUNET_OS_start_process
     (GNUNET_NO,

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

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