commit 833fb1d69831289a221e4319776aa888f5a9e954
parent 88e3d75eae7c65b0aa0a5815f9f291564b6418f8
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date: Fri, 23 Feb 2024 14:05:30 +0100
Merge remote-tracking branch 'refs/remotes/origin/master'
Diffstat:
13 files changed, 129 insertions(+), 124 deletions(-)
diff --git a/src/donau/donau-httpd_charity_delete.c b/src/donau/donau-httpd_charity_delete.c
@@ -59,7 +59,7 @@ DH_handler_charity_delete (
enum GNUNET_DB_QueryStatus qs;
qs = DH_plugin->do_charity_delete (DH_plugin->cls,
- charity_id);
+ (uint64_t) charity_id);
switch (qs)
{
case GNUNET_DB_STATUS_HARD_ERROR:
@@ -78,8 +78,11 @@ DH_handler_charity_delete (
NULL,
0);
}
+ return TALER_MHD_reply_with_error (rc->connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_FETCH_FAILED,
+ NULL);
}
-
}
diff --git a/src/donau/donau-httpd_get-charity.c b/src/donau/donau-httpd_get-charity.c
@@ -64,7 +64,7 @@ DH_handler_charity_get (
MHD_RESULT result;
qs = DH_plugin->lookup_charity (DH_plugin->cls,
- charity_id,
+ (uint64_t) charity_id,
&meta);
switch (qs)
{
diff --git a/src/donau/donau-httpd_keys.c b/src/donau/donau-httpd_keys.c
@@ -645,7 +645,8 @@ finish_keys_response (struct DH_KeyStateHandle *ksh)
{
GNUNET_log (
GNUNET_ERROR_TYPE_WARNING,
- "No donation unit keys available. Refusing to generate /keys response.\n");
+ "No donation unit keys available. Refusing to generate /keys response.\n")
+ ;
GNUNET_CRYPTO_hash_context_abort (hash_context);
}
@@ -1612,112 +1613,113 @@ DH_RESPONSE_reply_not_modified (struct MHD_Connection *connection,
}
-// MHD_RESULT
-// DH_keys_get_handler (struct DH_RequestContext *rc,
-// const char *const args[])
-// {
-// struct GNUNET_TIME_Timestamp last_issue_date;
-// const char *etag;
-
-// etag = MHD_lookup_connection_value (rc->connection,
-// MHD_HEADER_KIND,
-// MHD_HTTP_HEADER_IF_NONE_MATCH);
-// (void) args;
-// // {
-// // const char *have_cherrypick;
-
-// // have_cherrypick = MHD_lookup_connection_value (rc->connection,
-// // MHD_GET_ARGUMENT_KIND,
-// // "last_issue_date");
-// // if (NULL != have_cherrypick)
-// // {
-// // unsigned long long cherrypickn;
-
-// // if (1 !=
-// // sscanf (have_cherrypick,
-// // "%llu",
-// // &cherrypickn))
-// // {
-// // GNUNET_break_op (0);
-// // return TALER_MHD_reply_with_error (rc->connection,
-// // MHD_HTTP_BAD_REQUEST,
-// // TALER_EC_GENERIC_PARAMETER_MALFORMED,
-// // have_cherrypick);
-// // }
-// // /* The following multiplication may overflow; but this should not really
-// // be a problem, as giving back 'older' data than what the client asks for
-// // (given that the client asks for data in the distant future) is not
-// // problematic */
-// // last_issue_date = GNUNET_TIME_timestamp_from_s (cherrypickn);
-// // }
-// // else
-// // {
-// // last_issue_date = GNUNET_TIME_UNIT_ZERO_TS;
-// // }
-// // }
-
-// {
-// struct DH_KeyStateHandle *ksh;
-// const struct KeysResponseData *krd;
-
-// ksh = DH_keys_get_state ();
-// if ( (NULL == ksh) ||
-// (0 == ksh->krd_array_length) )
-// {
-// if ( ( (SKR_LIMIT == skr_size) &&
-// (rc->connection == skr_connection) ) ||
-// DH_suicide)
-// {
-// return TALER_MHD_reply_with_error (
-// rc->connection,
-// MHD_HTTP_SERVICE_UNAVAILABLE,
-// TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING,
-// DH_suicide
-// ? "server terminating"
-// : "too many connections suspended waiting on /keys");
-// }
-// return suspend_request (rc->connection);
-// }
-// krd = bsearch (&last_issue_date,
-// ksh->krd_array,
-// ksh->krd_array_length,
-// sizeof (struct KeysResponseData),
-// &krd_search_comparator);
-// GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-// "Filtering /keys by cherry pick date %s found entry %u/%u\n",
-// GNUNET_TIME_timestamp2s (last_issue_date),
-// (unsigned int) (krd - ksh->krd_array),
-// ksh->krd_array_length);
-// if ( (NULL == krd) &&
-// (ksh->krd_array_length > 0) )
-// {
-// if (! GNUNET_TIME_absolute_is_zero (last_issue_date.abs_time))
-// GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-// "Client provided invalid cherry picking timestamp %s, returning full response\n",
-// GNUNET_TIME_timestamp2s (last_issue_date));
-// krd = &ksh->krd_array[ksh->krd_array_length - 1];
-// }
-// if (NULL == krd)
-// {
-// /* Likely keys not ready *yet*.
-// Wait until they are. */
-// return suspend_request (rc->connection);
-// }
-// if ( (NULL != etag) &&
-// (0 == strcmp (etag,
-// krd->etag)) )
-// return DH_RESPONSE_reply_not_modified (rc->connection,
-// krd->etag,
-// &setup_general_response_headers,
-// ksh);
-
-// return MHD_queue_response (rc->connection,
-// MHD_HTTP_OK,
-// (MHD_YES ==
-// TALER_MHD_can_compress (rc->connection))
-// ? krd->response_compressed
-// : krd->response_uncompressed);
-// }
-// }
+MHD_RESULT
+DH_keys_get_handler (struct DH_RequestContext *rc,
+ const char *const args[])
+{
+ struct GNUNET_TIME_Timestamp last_issue_date;
+ const char *etag;
+
+ etag = MHD_lookup_connection_value (rc->connection,
+ MHD_HEADER_KIND,
+ MHD_HTTP_HEADER_IF_NONE_MATCH);
+ (void) args;
+ {
+ const char *have_cherrypick;
+
+ have_cherrypick = MHD_lookup_connection_value (rc->connection,
+ MHD_GET_ARGUMENT_KIND,
+ "last_issue_date");
+ if (NULL != have_cherrypick)
+ {
+ unsigned long long cherrypickn;
+
+ if (1 !=
+ sscanf (have_cherrypick,
+ "%llu",
+ &cherrypickn))
+ {
+ GNUNET_break_op (0);
+ return TALER_MHD_reply_with_error (rc->connection,
+ MHD_HTTP_BAD_REQUEST,
+ TALER_EC_GENERIC_PARAMETER_MALFORMED,
+ have_cherrypick);
+ }
+ /* The following multiplication may overflow; but this should not really
+ be a problem, as giving back 'older' data than what the client asks for
+ (given that the client asks for data in the distant future) is not
+ problematic */
+ last_issue_date = GNUNET_TIME_timestamp_from_s (cherrypickn);
+ }
+ else
+ {
+ last_issue_date = GNUNET_TIME_UNIT_ZERO_TS;
+ }
+ }
+
+ {
+ struct DH_KeyStateHandle *ksh;
+ const struct KeysResponseData *krd;
+
+ ksh = DH_keys_get_state ();
+ if ( (NULL == ksh) ||
+ (0 == ksh->krd_array_length) )
+ {
+ if ( ( (SKR_LIMIT == skr_size) &&
+ (rc->connection == skr_connection) ) ||
+ DH_suicide)
+ {
+ return TALER_MHD_reply_with_error (
+ rc->connection,
+ MHD_HTTP_SERVICE_UNAVAILABLE,
+ TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING,
+ DH_suicide
+ ? "server terminating"
+ : "too many connections suspended waiting on /keys");
+ }
+ return suspend_request (rc->connection);
+ }
+ krd = bsearch (&last_issue_date,
+ ksh->krd_array,
+ ksh->krd_array_length,
+ sizeof (struct KeysResponseData),
+ &krd_search_comparator);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Filtering /keys by cherry pick date %s found entry %u/%u\n",
+ GNUNET_TIME_timestamp2s (last_issue_date),
+ (unsigned int) (krd - ksh->krd_array),
+ ksh->krd_array_length);
+ if ( (NULL == krd) &&
+ (ksh->krd_array_length > 0) )
+ {
+ if (! GNUNET_TIME_absolute_is_zero (last_issue_date.abs_time))
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Client provided invalid cherry picking timestamp %s, returning full response\n",
+ GNUNET_TIME_timestamp2s (last_issue_date));
+ krd = &ksh->krd_array[ksh->krd_array_length - 1];
+ }
+ if (NULL == krd)
+ {
+ /* Likely keys not ready *yet*.
+ Wait until they are. */
+ return suspend_request (rc->connection);
+ }
+ if ( (NULL != etag) &&
+ (0 == strcmp (etag,
+ krd->etag)) )
+ return DH_RESPONSE_reply_not_modified (rc->connection,
+ krd->etag,
+ &setup_general_response_headers,
+ ksh);
+
+ return MHD_queue_response (rc->connection,
+ MHD_HTTP_OK,
+ (MHD_YES ==
+ TALER_MHD_can_compress (rc->connection))
+ ? krd->response_compressed
+ : krd->response_uncompressed);
+ }
+}
+
/* end of donau-httpd_keys.c */
diff --git a/src/donaudb/pg_do_charity_delete.c b/src/donaudb/pg_do_charity_delete.c
@@ -29,7 +29,7 @@
enum GNUNET_DB_QueryStatus
DH_PG_do_charity_delete (
void *cls,
- unsigned long long charity_id)
+ uint64_t charity_id)
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
diff --git a/src/donaudb/pg_do_charity_delete.h b/src/donaudb/pg_do_charity_delete.h
@@ -36,6 +36,6 @@
enum GNUNET_DB_QueryStatus
DH_PG_do_charity_delete (
void *cls,
- unsigned long long charity_id);
+ uint64_t charity_id);
#endif
diff --git a/src/donaudb/pg_get_history.c b/src/donaudb/pg_get_history.c
@@ -65,7 +65,7 @@ get_history_cb (void *cls,
for (unsigned int i = 0; i < num_results; i++)
{
- unsigned long long charity_id;
+ uint64_t charity_id;
struct TALER_Amount final_amount;
uint64_t donation_year;
diff --git a/src/donaudb/pg_insert_history_entry.c b/src/donaudb/pg_insert_history_entry.c
@@ -27,7 +27,7 @@
enum GNUNET_DB_QueryStatus
DH_PG_insert_history_entry (void *cls,
- const unsigned long long charity_id,
+ const uint64_t charity_id,
const struct TALER_Amount *final_amount,
const uint64_t donation_year)
{
diff --git a/src/donaudb/pg_insert_history_entry.h b/src/donaudb/pg_insert_history_entry.h
@@ -36,7 +36,7 @@
*/
enum GNUNET_DB_QueryStatus
DH_PG_insert_history_entry (void *cls,
- const unsigned long long charity_id,
+ const uint64_t charity_id,
const struct TALER_Amount *final_amount,
const uint64_t donation_year);
diff --git a/src/donaudb/pg_insert_issued_receipt.c b/src/donaudb/pg_insert_issued_receipt.c
@@ -29,7 +29,7 @@
enum GNUNET_DB_QueryStatus
DH_PG_insert_issued_receipt (void *cls,
const struct DONAU_CharitySignatureP *charity_sig,
- const unsigned long long charity_id,
+ const uint64_t charity_id,
const struct DONAU_DonationReceiptHashP *h_receipt,
const struct TALER_Amount *amount)
{
diff --git a/src/donaudb/pg_insert_issued_receipt.h b/src/donaudb/pg_insert_issued_receipt.h
@@ -38,7 +38,7 @@
enum GNUNET_DB_QueryStatus
DH_PG_insert_issued_receipt (void *cls,
const struct DONAU_CharitySignatureP *charity_sig,
- const unsigned long long charity_id,
+ const uint64_t charity_id,
const struct DONAU_DonationReceiptHashP *h_receipt,
const struct TALER_Amount *amount);
diff --git a/src/donaudb/pg_lookup_charity.c b/src/donaudb/pg_lookup_charity.c
@@ -28,7 +28,7 @@
enum GNUNET_DB_QueryStatus
DH_PG_lookup_charity (
void *cls,
- unsigned long long charity_id,
+ uint64_t charity_id,
struct DONAUDB_CharityMetaData *meta)
{
struct PostgresClosure *pg = cls;
diff --git a/src/donaudb/pg_lookup_charity.h b/src/donaudb/pg_lookup_charity.h
@@ -34,7 +34,7 @@
enum GNUNET_DB_QueryStatus
DH_PG_lookup_charity (
void *cls,
- unsigned long long charity_id,
+ uint64_t charity_id,
struct DONAUDB_CharityMetaData *meta);
#endif
diff --git a/src/include/donaudb_plugin.h b/src/include/donaudb_plugin.h
@@ -384,7 +384,7 @@ struct DONAUDB_Plugin
enum GNUNET_DB_QueryStatus
(*lookup_charity)(
void *cls,
- unsigned long long charity_id,
+ uint64_t charity_id,
struct DONAUDB_CharityMetaData *meta);
/**
@@ -399,7 +399,7 @@ struct DONAUDB_Plugin
enum GNUNET_DB_QueryStatus
(*do_charity_delete)(
void *cls,
- unsigned long long charity_id);
+ uint64_t charity_id);
/**
* Get charities.
@@ -516,7 +516,7 @@ struct DONAUDB_Plugin
enum GNUNET_DB_QueryStatus
(*insert_history_entry) (
void *cls,
- const unsigned long long charity_id,
+ const uint64_t charity_id,
const struct TALER_Amount *final_amount,
const uint64_t donation_year);
@@ -534,7 +534,7 @@ struct DONAUDB_Plugin
(*insert_issued_receipt) (
void *cls,
const struct DONAU_CharitySignatureP *charity_sig,
- const unsigned long long charity_id,
+ const uint64_t charity_id,
const struct DONAU_DonationReceiptHashP *h_receipt,
const struct TALER_Amount *amount);