donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit 7dc8c45a07d31f7da8db8390281c9e1aebc1c4e3
parent 0faf3be9aa142d35591f750a1c9e73911798b832
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date:   Tue, 27 Feb 2024 11:57:43 +0100

[lib] work on charity get

Diffstat:
Msrc/include/donau_service.h | 9++++-----
Msrc/lib/donau_api_charity_get.c | 87+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Msrc/lib/donau_api_handle.c | 8++++----
Msrc/testing/testing_api_cmd_charity_get.c | 2+-
4 files changed, 54 insertions(+), 52 deletions(-)

diff --git a/src/include/donau_service.h b/src/include/donau_service.h @@ -838,7 +838,7 @@ struct DONAU_GetCharitiesResponse /** * Charity status information. */ - struct DONAU_CharitySummary *charity; + struct DONAU_CharitySummary charity; /** * Number of charities @@ -916,7 +916,7 @@ struct DONAU_Charity /** * public key of the charity */ - struct DONAU_CharitySignatureP charity_pub; + struct DONAU_CharityPublicKeyP charity_pub; /** * Max donation amout for this charitiy and @e current_year. @@ -931,7 +931,7 @@ struct DONAU_Charity /** * current year */ - uint32_t current_year; + uint64_t current_year; }; @@ -1290,4 +1290,4 @@ void DONAU_charity_post_delete ( struct DONAU_CharityDeleteHandle *rgh); -#endif -\ No newline at end of file +#endif diff --git a/src/lib/donau_api_charity_get.c b/src/lib/donau_api_charity_get.c @@ -72,7 +72,9 @@ struct DONAU_CharityGetHandle */ static enum GNUNET_GenericReturnValue handle_charity_get_ok (const json_t *resp_obj, - struct DONAU_CharityGetHandle *cgh) + struct DONAU_CharityGetHandle *cgh, + struct DONAU_Charity *charity, + struct DONAU_GetCharityResponse *gcresp) { // const json_t *charity_hist_array; const char *name; @@ -81,22 +83,18 @@ handle_charity_get_ok (const json_t *resp_obj, GNUNET_break_op (0); return GNUNET_SYSERR; } - struct DONAU_GetCharityResponse charity_resp = { - .hr.reply = resp_obj, - .hr.http_status = MHD_HTTP_OK - }; + struct GNUNET_JSON_Specification spec[] = { - GNUNET_JSON_spec_string ("name", - &name), - GNUNET_JSON_spec_fixed_auto ("charity_pub", - &charity_resp.details.ok.charity->charity_pub), - TALER_JSON_spec_amount_any ("max_per_year", - &charity_resp.details.ok.charity->max_per_year), - TALER_JSON_spec_amount_any ("receipts_to_date", - &charity_resp.details.ok.charity-> - receipts_to_date), - GNUNET_JSON_spec_uint32 ("current_year", - &charity_resp.details.ok.charity->current_year), +// GNUNET_JSON_spec_fixed_auto ("charity_pub", +// &charity->charity_pub), +// GNUNET_JSON_spec_string ("name", &name), +// TALER_JSON_spec_amount_any ("max_per_year", +// &charity->max_per_year), +// TALER_JSON_spec_amount_any ("receipts_to_date", +// &charity-> +// receipts_to_date), +// GNUNET_JSON_spec_uint64 ("current_year", +// &charity->current_year), GNUNET_JSON_spec_end () }; if (GNUNET_OK != @@ -108,7 +106,7 @@ handle_charity_get_ok (const json_t *resp_obj, GNUNET_break_op (0); return GNUNET_SYSERR; } - charity_resp.details.ok.charity->name = GNUNET_strdup (name); + //charity->name = GNUNET_strdup (name); /* parse the charity history data */ // charity_resp.details.ok.charity->num_hist @@ -143,7 +141,7 @@ handle_charity_get_ok (const json_t *resp_obj, // } cgh->cb (cgh->cb_cls, - &charity_resp); + gcresp); cgh->cb = NULL; return GNUNET_OK; } @@ -180,7 +178,9 @@ handle_charity_get_finished (void *cls, case MHD_HTTP_OK: if (GNUNET_OK != handle_charity_get_ok (j, - cgh)) + cgh, + &gcresp.details.ok.charity, + &gcresp)) { gcresp.hr.http_status = 0; gcresp.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED; @@ -248,18 +248,26 @@ DONAU_charity_get ( cgh->cb_cls = cb_cls; char arg_str[sizeof (id) * 2 + 32]; char timeout_str[32]; - + unsigned int tms + = (unsigned int) timeout.rel_value_us + / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us; GNUNET_snprintf (timeout_str, - sizeof (timeout_str), - "%llu", - (unsigned long long) - (timeout.rel_value_us - / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us)); - GNUNET_snprintf (arg_str, - sizeof (arg_str), - "charities/%llu", - (unsigned long long) - id); + sizeof (timeout_str), + "%u", + tms); + if (tms == 0) + GNUNET_snprintf (arg_str, + sizeof (arg_str), + "charities/%llu", + (unsigned long long) + id); + else + GNUNET_snprintf (arg_str, + sizeof (arg_str), + "reserves/%llu?timeout_ms=%s", + (unsigned long long) + id, + timeout_str); cgh->url = TALER_url_join (url, arg_str, NULL); @@ -279,18 +287,13 @@ DONAU_charity_get ( GNUNET_free (cgh); return NULL; } - GNUNET_break (CURLE_OK == - curl_easy_setopt (eh, - CURLOPT_VERBOSE, - 1)); - GNUNET_break (CURLE_OK == - curl_easy_setopt (eh, - CURLOPT_TIMEOUT, - 120 /* seconds */)); - GNUNET_assert (CURLE_OK == - curl_easy_setopt (eh, - CURLOPT_HEADERDATA, - cgh)); + if (0 != tms) + { + GNUNET_break (CURLE_OK == + curl_easy_setopt (eh, + CURLOPT_TIMEOUT_MS, + (long) (tms + 100L))); + } cgh->job = GNUNET_CURL_job_add_with_ct_json (ctx, eh, &handle_charity_get_finished, diff --git a/src/lib/donau_api_handle.c b/src/lib/donau_api_handle.c @@ -614,10 +614,10 @@ DONAU_get_keys ( // curl_easy_setopt (eh, // CURLOPT_HEADERFUNCTION, // &header_cb)); - GNUNET_assert (CURLE_OK == - curl_easy_setopt (eh, - CURLOPT_HEADERDATA, - gkh)); +// GNUNET_assert (CURLE_OK == +// curl_easy_setopt (eh, +// CURLOPT_HEADERDATA, +// gkh)); gkh->job = GNUNET_CURL_job_add_with_ct_json (ctx, eh, &keys_completed_cb, diff --git a/src/testing/testing_api_cmd_charity_get.c b/src/testing/testing_api_cmd_charity_get.c @@ -165,7 +165,7 @@ status_run (void *cls, ss->cgh = DONAU_charity_get ( TALER_TESTING_interpreter_get_context (is), donau_url, - 1, + 4, bearer, ss->timeout, &charity_status_cb,