From 458d1ac531f52e7802e054bfd151631af4d9d6e0 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 14 Jun 2020 15:17:11 +0200 Subject: clean up logic: use new EXCHANGE_YNA enum, avoid crazy macro construction to build URLs, use full power of TALER_url_join() instead --- src/lib/merchant_api_get_orders.c | 178 +++++++++++++------------------------- 1 file changed, 62 insertions(+), 116 deletions(-) (limited to 'src/lib/merchant_api_get_orders.c') diff --git a/src/lib/merchant_api_get_orders.c b/src/lib/merchant_api_get_orders.c index 1b65b995..9d1ac3e7 100644 --- a/src/lib/merchant_api_get_orders.c +++ b/src/lib/merchant_api_get_orders.c @@ -216,9 +216,9 @@ TALER_MERCHANT_orders_get ( { return TALER_MERCHANT_orders_get2 (ctx, backend_url, - TALER_MERCHANT_YNA_ALL, - TALER_MERCHANT_YNA_ALL, - TALER_MERCHANT_YNA_ALL, + TALER_EXCHANGE_YNA_ALL, + TALER_EXCHANGE_YNA_ALL, + TALER_EXCHANGE_YNA_ALL, GNUNET_TIME_UNIT_FOREVER_ABS, UINT64_MAX, -20, /* default is most recent 20 entries */ @@ -250,9 +250,9 @@ struct TALER_MERCHANT_OrdersGetHandle * TALER_MERCHANT_orders_get2 ( struct GNUNET_CURL_Context *ctx, const char *backend_url, - enum TALER_MERCHANT_YesNoAll paid, - enum TALER_MERCHANT_YesNoAll refunded, - enum TALER_MERCHANT_YesNoAll wired, + enum TALER_EXCHANGE_YesNoAll paid, + enum TALER_EXCHANGE_YesNoAll refunded, + enum TALER_EXCHANGE_YesNoAll wired, struct GNUNET_TIME_Absolute date, uint64_t start_row, int64_t delta, @@ -278,123 +278,69 @@ TALER_MERCHANT_orders_get2 ( /* build ogh->url with the various optional arguments */ { - struct GNUNET_Buffer buf = { 0 }; - bool first = true; - /** - * Macro to append @a a and @a b to @a buf, using - * the right separators between key (@a a) and - * value (@a b). Uses "first" to decide between - * using "?" and "&" as the separator. - * - * @param a a key - * @param b a value - */ -#define APPEND(a,b) \ - do { \ - if (first) \ - GNUNET_buffer_write_str (&buf, \ - "?"); \ - else \ - GNUNET_buffer_write_str (&buf, \ - "&"); \ - first = false; \ - GNUNET_buffer_write_str (&buf, (a)); \ - GNUNET_buffer_write_str (&buf, "="); \ - GNUNET_buffer_write_str (&buf, (b)); \ - } while (0) - - { - char *url; - - url = TALER_url_join (backend_url, - "private/orders", - NULL); - if (NULL == url) - goto finished; - GNUNET_buffer_write_str (&buf, - url); - GNUNET_free (url); - } - if (TALER_MERCHANT_YNA_ALL != paid) - APPEND ("paid", - (TALER_MERCHANT_YNA_YES == paid) ? "yes" : "no"); - if (TALER_MERCHANT_YNA_ALL != refunded) - APPEND ("refunded", - (TALER_MERCHANT_YNA_YES == refunded) ? "yes" : "no"); - if (TALER_MERCHANT_YNA_ALL != wired) - APPEND ("wired", - (TALER_MERCHANT_YNA_YES == wired) ? "yes" : "no"); + const char *dstr; + bool have_date; + bool have_srow; + char cbuf[30]; + char dbuf[30]; + char tbuf[30]; + + GNUNET_snprintf (tbuf, + sizeof (tbuf), + "%llu", + (unsigned long long) timeout_ms); + GNUNET_snprintf (dbuf, + sizeof (dbuf), + "%lld", + (long long) delta); + GNUNET_snprintf (cbuf, + sizeof (cbuf), + "%llu", + (unsigned long long) start_row); + dstr = GNUNET_STRINGS_absolute_time_to_string (date); if (delta > 0) { - if (0 != date.abs_value_us) - { - const char *str; - - str = GNUNET_STRINGS_absolute_time_to_string (date); - APPEND ("date", - str); - } - if (0 != start_row) - { - char cbuf[30]; - - GNUNET_snprintf (cbuf, - sizeof (cbuf), - "%llu", - (unsigned long long) start_row); - APPEND ("start", - cbuf); - } + have_date = (0 != date.abs_value_us); + have_srow = (0 != start_row); } else { - if (GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us != date.abs_value_us) - { - const char *str; - - str = GNUNET_STRINGS_absolute_time_to_string (date); - APPEND ("date", - str); - } - if (UINT64_MAX != start_row) - { - char cbuf[30]; - - GNUNET_snprintf (cbuf, - sizeof (cbuf), - "%llu", - (unsigned long long) start_row); - APPEND ("start", - cbuf); - } + have_date = (GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us != + date.abs_value_us); + have_srow = (UINT64_MAX != start_row); } - if (-20 != delta) - { - char cbuf[30]; - - GNUNET_snprintf (cbuf, - sizeof (cbuf), - "%lld", - (long long) delta); - APPEND ("delta", - cbuf); - } - if (0 != timeout_ms) - { - char cbuf[30]; - - GNUNET_snprintf (cbuf, - sizeof (cbuf), - "%llu", - (unsigned long long) timeout_ms); - APPEND ("timeout_ms", - cbuf); - } - ogh->url = GNUNET_buffer_reap_str (&buf); -#undef APPEND + ogh->url = TALER_url_join (backend_url, + "private/orders", + "paid", + (TALER_EXCHANGE_YNA_ALL != paid) + ? TALER_yna_to_string (paid) + : NULL, + "refunded", + (TALER_EXCHANGE_YNA_ALL != refunded) + ? TALER_yna_to_string (refunded) + : NULL, + "wired", + (TALER_EXCHANGE_YNA_ALL != wired) + ? TALER_yna_to_string (wired) + : NULL, + "date", + (have_date) + ? dstr + : NULL, + "start", + (have_srow) + ? cbuf + : NULL, + "delta", + (-20 != delta) + ? dbuf + : NULL, + "timeout_ms", + (0 != timeout_ms) + ? tbuf + : NULL, + NULL); } - -finished: if (NULL == ogh->url) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, -- cgit v1.2.3