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: Commenting "pay" CM


From: gnunet
Subject: [GNUnet-SVN] [taler-merchant] branch master updated: Commenting "pay" CMDs.
Date: Wed, 23 May 2018 16:47:33 +0200

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 208f049  Commenting "pay" CMDs.
208f049 is described below

commit 208f0498464518f96527c6fd44d3292e73795396
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed May 23 16:47:15 2018 +0200

    Commenting "pay" CMDs.
---
 src/backend/taler-merchant-httpd_pay.c |  31 +++--
 src/lib/test_merchant_api_new.c        |   8 +-
 src/lib/testing_api_cmd_pay.c          | 222 +++++++++++++++++++++++----------
 3 files changed, 188 insertions(+), 73 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_pay.c 
b/src/backend/taler-merchant-httpd_pay.c
index e2b2b06..bb31afb 100644
--- a/src/backend/taler-merchant-httpd_pay.c
+++ b/src/backend/taler-merchant-httpd_pay.c
@@ -1731,6 +1731,10 @@ begin_transaction (struct PayContext *pc)
     return;
   }
 
+  /* All the coins known to the database have
+   * been processed, now delve into specific case
+   * (pay vs. abort) */
+
   if (PC_MODE_ABORT_REFUND == pc->mode)
   {
     json_t *terms;
@@ -1776,6 +1780,7 @@ begin_transaction (struct PayContext *pc)
                                           &pc->h_contract_terms,
                                           &pc->mi->pubkey,
                                           &pc->total_paid,
+                                           /* justification */
                                           "incomplete payment aborted");
     if (0 > qs)
     {
@@ -1808,7 +1813,8 @@ begin_transaction (struct PayContext *pc)
                             "Merchant database error: could not commit");
       return;
     }
-
+    /* At this point, the refund got correctly committed
+     * into the database.  */
     {
       json_t *refunds;
 
@@ -1819,8 +1825,10 @@ begin_transaction (struct PayContext *pc)
        struct TALER_MerchantSignatureP msig;
        uint64_t rtransactionid;
 
+        /* Will only work with coins found in DB.  */
        if (GNUNET_YES != pc->dc[i].found_in_db)
          continue;
+
        rtransactionid = 0;
         rr.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_REFUND);
        rr.purpose.size = htonl (sizeof (struct TALER_RefundRequestPS));
@@ -1847,6 +1855,8 @@ begin_transaction (struct PayContext *pc)
                                 "Refund approved, but failed to sign 
confirmation");
          return;
        }
+
+        /* Pack refund for i-th coin.  */
        json_array_append_new (refunds,
                               json_pack ("{s:I, s:o, s:o s:o s:o}",
                                          "rtransaction_id", (json_int_t) 
rtransactionid,
@@ -1855,12 +1865,19 @@ begin_transaction (struct PayContext *pc)
                                           "refund_amount", 
TALER_JSON_from_amount_nbo (&rr.refund_amount),
                                           "refund_fee", 
TALER_JSON_from_amount_nbo (&rr.refund_fee)));
       }
-      resume_pay_with_response (pc,
-                               MHD_HTTP_OK,
-                               TMH_RESPONSE_make_json_pack ("{s:o, s:o, s:o}",
-                                                            
"refund_permissions", refunds,
-                                                            "merchant_pub", 
GNUNET_JSON_from_data_auto (&pc->mi->pubkey),
-                                                             
"h_contract_terms", GNUNET_JSON_from_data_auto (&pc->h_contract_terms)));
+
+      /* Resume and send back the response.  */
+      resume_pay_with_response
+        (pc,
+        MHD_HTTP_OK,
+        TMH_RESPONSE_make_json_pack
+           ("{s:o, s:o, s:o}",
+            /* Refunds pack.  */
+           "refund_permissions", refunds,
+           "merchant_pub",
+            GNUNET_JSON_from_data_auto (&pc->mi->pubkey),
+            "h_contract_terms",
+            GNUNET_JSON_from_data_auto (&pc->h_contract_terms)));
     }
     return;
   }
diff --git a/src/lib/test_merchant_api_new.c b/src/lib/test_merchant_api_new.c
index c79502b..e6d0c00 100644
--- a/src/lib/test_merchant_api_new.c
+++ b/src/lib/test_merchant_api_new.c
@@ -977,6 +977,12 @@ run (void *cls,
                          \"value\":\"{EUR:10}\"} ] }",
         NULL),
 
+    /* This CMD will (1) successfully deposit `withdraw-coin-11a'
+     * and subsequently _fail_ to deposit `withdraw-coin-1',
+     * because of double spending.  The abort CMD then will try
+     * to get a refund permission out of that first coin that
+     * was regularly spent, and eventually abort refund CMD, will
+     * get the actual refund coin from the exchange.  */
     TALER_TESTING_cmd_pay ("pay-fail-partial-double-11",
                            merchant_url,
                            is->ctx,
@@ -1026,10 +1032,10 @@ main (int argc,
   /* These environment variables get in the way... */
   unsetenv ("XDG_DATA_HOME");
   unsetenv ("XDG_CONFIG_HOME");
+
   GNUNET_log_setup ("test-merchant-api-new",
                     "DEBUG",
                     NULL);
-
   if (NULL ==
       (fakebank_url = TALER_TESTING_prepare_fakebank
         (CONFIG_FILE,
diff --git a/src/lib/testing_api_cmd_pay.c b/src/lib/testing_api_cmd_pay.c
index 40f1483..a1ed690 100644
--- a/src/lib/testing_api_cmd_pay.c
+++ b/src/lib/testing_api_cmd_pay.c
@@ -34,6 +34,9 @@
 #define AMOUNT_WITHOUT_FEE 1
 #define REFUND_FEE 2
 
+/**
+ * State for a /pay CMD.
+ */
 struct PayState
 {
   /**
@@ -64,7 +67,7 @@ struct PayState
   const char *coin_reference;
 
   /**
-   * The curl context; used to be fed to the merchant lib.
+   * The curl context.
    */
   struct GNUNET_CURL_Context *ctx;
 
@@ -94,14 +97,17 @@ struct PayState
   struct TALER_MERCHANT_Pay *po;
 
   /**
-   * JSON object of contract terms.  Needed here
-   * to be free'd when this command gets cleaned up.
+   * JSON object of contract terms.
+   * FIXME: really needed here in this format?
    */
   json_t *ct;
 
 };
 
 
+/**
+ * State for a /check-payment CMD.
+ */
 struct CheckPaymentState
 {
 
@@ -132,7 +138,7 @@ struct CheckPaymentState
   unsigned int expect_paid;
 
   /**
-   * The curl context; used to be fed to the merchant lib.
+   * The curl context.
    */
   struct GNUNET_CURL_Context *ctx;
 
@@ -144,6 +150,9 @@ struct CheckPaymentState
 };
 
 
+/**
+ * State for a "pay again" CMD.
+ */
 struct PayAgainState
 {
   
@@ -189,6 +198,9 @@ struct PayAgainState
 };
 
 
+/**
+ * State for a "pay abort" CMD.
+ */
 struct PayAbortState
 {
   
@@ -224,17 +236,19 @@ struct PayAbortState
 
 
   /**
-   * FIXME.
+   * How many refund permissions this CMD got
+   * the right for.  Roughly, there is one refund
+   * permission for one coin.
    */
   unsigned int num_refunds;
 
   /**
-   * FIXME.
+   * The actual refund data.
    */
   struct TALER_MERCHANT_RefundEntry *res;
 
   /**
-   * FIXME.
+   * The contract whose payment is to be aborted.
    */
   struct GNUNET_HashCode h_contract;
 
@@ -245,16 +259,39 @@ struct PayAbortState
 };
 
 
+/**
+ * State for a "pay abort refund" CMD.  This command
+ * takes the refund permissions from a "pay abort" CMD,
+ * and redeems those at the exchange.
+ */
 struct PayAbortRefundState
 {
+
+  /**
+   * "abort" CMD that will provide with refund permissions.
+   */
   const char *abort_reference;
 
+  /**
+   * Expected number of coins that were refunded.
+   * Only used to counter-check, not to perform any
+   * operation.
+   */
   unsigned int num_coins;
 
+  /**
+   * The amount to be "withdrawn" from the refund session.
+   */
   const char *refund_amount;
 
+  /**
+   * The refund fee (FIXME: who pays?  Customer or merchant?).
+   */
   const char *refund_fee;
 
+  /**
+   * The interpreter state.
+   */
   struct TALER_TESTING_Interpreter *is;
 
   /**
@@ -267,16 +304,20 @@ struct PayAbortRefundState
    */
   unsigned int http_status;
 
+  /**
+   * Connection handle to the exchange.
+   */
   struct TALER_EXCHANGE_Handle *exchange;
 };
 
 
 
 /**
- * Clean up after the command.  Run during forced termination
- * (CTRL-C) or test failure or test success.
+ * Free a /check-payment CMD, and possibly cancel a pending
+ * operation thereof.
  *
  * @param cls closure
+ * @param cmd the command currently getting freed.
  */
 static void
 check_payment_cleanup (void *cls,
@@ -297,12 +338,19 @@ check_payment_cleanup (void *cls,
 
 
 /**
- * Callback for GET /proposal issued at backend. Just check
- * whether response code is as expected.
+ * Callback for a /check-payment request.
  *
- * @param cls closure
- * @param http_status HTTP status code we got
- * @param json full response we got
+ * @param cls closure.
+ * @param http_status HTTP status code we got.
+ * @param json full response we got.
+ * @param paid GNUNET_YES (GNUNET_NO) if the contract was paid
+ *        (not paid).
+ * @param refunded GNUNET_YES (GNUNET_NO) if the contract was
+ *        refunded (not refunded).
+ * @param refund_amount the amount that was refunded to this
+ *        contract.
+ * @param payment_redirect_url URL where the payment has to be
+ *        addressed.
  */
 static void
 check_payment_cb (void *cls,
@@ -338,14 +386,11 @@ check_payment_cb (void *cls,
 }
 
 /**
- * Runs the command.  Note that upon return, the interpreter
- * will not automatically run the next command, as the command
- * may continue asynchronously in other scheduler tasks.  Thus,
- * the command must ensure to eventually call
- * #TALER_TESTING_interpreter_next() or
- * #TALER_TESTING_interpreter_fail().
+ * Run a /check-payment CMD.
  *
- * @param is interpreter state
+ * @param cmd the command currenly being run.
+ * @param cls closure.
+ * @param is interpreter state.
  */
 static void
 check_payment_run (void *cls,
@@ -439,6 +484,7 @@ TALER_TESTING_cmd_check_payment (const char *label,
  * @param amount_without_fee to be removed, there is no
  *        per-contract fee, only per-coin exists.
  * @param refund_fee per-contract? per-coin?
+ *
  * @return #GNUNET_OK on success
  */
 static int
@@ -544,6 +590,8 @@ build_coins (struct TALER_MERCHANT_PayCoin **pc,
 
 /**
  * Function called with the result of a /pay operation.
+ * Checks whether the merchant signature is valid and the
+ * HTTP response code matches our expectation.
  *
  * @param cls closure with the interpreter state
  * @param http_status HTTP response code, #MHD_HTTP_OK (200)
@@ -626,7 +674,20 @@ pay_cb (void *cls,
 }
 
 /**
- * FIXME
+ * Callback for a "pay abort" operation.  Mainly, check HTTP
+ * response code was as expected and stores refund permissions
+ * in the state.
+ *
+ * @param cls closure.
+ * @param http_status HTTP response code.
+ * @param ec Taler error code.
+ * @param merchant_pub public key of the merchant refunding the
+ *        contract.
+ * @param h_contract the contract involved in the refund.
+ * @param num_refunds how many refund permissions have been
+ *        issued.
+ * @param res array containing the refund permissions.
+ * @param obj raw response body.
  */
 static void
 pay_abort_cb (void *cls,
@@ -677,9 +738,27 @@ pay_abort_cb (void *cls,
 
 
 /**
- * @param cls the closure.  Will be a "pay" or "pay-abort" state,
- *        depending on whether the caller was "pay" or "pay abort"
- *        run method.
+ * Function used by both "pay" and "abort" operations.
+ * It prepares data and sends the "pay" request to the
+ * backend.
+ *
+ * @param merchant_url base URL of the merchant serving the
+ *        request.
+ * @param ctx CURL context.
+ * @param coin_reference reference to the CMD(s) that offer
+ *        "coins" traits.  It is possible to give multiple
+ *        references by using semicolons to separate them.
+ * @param proposal_refere reference to a "proposal" CMD.
+ * @param is interpreter state.
+ * @param amount_with_fee amount to be paid, including deposit
+ *        fee.
+ * @param amount_without_fee amount to be paid, without deposit
+ *        fee.
+ * @param refund_fee refund fee.
+ * @param api_func "lib" function that will be called to either
+ *        issue a "pay" or "abort" request.
+ * @param api_cb callback for @a api_func.
+ * @param cls closure.
  *
  * @return handle to the operation, NULL if errors occur.
  */
@@ -838,14 +917,11 @@ _pay_run (const char *merchant_url,
 }
 
 /**
- * Runs the command.  Note that upon return, the interpreter
- * will not automatically run the next command, as the command
- * may continue asynchronously in other scheduler tasks.  Thus,
- * the command must ensure to eventually call
- * #TALER_TESTING_interpreter_next() or
- * #TALER_TESTING_interpreter_fail().
+ * Run a "pay" CMD.
  *
- * @param is interpreter state
+ * @param cls closure.
+ * @param cmd current CMD being run.
+ * @param is interpreter state.
  */
 static void
 pay_run (void *cls,
@@ -872,10 +948,10 @@ pay_run (void *cls,
 }
 
 /**
- * Clean up after the command.  Run during forced termination
- * (CTRL-C) or test failure or test success.
+ * Free a "pay" CMD, and cancel it if need be.
  *
- * @param cls closure
+ * @param cls closure.
+ * @param cmd command currently being freed.
  */
 static void
 pay_cleanup (void *cls,
@@ -899,8 +975,7 @@ pay_cleanup (void *cls,
 
 
 /**
- * Extract information from a command that is useful for other
- * commands.
+ * Offer internal data useful to other commands.
  *
  * @param cls closure
  * @param ret[out] result (could be anything)
@@ -1025,10 +1100,10 @@ TALER_TESTING_cmd_pay (const char *label,
 
 
 /**
- * Clean up after the command.  Run during forced termination
- * (CTRL-C) or test failure or test success.
+ * Free a "pay abort" CMD, and cancel it if need be.
  *
- * @param cls closure
+ * @param cls closure.
+ * @param cmd command currently being freed.
  */
 static void
 pay_abort_cleanup (void *cls,
@@ -1049,13 +1124,10 @@ pay_abort_cleanup (void *cls,
 }
 
 /**
- * Runs the command.  Note that upon return, the interpreter
- * will not automatically run the next command, as the command
- * may continue asynchronously in other scheduler tasks.  Thus,
- * the command must ensure to eventually call
- * #TALER_TESTING_interpreter_next() or
- * #TALER_TESTING_interpreter_fail().
+ * Run a "pay abort" CMD.
  *
+ * @param cls closure
+ * @param cmd command being run.
  * @param is interpreter state
  */
 static void
@@ -1115,8 +1187,7 @@ pay_abort_run (void *cls,
 }
 
 /**
- * Extract information from a command that is useful for other
- * commands.
+ * Offer internal data useful to other commands.
  *
  * @param cls closure
  * @param ret[out] result (could be anything)
@@ -1190,7 +1261,8 @@ TALER_TESTING_cmd_pay_abort (const char *label,
 }
 
 /**
- * Function called with the result of a /pay again operation.
+ * Function called with the result of a /pay again operation,
+ * check signature and HTTP response code are good.
  *
  * @param cls closure with the interpreter state
  * @param http_status HTTP response code, #MHD_HTTP_OK (200)
@@ -1272,14 +1344,11 @@ pay_again_cb (void *cls,
 }
 
 /**
- * Runs the command.  Note that upon return, the interpreter
- * will not automatically run the next command, as the command
- * may continue asynchronously in other scheduler tasks.  Thus,
- * the command must ensure to eventually call
- * #TALER_TESTING_interpreter_next() or
- * #TALER_TESTING_interpreter_fail().
+ * Run a "pay again" CMD.
  *
- * @param is interpreter state
+ * @param cls closure.
+ * @param cmd command currently being run.
+ * @param is interpreter state.
  */
 static void
 pay_again_run (void *cls,
@@ -1327,10 +1396,10 @@ pay_again_run (void *cls,
 }
 
 /**
- * Clean up after the command.  Run during forced termination
- * (CTRL-C) or test failure or test success.
+ * Free and possibly cancel a "pay again" CMD.
  *
- * @param cls closure
+ * @param cls closure.
+ * @param cmd command currently being freed.
  */
 static void
 pay_again_cleanup (void *cls,
@@ -1351,7 +1420,9 @@ pay_again_cleanup (void *cls,
 }
 
 /**
- * Make a "pay again" test command.
+ * Make a "pay again" test command.  Its purpose is to
+ * take all the data from a aborted "pay" CMD, and use
+ * good coins to correctly pay for it.
  *
  * @param label command label
  * @param merchant_url merchant base URL
@@ -1393,8 +1464,9 @@ TALER_TESTING_cmd_pay_again (const char *label,
 
 
 /**
- * Callbacks of this type are used to serve the result of
- * submitting a refund request to an exchange.
+ * Callback used to work out the response from the exchange
+ * to a refund operation.  Currently only checks if the response
+ * code is as expected.
  *
  * @param cls closure
  * @param http_status HTTP response code, #MHD_HTTP_OK (200) for
@@ -1430,7 +1502,11 @@ abort_refund_cb (void *cls,
 }
 
 /**
- * FIXME.
+ * Free the state of a "pay abort refund" CMD, and possibly
+ * cancel a pending operation.
+ *
+ * @param cls closure.
+ * @param cmd the command currently being freed.
  */
 static void
 pay_abort_refund_cleanup (void *cls,
@@ -1450,7 +1526,11 @@ pay_abort_refund_cleanup (void *cls,
 }
 
 /**
- * FIXME.
+ * Run a "pay abort refund" CMD.
+ *
+ * @param cls closure.
+ * @param cmd command currently being run.
+ * @param is interpreter state.
  */
 static void
 pay_abort_refund_run (void *cls,
@@ -1514,7 +1594,19 @@ pay_abort_refund_run (void *cls,
 
 
 /**
- * FIXME.
+ * Make a "pay abort refund" CMD.  This command uses the
+ * refund permission from a "pay abort" CMD, and redeems it
+ * at the exchange.
+ *
+ * @param label command label.
+ * @param exchange connection label to the exchange.
+ * @param abort_reference reference to the "pay abort" CMD that
+ *        will offer the refund permission.
+ * @param num_coins how many coins are expected to be refunded.
+ * @param refund_amount the amount we are going to redeem as
+ *        refund.
+ * @param refund_fee the refund fee (FIXME: who pay it?)
+ * @param http_status expected HTTP response code.
  */
 struct TALER_TESTING_Command
 TALER_TESTING_cmd_pay_abort_refund

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



reply via email to

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