From e6ff49f4a95d462b8e18a8f93f623e502c804075 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 13 Oct 2021 13:12:25 +0200 Subject: do not transition into error states --- src/reducer/anastasis_api_recovery_redux.c | 75 ++++++++++++------------------ 1 file changed, 29 insertions(+), 46 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3