diff options
author | Özgür Kesim <oec-taler@kesim.org> | 2022-10-06 21:11:47 +0200 |
---|---|---|
committer | Özgür Kesim <oec-taler@kesim.org> | 2022-10-06 21:11:47 +0200 |
commit | b447506342c9792244e700d930618a8923142a13 (patch) | |
tree | 1996b2bd717c78f1543c9572a500b41aa6baa9ce /src/extensions/extensions.c | |
parent | 086c4a243f6a56e45d94b996afb85a15bafefc6f (diff) |
refinements of policy extension APIs
Diffstat (limited to 'src/extensions/extensions.c')
-rw-r--r-- | src/extensions/extensions.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/extensions/extensions.c b/src/extensions/extensions.c index 02137d31..64574fc2 100644 --- a/src/extensions/extensions.c +++ b/src/extensions/extensions.c @@ -353,4 +353,53 @@ TALER_extensions_load_manifests ( } +enum GNUNET_GenericReturnValue +TALER_extensions_from_policy_details ( + const json_t *policy_details, + const struct TALER_Extension **extension, + char **error_hint) +{ + const json_t *jtype; + const char *type; + + *extension = NULL; + *error_hint = NULL; + + if ((NULL == policy_details) || + (! json_is_object (policy_details))) + { + *error_hint = "invalid policy object"; + return GNUNET_SYSERR; + } + + jtype = json_object_get (policy_details, "type"); + if (NULL == jtype) + { + *error_hint = "no type in policy object"; + return GNUNET_SYSERR; + } + + type = json_string_value (jtype); + if (NULL == type) + { + *error_hint = "invalid type in policy object"; + return GNUNET_SYSERR; + } + + *extension = TALER_extensions_get_by_name (type); + if ((NULL == *extension) || + (NULL == (*extension)->parse_policy_details)) + { + GNUNET_break (0); + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Unsupported extension policy '%s' requested\n", + type); + *extension = NULL; + return GNUNET_NO; + } + + return GNUNET_OK; +} + + /* end of extensions.c */ |