aboutsummaryrefslogtreecommitdiff
path: root/src/extensions/extensions.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/extensions/extensions.c')
-rw-r--r--src/extensions/extensions.c72
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);
}