gnunet-svn
[Top][All Lists]
Advanced

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

[taler-anastasis] 01/02: do not transition into error states


From: gnunet
Subject: [taler-anastasis] 01/02: do not transition into error states
Date: Wed, 13 Oct 2021 13:20:31 +0200

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

dold pushed a commit to branch master
in repository anastasis.

commit e6ff49f4a95d462b8e18a8f93f623e502c804075
Author: Florian Dold <florian@dold.me>
AuthorDate: Wed Oct 13 13:12:25 2021 +0200

    do not transition into error states
---
 .gitignore                                 |  2 +
 src/reducer/anastasis_api_recovery_redux.c | 75 ++++++++++++------------------
 2 files changed, 31 insertions(+), 46 deletions(-)

diff --git a/.gitignore b/.gitignore
index a0bb536..0d5dbc1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -128,3 +128,5 @@ doc/anastasis.info
 src/cli/test_reducer.err
 .vscode
 vgcore*
+__pycache__
+tags
diff --git a/src/reducer/anastasis_api_recovery_redux.c 
b/src/reducer/anastasis_api_recovery_redux.c
index 94e5e10..17fe639 100644
--- a/src/reducer/anastasis_api_recovery_redux.c
+++ b/src/reducer/anastasis_api_recovery_redux.c
@@ -250,15 +250,16 @@ sctx_free (void *cls)
 
 
 /**
- * Update @a state to reflect the error provided in @a rc.
+ * Call the action callback with an error result
  *
- * @param[in,out] state state to update
+ * @param cb action callback to call
+ * @param cb_cls closure for @a cb
  * @param rc error code to translate to JSON
- * @return error code to use
  */
-static enum TALER_ErrorCode
-update_state_by_error (json_t *state,
-                       enum ANASTASIS_RecoveryStatus rc)
+void
+fail_by_error (ANASTASIS_ActionCallback cb,
+               void *cb_cls,
+               enum ANASTASIS_RecoveryStatus rc)
 {
   const char *msg = NULL;
   enum TALER_ErrorCode ec = TALER_EC_INVALID;
@@ -311,17 +312,10 @@ update_state_by_error (json_t *state,
     ec = TALER_EC_ANASTASIS_REDUCER_POLICY_LOOKUP_FAILED;
     break;
   }
-  GNUNET_assert (0 ==
-                 json_object_set_new (state,
-                                      "error_message",
-                                      json_string (msg)));
-  GNUNET_assert (0 ==
-                 json_object_set_new (state,
-                                      "error_code",
-                                      json_integer (rc)));
-  set_state (state,
-             ANASTASIS_RECOVERY_STATE_ERROR);
-  return ec;
+  ANASTASIS_redux_fail_ (cb,
+                         cb_cls,
+                         ec,
+                         msg);
 }
 
 
@@ -341,7 +335,6 @@ core_secret_cb (void *cls,
                 size_t secret_size)
 {
   struct SelectChallengeContext *sctx = cls;
-  enum TALER_ErrorCode ec;
 
   sctx->r = NULL;
   if (ANASTASIS_RS_SUCCESS == rc)
@@ -373,11 +366,9 @@ core_secret_cb (void *cls,
     sctx_free (sctx);
     return;
   }
-  ec = update_state_by_error (sctx->state,
-                              rc);
-  sctx->cb (sctx->cb_cls,
-            ec,
-            sctx->state);
+  fail_by_error (sctx->cb,
+                 sctx->cb_cls,
+                 rc);
   sctx_free (sctx);
 }
 
@@ -550,11 +541,10 @@ answer_feedback_cb (
       if (NULL == rd)
       {
         GNUNET_break (0);
-        set_state (sctx->state,
-                   ANASTASIS_RECOVERY_STATE_ERROR);
-        sctx->cb (sctx->cb_cls,
-                  TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
-                  sctx->state);
+        ANASTASIS_redux_fail_ (sctx->cb,
+                               sctx->cb_cls,
+                               TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
+                               "unable to serialize recovery state");
         sctx_free (sctx);
         return;
       }
@@ -863,11 +853,10 @@ answer_feedback_cb (
         if (NULL == c)
         {
           GNUNET_break (0);
-          set_state (sctx->state,
-                     ANASTASIS_RECOVERY_STATE_ERROR);
-          sctx->cb (sctx->cb_cls,
-                    TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
-                    sctx->state);
+          ANASTASIS_redux_fail_ (sctx->cb,
+                                 sctx->cb_cls,
+                                 TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
+                                 NULL);
           sctx_free (sctx);
           return;
         }
@@ -2368,7 +2357,6 @@ core_early_secret_cb (void *cls,
 {
   struct PolicyDownloadEntry *pd = cls;
   struct RecoverSecretState *rss = pd->rss;
-  enum TALER_ErrorCode ec;
 
   pd->recovery = NULL;
   GNUNET_assert (NULL == secret);
@@ -2381,11 +2369,9 @@ core_early_secret_cb (void *cls,
     return;   /* wait for another one */
   /* all failed! report failure! */
   GNUNET_assert (ANASTASIS_RS_SUCCESS != rc);
-  ec = update_state_by_error (rss->state,
-                              rc);
-  rss->cb (rss->cb_cls,
-           ec,
-           rss->state);
+  fail_by_error (rss->cb,
+                 rss->cb_cls,
+                 rc);
   rss->cb = NULL;
   free_rss (rss);
 }
@@ -2591,8 +2577,6 @@ policy_lookup_cb (void *cls,
     {
       json_decref (challenges);
       json_decref (policies);
-      set_state (rss->state,
-                 ANASTASIS_RECOVERY_STATE_ERROR);
       ANASTASIS_redux_fail_ (rss->cb,
                              rss->cb_cls,
                              TALER_EC_ANASTASIS_REDUCER_STATE_INVALID,
@@ -2639,11 +2623,10 @@ policy_lookup_cb (void *cls,
     if (NULL == rd)
     {
       GNUNET_break (0);
-      set_state (rss->state,
-                 ANASTASIS_RECOVERY_STATE_ERROR);
-      rss->cb (rss->cb_cls,
-               TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
-               rss->state);
+      ANASTASIS_redux_fail_ (rss->cb,
+                             rss->cb_cls,
+                             TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
+                             "unable to serialize recovery state");
       free_rss (rss);
       return;
     }

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