diff options
Diffstat (limited to 'src/exchange-lib')
-rw-r--r-- | src/exchange-lib/exchange_api_handle.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/exchange-lib/exchange_api_handle.c b/src/exchange-lib/exchange_api_handle.c index 590d4de99..96ae45b37 100644 --- a/src/exchange-lib/exchange_api_handle.c +++ b/src/exchange-lib/exchange_api_handle.c @@ -497,7 +497,10 @@ decode_keys_json (const json_t *resp_obj, struct GNUNET_HashContext *hash_context; struct TALER_ExchangePublicKeyP pub; - memset (key_data, 0, sizeof (struct TALER_EXCHANGE_Keys)); + /* FIXME: #4840: handle incremental / cherry-picked /keys! */ + memset (key_data, + 0, + sizeof (struct TALER_EXCHANGE_Keys)); if (JSON_OBJECT != json_typeof (resp_obj)) return GNUNET_SYSERR; @@ -602,7 +605,8 @@ decode_keys_json (const json_t *resp_obj, key_data->num_auditors = len; } } - + key_data->last_issue_date = list_issue_date; + /* Validate signature... */ ks.purpose.size = htonl (sizeof (ks)); ks.purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_KEY_SET); @@ -987,7 +991,22 @@ request_keys (struct TALER_EXCHANGE_Handle *exchange) GNUNET_assert (NULL == exchange->kr); kr = GNUNET_new (struct KeysRequest); kr->exchange = exchange; - kr->url = MAH_path_to_url (exchange, "/keys"); + if (GNUNET_YES == MAH_handle_is_ready (exchange)) + { + char *arg; + + GNUNET_asprintf (&arg, + "/keys?last_issue_date=%llu", + (unsigned long long) exchange->key_data.last_issue_date.abs_value_us); + kr->url = MAH_path_to_url (exchange, + arg); + GNUNET_free (arg); + } + else + { + kr->url = MAH_path_to_url (exchange, + "/keys"); + } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Requesting keys with URL `%s'.\n", kr->url); |