gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-merchant] branch master updated: Fixing remaining pr


From: gnunet
Subject: [GNUnet-SVN] [taler-merchant] branch master updated: Fixing remaining problems due to the passing of values from config file, in the payments generator. Namely, the command list was statically created, so it was necessary to make it dynamic.
Date: Wed, 22 Mar 2017 14:28:19 +0100

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

marcello pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new 0deb49a  Fixing remaining problems due to the passing of values from 
config file, in the payments generator. Namely, the command list was statically 
created, so it was necessary to make it dynamic.
0deb49a is described below

commit 0deb49a834b720b04d0ee1ac7cf529d22e6c9ae2
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Mar 22 14:25:08 2017 +0100

    Fixing remaining problems due to the passing of values from
    config file, in the payments generator. Namely, the command
    list was statically created, so it was necessary to make it
    dynamic.
---
 src/samples/generate_payments.c | 174 +++++++++++++++++++++++++---------------
 1 file changed, 108 insertions(+), 66 deletions(-)

diff --git a/src/samples/generate_payments.c b/src/samples/generate_payments.c
index b9d25c0..4119dab 100644
--- a/src/samples/generate_payments.c
+++ b/src/samples/generate_payments.c
@@ -54,8 +54,6 @@ static char *instance;
  */
 static char *currency;
 
-#define ORDER_MAX_SIZE 1000
-
 /**
  * Configuration file
  */
@@ -207,9 +205,11 @@ struct Command
       /**
        * String describing the denomination value we should withdraw.
        * A corresponding denomination key must exist in the exchange's
-       * offerings.  Can be NULL if @e pk is set instead.
+       * offerings. Can be NULL if @e pk is set instead.
+       * The interpreter must free this value after it doesn't need it
+       * anymore.
        */
-      const char *amount;
+      char *amount;
 
       /**
        * If @e amount is NULL, this specifies the denomination key to
@@ -290,10 +290,8 @@ struct Command
 
       /**
        * The order.
-       * It's dynamically generated because we need different transaction_id
-       * for different merchant instances.
        */
-      char order[ORDER_MAX_SIZE];
+      char *order;
 
       /**
        * Handle to the active PUT /proposal operation, or NULL.
@@ -728,7 +726,7 @@ find_pk (const struct TALER_EXCHANGE_Keys *keys,
  *
  * @param cls contains the `struct InterpreterState`
  */
-static void
+void
 interpreter_run (void *cls)
 {
   const struct GNUNET_SCHEDULER_TaskContext *tc;
@@ -742,6 +740,12 @@ interpreter_run (void *cls)
   json_t *sender_details;
   json_t *transfer_details;
 
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+             "Interpreter runs command %u/%s(%u)\n",
+             is->ip,
+             cmd->label,
+             cmd->oc);
+
   is->task = NULL;
   tc = GNUNET_SCHEDULER_get_task_context ();
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
@@ -751,11 +755,6 @@ interpreter_run (void *cls)
     fail (is);
     return;
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "Interpreter runs command %u/%s(%u)\n",
-             is->ip,
-             cmd->label,
-             cmd->oc);
 
   switch (cmd->oc)
   {
@@ -980,7 +979,7 @@ interpreter_run (void *cls)
         fail (is);
         return;
       }
-      json_object_set (sender_details, "bank_uri", bank_uri);
+      json_object_set (sender_details, "bank_uri", json_string (bank_uri));
 
       transfer_details = json_loads 
(cmd->details.admin_add_incoming.transfer_details,
                                      JSON_REJECT_DUPLICATES,
@@ -1117,6 +1116,7 @@ cert_cb (void *cls,
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
              "Certificate callback invoked, starting interpreter\n");
   is->keys = keys;
+
   is->task = GNUNET_SCHEDULER_add_now (&interpreter_run,
                                        is);
 }
@@ -1191,6 +1191,8 @@ do_shutdown (void *cls)
           json_decref (cmd->details.proposal.proposal_data);
           cmd->details.proposal.proposal_data = NULL;
         }
+
+        GNUNET_free_non_null (cmd->details.proposal.order);
         break;
   
       case OC_WITHDRAW_SIGN:
@@ -1208,6 +1210,7 @@ do_shutdown (void *cls)
           GNUNET_CRYPTO_rsa_signature_free 
(cmd->details.reserve_withdraw.sig.rsa_signature);
           cmd->details.reserve_withdraw.sig.rsa_signature = NULL;
         }
+        GNUNET_free_non_null (cmd->details.reserve_withdraw.amount);
         break;
   
       case OC_ADMIN_ADD_INCOMING:
@@ -1264,18 +1267,77 @@ do_shutdown (void *cls)
  * @return pointer to allocated and concatenated "CURRENCY:XX.YY"
  * formatted string.
  *
- * FIXME: deallocate this string from within the interpreter
- * commands who use it.
  */
 char *
-amount_concat (char *currency, char *rpart)
+concat_amount (char *currency, char *rpart)
 {
-  char *ret;
-  GNUNET_asprintf (&ret, "%s:%s",
+  char *str;
+
+  GNUNET_asprintf (&str, "%s:%s",
                    currency, rpart);
+  return str;
+}
+
+
+/**
+ * Allocates and return a string representing a order.
+ * In this process, this function gives the order those
+ * prices specified by the user. Please NOTE that any amount
+ * must be given in the form "XX.YY".
+ *
+ * @param currency string representing the currency
+ * the system works in
+ * @param max_fee merchant's allowed max_fee
+ * @param amount total amount for this order
+ */
+char *
+make_order (char *currency,
+            char *max_fee,
+            char *amount)
+{
+  char *tmp_str;
+  char *ret;
+  struct TALER_Amount tmp_amount;
+  json_t *tmp_total;
+  json_t *tmp_maxfee;
+
+  GNUNET_asprintf (&tmp_str,
+                   "%s:%s",
+                   currency,
+                   max_fee);
+
+  TALER_string_to_amount (tmp_str, &tmp_amount);
+  tmp_total = TALER_JSON_from_amount (&tmp_amount);
+
+  sprintf (tmp_str,
+           "%s:%s",
+           currency,
+           amount);
+
+  TALER_string_to_amount (tmp_str, &tmp_amount);
+  tmp_maxfee = TALER_JSON_from_amount (&tmp_amount);
+
+  GNUNET_asprintf (&ret, "{\
+                  \"max_fee\":%s,\
+                  \"order_id\":\"1\",\
+                  \"timestamp\":\"\\/Date(42)\\/\",\
+                  \"refund_deadline\":\"\\/Date(0)\\/\",\
+                  \"pay_deadline\":\"\\/Date(9999999999)\\/\",\
+                  \"amount\":%s,\
+                 \"summary\": \"merchant-lib testcase\",\
+                  \"products\":\
+                     [ {\"description\":\"ice cream\"} ] }",
+                  json_dumps (tmp_maxfee, JSON_COMPACT),
+                  json_dumps (tmp_total, JSON_COMPACT));
+
+  GNUNET_free (tmp_str);
+  json_decref (tmp_maxfee);
+  json_decref (tmp_total);
+
   return ret;
 }
 
+
 /**
  * Main function that will be run by the scheduler.
  *
@@ -1284,8 +1346,12 @@ amount_concat (char *currency, char *rpart)
 static void
 run (void *cls)
 {
+  int ncmds;
   struct InterpreterState *is;
-  static struct Command commands[] =
+
+  /* must always be updated with the # of cmds the interpreter has*/
+  ncmds = 13;
+  struct Command commands[] =
   {
     /* Fill reserve with EUR:5.01, as withdraw fee is 1 ct per config */
     { .oc = OC_ADMIN_ADD_INCOMING,
@@ -1293,118 +1359,94 @@ run (void *cls)
       .expected_response_code = MHD_HTTP_OK,
       .details.admin_add_incoming.sender_details = "{ \"type\":\"test\", 
\"account_number\":62, \"uuid\":1 }",
       .details.admin_add_incoming.transfer_details = "{ \"uuid\": 1}",
-      .details.admin_add_incoming.amount = CURRENCY ":5.01" },
+      .details.admin_add_incoming.amount = concat_amount (currency, "5.01") },
+
     /* Fill reserve with EUR:5.01, as withdraw fee is 1 ct per config */
     { .oc = OC_ADMIN_ADD_INCOMING,
       .label = "create-reserve-2",
       .expected_response_code = MHD_HTTP_OK,
       .details.admin_add_incoming.sender_details = "{ \"type\":\"test\", 
\"account_number\":62, \"uuid\":1 }",
       .details.admin_add_incoming.transfer_details = "{ \"uuid\": 1}",
-      .details.admin_add_incoming.amount = CURRENCY ":5.01" },
+      .details.admin_add_incoming.amount = concat_amount (currency, "5.01") },
     /* Fill reserve with EUR:5.01, as withdraw fee is 1 ct per config */
     { .oc = OC_ADMIN_ADD_INCOMING,
       .label = "create-reserve-3",
       .expected_response_code = MHD_HTTP_OK,
       .details.admin_add_incoming.sender_details = "{ \"type\":\"test\", 
\"account_number\":62, \"uuid\":1 }",
       .details.admin_add_incoming.transfer_details = "{ \"uuid\": 1}",
-      .details.admin_add_incoming.amount = amount_concat (currency, "5.01") },
+      .details.admin_add_incoming.amount = concat_amount (currency, "5.01") },
+
     /* Withdraw a 5 EUR coin, at fee of 1 ct */
     { .oc = OC_WITHDRAW_SIGN,
       .label = "withdraw-coin-1",
       .expected_response_code = MHD_HTTP_OK,
       .details.reserve_withdraw.reserve_reference = "create-reserve-1",
-      .details.reserve_withdraw.amount = amount_concat (currency, "5") },
+      .details.reserve_withdraw.amount = concat_amount (currency, "5") },
+
     /* Withdraw a 5 EUR coin, at fee of 1 ct */
     { .oc = OC_WITHDRAW_SIGN,
       .label = "withdraw-coin-2",
       .expected_response_code = MHD_HTTP_OK,
       .details.reserve_withdraw.reserve_reference = "create-reserve-2",
-      .details.reserve_withdraw.amount = amount_concat (currency, "5") },
+      .details.reserve_withdraw.amount = concat_amount (currency, "5") },
+
     /* Withdraw a 5 EUR coin, at fee of 1 ct */
     { .oc = OC_WITHDRAW_SIGN,
       .label = "withdraw-coin-3",
       .expected_response_code = MHD_HTTP_OK,
       .details.reserve_withdraw.reserve_reference = "create-reserve-3",
-      .details.reserve_withdraw.amount = amount_concat (currency, "5") },
+      .details.reserve_withdraw.amount = concat_amount (currency, "5") },
 
     /* Create proposal */
     { .oc = OC_PROPOSAL,
       .label = "create-proposal-1",
       .expected_response_code = MHD_HTTP_OK,
-      .details.proposal.order = "{\
-                  \"max_fee\":\
-                     {\"currency\":\"" CURRENCY "\", \"value\":0, 
\"fraction\":50000000},\
-                  \"order_id\":\"1\",\
-                  \"timestamp\":\"\\/Date(42)\\/\",\
-                  \"refund_deadline\":\"\\/Date(0)\\/\",\
-                  \"pay_deadline\":\"\\/Date(9999999999)\\/\",\
-                  \"amount\":{\"currency\":\"" CURRENCY "\", \"value\":5, 
\"fraction\":0},\
-                 \"summary\": \"merchant-lib testcase\",\
-                  \"products\":\
-                     [ {\"description\":\"ice cream\", \"value\":\"{" CURRENCY 
":5}\"} ] }"},
+      .details.proposal.order = make_order (currency, "0.5", "5.0") },
 
     /* Create proposal */
     { .oc = OC_PROPOSAL,
       .label = "create-proposal-2",
       .expected_response_code = MHD_HTTP_OK,
-      .details.proposal.order = "{\
-                  \"max_fee\":\
-                     {\"currency\":\"" CURRENCY "\", \"value\":0, 
\"fraction\":50000000},\
-                  \"order_id\":\"2\",\
-                  \"timestamp\":\"\\/Date(42)\\/\",\
-                  \"refund_deadline\":\"\\/Date(0)\\/\",\
-                  \"pay_deadline\":\"\\/Date(9999999999)\\/\",\
-                  \"amount\":{\"currency\":\"" CURRENCY "\", \"value\":5, 
\"fraction\":0},\
-                 \"summary\": \"merchant-lib testcase\",\
-                  \"products\":\
-                     [ {\"description\":\"ice cream\", \"value\":\"{" CURRENCY 
":5}\"} ] }"},
+      .details.proposal.order = make_order (currency, "0.5", "5.0") },
 
     /* Create proposal */
     { .oc = OC_PROPOSAL,
       .label = "create-proposal-3",
       .expected_response_code = MHD_HTTP_OK,
-      .details.proposal.order = "{\
-                  \"max_fee\":\
-                     {\"currency\":\"" CURRENCY "\", \"value\":0, 
\"fraction\":50000000},\
-                  \"order_id\":\"3\",\
-                  \"timestamp\":\"\\/Date(42)\\/\",\
-                  \"refund_deadline\":\"\\/Date(0)\\/\",\
-                  \"pay_deadline\":\"\\/Date(9999999999)\\/\",\
-                  \"amount\":{\"currency\":\"" CURRENCY "\", \"value\":5, 
\"fraction\":0},\
-                 \"summary\": \"merchant-lib testcase\",\
-                  \"products\":\
-                     [ {\"description\":\"ice cream\", \"value\":\"{" CURRENCY 
":5}\"} ] }"},
+      .details.proposal.order = make_order (currency, "0.5", "5.0") },
 
     { .oc = OC_PAY,
       .label = "deposit-simple",
       .expected_response_code = MHD_HTTP_OK,
       .details.pay.contract_ref = "create-proposal-1",
       .details.pay.coin_ref = "withdraw-coin-1",
-      .details.pay.amount_with_fee = CURRENCY ":5",
-      .details.pay.amount_without_fee = CURRENCY ":4.99" },
+      .details.pay.amount_with_fee = concat_amount (currency, "5"),
+      .details.pay.amount_without_fee = concat_amount (currency, "4.99") },
 
     { .oc = OC_PAY,
       .label = "deposit-simple",
       .expected_response_code = MHD_HTTP_OK,
       .details.pay.contract_ref = "create-proposal-2",
       .details.pay.coin_ref = "withdraw-coin-2",
-      .details.pay.amount_with_fee = CURRENCY ":5",
-      .details.pay.amount_without_fee = CURRENCY ":4.99" },
+      .details.pay.amount_with_fee = concat_amount (currency, "5"),
+      .details.pay.amount_without_fee = concat_amount (currency, "4.99") },
 
     { .oc = OC_PAY,
       .label = "deposit-simple",
       .expected_response_code = MHD_HTTP_OK,
       .details.pay.contract_ref = "create-proposal-3",
       .details.pay.coin_ref = "withdraw-coin-3",
-      .details.pay.amount_with_fee = CURRENCY ":5",
-      .details.pay.amount_without_fee = CURRENCY ":4.99" },
+      .details.pay.amount_with_fee = concat_amount (currency, "5"),
+      .details.pay.amount_without_fee = concat_amount (currency, "4.99") },
 
     { .oc = OC_END,
       .label = "end-of-commands"}
   };
 
+
   is = GNUNET_new (struct InterpreterState);
-  is->commands = commands;
+  is->commands = GNUNET_malloc (sizeof (struct Command) * ncmds);
+  memcpy (is->commands, commands, sizeof (struct Command) * ncmds);
 
   ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
                           &rc);

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



reply via email to

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