diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_contract.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_contract.c | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/backend/taler-merchant-httpd_contract.c b/src/backend/taler-merchant-httpd_contract.c index f05c97d5..e7c7ac49 100644 --- a/src/backend/taler-merchant-httpd_contract.c +++ b/src/backend/taler-merchant-httpd_contract.c @@ -308,8 +308,9 @@ parse_token_families (void *cls, struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_array_const ("keys", &keys), - GNUNET_JSON_spec_bool ("critical", - &family.critical), + GNUNET_JSON_spec_bool ("critical", + &family.critical), + GNUNET_JSON_spec_end () /* TODO: Figure out if these fields should be 'const' */ // GNUNET_JSON_spec_string ("description", // &family.description), @@ -415,4 +416,43 @@ TALER_JSON_spec_token_families (const char *name, }; return ret; +} + +enum GNUNET_GenericReturnValue +TMH_find_token_family_key (const char *slug, + struct GNUNET_TIME_Timestamp valid_after, + struct TALER_MerchantContractTokenFamily *families, + unsigned int families_len, + struct TALER_MerchantContractTokenFamily *family, + struct TALER_MerchantContractTokenFamilyKey *key) +{ + for (unsigned int i = 0; i < families_len; i++) + { + if (0 != strcmp (families[i].slug, slug)) + { + continue; + } + if (NULL != family) + { + *family = families[i]; + } + for (unsigned int k = 0; k < family->keys_len; k++) + { + if (GNUNET_TIME_timestamp_cmp(family->keys[k].valid_after, + ==, + valid_after)) + { + if (NULL != key) + { + *key = family->keys[k]; + } + return GNUNET_OK; + } + } + /* matching family found, but no key. */ + return GNUNET_NO; + } + + /* no matching family found */ + return GNUNET_NO; }
\ No newline at end of file |