summaryrefslogtreecommitdiff
path: root/src/reducer
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-10-13 13:12:25 +0200
committerFlorian Dold <florian@dold.me>2021-10-13 13:12:25 +0200
commite6ff49f4a95d462b8e18a8f93f623e502c804075 (patch)
tree196e8afb67ab06ab8a8b0dafc38815b80d7be545 /src/reducer
parentca2a2b904a74ca7a0e153932e88181f61cb9a118 (diff)
downloadanastasis-e6ff49f4a95d462b8e18a8f93f623e502c804075.tar.gz
anastasis-e6ff49f4a95d462b8e18a8f93f623e502c804075.tar.bz2
anastasis-e6ff49f4a95d462b8e18a8f93f623e502c804075.zip
do not transition into error states
Diffstat (limited to 'src/reducer')
-rw-r--r--src/reducer/anastasis_api_recovery_redux.c75
1 files changed, 29 insertions, 46 deletions
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;
}