preparations for #4840
This commit is contained in:
parent
0ba88250a9
commit
f048de9782
@ -497,7 +497,10 @@ decode_keys_json (const json_t *resp_obj,
|
|||||||
struct GNUNET_HashContext *hash_context;
|
struct GNUNET_HashContext *hash_context;
|
||||||
struct TALER_ExchangePublicKeyP pub;
|
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))
|
if (JSON_OBJECT != json_typeof (resp_obj))
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
|
|
||||||
@ -602,7 +605,8 @@ decode_keys_json (const json_t *resp_obj,
|
|||||||
key_data->num_auditors = len;
|
key_data->num_auditors = len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
key_data->last_issue_date = list_issue_date;
|
||||||
|
|
||||||
/* Validate signature... */
|
/* Validate signature... */
|
||||||
ks.purpose.size = htonl (sizeof (ks));
|
ks.purpose.size = htonl (sizeof (ks));
|
||||||
ks.purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_KEY_SET);
|
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);
|
GNUNET_assert (NULL == exchange->kr);
|
||||||
kr = GNUNET_new (struct KeysRequest);
|
kr = GNUNET_new (struct KeysRequest);
|
||||||
kr->exchange = exchange;
|
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,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"Requesting keys with URL `%s'.\n",
|
"Requesting keys with URL `%s'.\n",
|
||||||
kr->url);
|
kr->url);
|
||||||
|
@ -661,7 +661,6 @@ reload_auditor_iter (void *cls,
|
|||||||
const struct TALER_DenominationKeyValidityPS *dki)
|
const struct TALER_DenominationKeyValidityPS *dki)
|
||||||
{
|
{
|
||||||
struct TEH_KS_StateHandle *ctx = cls;
|
struct TEH_KS_StateHandle *ctx = cls;
|
||||||
unsigned int i;
|
|
||||||
unsigned int keep;
|
unsigned int keep;
|
||||||
const struct TALER_AuditorSignatureP *kept_asigs[dki_len];
|
const struct TALER_AuditorSignatureP *kept_asigs[dki_len];
|
||||||
const struct TALER_DenominationKeyValidityPS *kept_dkis[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
|
/* Filter the auditor information for those for which the
|
||||||
keys actually match the denomination keys that are active right now */
|
keys actually match the denomination keys that are active right now */
|
||||||
keep = 0;
|
keep = 0;
|
||||||
for (i=0;i<dki_len;i++)
|
for (unsigned int i=0;i<dki_len;i++)
|
||||||
{
|
{
|
||||||
if (GNUNET_YES ==
|
if (GNUNET_YES ==
|
||||||
GNUNET_CONTAINER_multihashmap_contains (ctx->denomkey_map,
|
GNUNET_CONTAINER_multihashmap_contains (ctx->denomkey_map,
|
||||||
@ -1274,8 +1273,36 @@ TEH_KS_handler_keys (struct TEH_RequestHandler *rh,
|
|||||||
char *json;
|
char *json;
|
||||||
size_t json_len;
|
size_t json_len;
|
||||||
int comp;
|
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 ();
|
key_state = TEH_KS_acquire ();
|
||||||
|
/* FIXME: #4840: compute /keys delta from last_issue_date */
|
||||||
|
(void) last_issue_date;
|
||||||
comp = MHD_NO;
|
comp = MHD_NO;
|
||||||
if (NULL != key_state->keys_jsonz)
|
if (NULL != key_state->keys_jsonz)
|
||||||
comp = TEH_RESPONSE_can_compress (connection);
|
comp = TEH_RESPONSE_can_compress (connection);
|
||||||
|
@ -895,7 +895,13 @@ enum TALER_ErrorCode
|
|||||||
*/
|
*/
|
||||||
TALER_EC_PAYBACK_COIN_BALANCE_NEGATIVE = 1857,
|
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 ********* */
|
/* *********** Merchant backend error codes ********* */
|
||||||
|
|
||||||
|
@ -205,6 +205,13 @@ struct TALER_EXCHANGE_Keys
|
|||||||
*/
|
*/
|
||||||
char *version;
|
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.
|
* Length of the @e sign_keys array.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user