diff options
author | Özgür Kesim <oec-taler@kesim.org> | 2022-10-09 22:11:09 +0200 |
---|---|---|
committer | Özgür Kesim <oec-taler@kesim.org> | 2022-10-09 22:11:09 +0200 |
commit | 956e3c3065ddb762dbe01fd720cc5ef403232564 (patch) | |
tree | c96fca3c50cfb7b45cd4538a3c004a78ca888a9a /src/extensions/extensions.c | |
parent | 18d8dcd1f94ff5e5c314e14fc90c6faca7549ff9 (diff) |
WIP: policy handling advancements
- introduction of policy states.
- introduction of default state on timeout.
- introduction of TALER_PolicyFulfilmentOutcome
- parsing for policy_details now also provides default state on timeout.
- introduction of check_serial as preflight func before heavy operations
in policy post handler
- brandt auction now returns outcomes.
Diffstat (limited to 'src/extensions/extensions.c')
-rw-r--r-- | src/extensions/extensions.c | 72 |
1 files changed, 67 insertions, 5 deletions
diff --git a/src/extensions/extensions.c b/src/extensions/extensions.c index 52f9061a..cfc10940 100644 --- a/src/extensions/extensions.c +++ b/src/extensions/extensions.c @@ -353,13 +353,38 @@ TALER_extensions_load_manifests ( } +/* + * Policy related + */ + +static char *fulfilment2str[] = { + [TALER_PolicyFulfilmentPending] = "Pending", + [TALER_PolicyFulfilmentSuccessTransfer] = "SuccessTransfer", + [TALER_PolicyFulfilmentSuccessRefreshable] = "SuccessRefreshable", + [TALER_PolicyFulfilmentFailureTransfer] = "FailureTransfer", + [TALER_PolicyFulfilmentFailureRefreshable] = "FailureRefreshable", + [TALER_PolicyFulfilmentTimeoutTransfer] = "TimeoutTransfer", + [TALER_PolicyFulfilmentTimeoutRefreshable] = "TimeoutRefreshable", +}; + +const char * +TALER_policy_fulfilment_state_str ( + enum TALER_PolicyFulfilmentState state) +{ + GNUNET_assert (TALER_PolicyFulfilmentStateMax >= state); + return fulfilment2str[state]; +} + + enum GNUNET_GenericReturnValue -TALER_extensions_serial_from_policy_details ( +TALER_extensions_extract_meta_data_from_policy_details ( const json_t *policy_details, struct GNUNET_HashCode *serial, struct GNUNET_TIME_Timestamp *deadline, + enum TALER_PolicyFulfilmentState *state_on_deadline, const char **error_hint) { + enum GNUNET_GenericReturnValue ret; const struct TALER_Extension *extension; const json_t *jtype; const char *type; @@ -399,11 +424,48 @@ TALER_extensions_serial_from_policy_details ( } *deadline = GNUNET_TIME_UNIT_FOREVER_TS; - return extension->parse_policy_details (policy_details, - serial, - deadline, - error_hint); + ret = extension->parse_policy_details (policy_details, + serial, + deadline, + state_on_deadline, + error_hint); + + GNUNET_assert ((TALER_PolicyFulfilmentTimeoutRefreshable == + *state_on_deadline) || + (TALER_PolicyFulfilmentTimeoutTransfer == + *state_on_deadline)); + + return ret; + +} + + +struct TALER_PolicyFulfilmentOutcome * +TALER_policy_fulfilment_outcome_new (size_t len) +{ + struct TALER_PolicyFulfilmentOutcome *out; + + out = GNUNET_new (struct TALER_PolicyFulfilmentOutcome); + out->len = len; + out->positions = GNUNET_new_array (len, + struct + TALER_PolicyFulfilmentOutcomePosition); + + return out; +} + + +void +TALER_policy_fulfilment_outcome_free ( + struct TALER_PolicyFulfilmentOutcome *outcome) +{ + if (NULL == outcome) + return; + + if (NULL != outcome->positions) + GNUNET_free (outcome->positions); + GNUNET_free (outcome); } |