preparations for #4840

This commit is contained in:
Christian Grothoff 2017-06-29 20:46:52 +02:00
parent 0ba88250a9
commit f048de9782
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 65 additions and 6 deletions

View File

@ -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);

View File

@ -661,7 +661,6 @@ reload_auditor_iter (void *cls,
const struct TALER_DenominationKeyValidityPS *dki)
{
struct TEH_KS_StateHandle *ctx = cls;
unsigned int i;
unsigned int keep;
const struct TALER_AuditorSignatureP *kept_asigs[dki_len];
const struct TALER_DenominationKeyValidityPS *kept_dkis[dki_len];
@ -678,7 +677,7 @@ reload_auditor_iter (void *cls,
/* Filter the auditor information for those for which the
keys actually match the denomination keys that are active right now */
keep = 0;
for (i=0;i<dki_len;i++)
for (unsigned int i=0;i<dki_len;i++)
{
if (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_contains (ctx->denomkey_map,
@ -1274,8 +1273,36 @@ TEH_KS_handler_keys (struct TEH_RequestHandler *rh,
char *json;
size_t json_len;
int comp;
const char *have;
struct GNUNET_TIME_Absolute last_issue_date;
have = MHD_lookup_connection_value (connection,
MHD_GET_ARGUMENT_KIND,
"last_issue_date");
if (NULL != have)
{
unsigned long long haven;
if (1 !=
sscanf (have,
"%llu",
&haven))
{
GNUNET_break_op (0);
return TEH_RESPONSE_reply_arg_invalid (connection,
TALER_EC_KEYS_HAVE_NOT_NUMERIC,
"have");
}
last_issue_date.abs_value_us = (uint64_t) haven;
}
else
{
last_issue_date.abs_value_us = 0LLU;
}
key_state = TEH_KS_acquire ();
/* FIXME: #4840: compute /keys delta from last_issue_date */
(void) last_issue_date;
comp = MHD_NO;
if (NULL != key_state->keys_jsonz)
comp = TEH_RESPONSE_can_compress (connection);

View File

@ -895,7 +895,13 @@ enum TALER_ErrorCode
*/
TALER_EC_PAYBACK_COIN_BALANCE_NEGATIVE = 1857,
/**
* The "have" parameter was not a natural number.
* This reponse is provied with an HTTP status code of
* MHD_HTTP_BAD_REQUEST.
*/
TALER_EC_KEYS_HAVE_NOT_NUMERIC = 1900,
/* *********** Merchant backend error codes ********* */

View File

@ -205,6 +205,13 @@ struct TALER_EXCHANGE_Keys
*/
char *version;
/**
* Timestamp indicating the /keys generation. Monotonically
* increasing. Used to fetch /keys incrementally. Set from
* the "list_issue_date" timestamp of /keys.
*/
struct GNUNET_TIME_Absolute last_issue_date;
/**
* Length of the @e sign_keys array.
*/