summaryrefslogtreecommitdiff
path: root/src/lib/merchant_api_merchant_get_order.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-07-11 15:16:15 +0200
committerChristian Grothoff <christian@grothoff.org>2022-07-11 15:16:15 +0200
commit962f9e5f6494da301f491623c289d7fd2c16d1d6 (patch)
tree74d16483081d91772a8e16bd3303f8186b062f11 /src/lib/merchant_api_merchant_get_order.c
parent6741a252e5f69cae36a2119fd183b26539863784 (diff)
downloadmerchant-962f9e5f6494da301f491623c289d7fd2c16d1d6.tar.gz
merchant-962f9e5f6494da301f491623c289d7fd2c16d1d6.tar.bz2
merchant-962f9e5f6494da301f491623c289d7fd2c16d1d6.zip
improve C API
Diffstat (limited to 'src/lib/merchant_api_merchant_get_order.c')
-rw-r--r--src/lib/merchant_api_merchant_get_order.c220
1 files changed, 106 insertions, 114 deletions
diff --git a/src/lib/merchant_api_merchant_get_order.c b/src/lib/merchant_api_merchant_get_order.c
index 167e46be..f3181a3c 100644
--- a/src/lib/merchant_api_merchant_get_order.c
+++ b/src/lib/merchant_api_merchant_get_order.c
@@ -72,47 +72,48 @@ struct TALER_MERCHANT_OrderMerchantGetHandle
* the response and call the callback.
*
* @param omgh handle for the request
- * @param[in,out] hr HTTP response we got
+ * @param[in,out] osr HTTP response we got
*/
static void
handle_unpaid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
- struct TALER_MERCHANT_HttpResponse *hr)
+ struct TALER_MERCHANT_OrderStatusResponse *osr)
{
- struct TALER_MERCHANT_OrderStatusResponse osr = {
- .status = TALER_MERCHANT_OSC_UNPAID
- };
struct GNUNET_JSON_Specification spec[] = {
- TALER_JSON_spec_amount_any ("total_amount",
- &osr.details.unpaid.contract_amount),
+ TALER_JSON_spec_amount_any (
+ "total_amount",
+ &osr->details.success.details.unpaid.contract_amount),
GNUNET_JSON_spec_mark_optional (
- GNUNET_JSON_spec_string ("already_paid_order_id",
- &osr.details.unpaid.already_paid_order_id),
+ GNUNET_JSON_spec_string (
+ "already_paid_order_id",
+ &osr->details.success.details.unpaid.already_paid_order_id),
NULL),
- GNUNET_JSON_spec_string ("taler_pay_uri",
- &osr.details.unpaid.taler_pay_uri),
- GNUNET_JSON_spec_string ("summary",
- &osr.details.unpaid.summary),
- GNUNET_JSON_spec_timestamp ("creation_time",
- &osr.details.unpaid.creation_time),
+ GNUNET_JSON_spec_string (
+ "taler_pay_uri",
+ &osr->details.success.details.unpaid.taler_pay_uri),
+ GNUNET_JSON_spec_string (
+ "summary",
+ &osr->details.success.details.unpaid.summary),
+ GNUNET_JSON_spec_timestamp (
+ "creation_time",
+ &osr->details.success.details.unpaid.creation_time),
GNUNET_JSON_spec_end ()
};
if (GNUNET_OK !=
- GNUNET_JSON_parse (hr->reply,
+ GNUNET_JSON_parse (osr->hr.reply,
spec,
NULL, NULL))
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
return;
}
+ osr->details.success.status = TALER_MERCHANT_OSC_UNPAID;
omgh->cb (omgh->cb_cls,
- hr,
- &osr);
+ osr);
}
@@ -122,37 +123,34 @@ handle_unpaid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
* paid. Parse the response and call the callback.
*
* @param omgh handle for the request
- * @param[in,out] hr HTTP response we got
+ * @param[in,out] osr HTTP response we got
*/
static void
handle_claimed (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
- struct TALER_MERCHANT_HttpResponse *hr)
+ struct TALER_MERCHANT_OrderStatusResponse *osr)
{
- struct TALER_MERCHANT_OrderStatusResponse osr = {
- .status = TALER_MERCHANT_OSC_CLAIMED
- };
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_json ("contract_terms",
- (json_t **) &osr.details.claimed.contract_terms),
+ (json_t **) &osr->details.success.details.claimed.
+ contract_terms),
GNUNET_JSON_spec_end ()
};
if (GNUNET_OK !=
- GNUNET_JSON_parse (hr->reply,
+ GNUNET_JSON_parse (osr->hr.reply,
spec,
NULL, NULL))
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
return;
}
+ osr->details.success.status = TALER_MERCHANT_OSC_CLAIMED;
omgh->cb (omgh->cb_cls,
- hr,
- &osr);
+ osr);
GNUNET_JSON_parse_free (spec);
}
@@ -163,37 +161,35 @@ handle_claimed (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
* the response and call the callback.
*
* @param omgh handle for the request
- * @param[in,out] hr HTTP response we got
+ * @param[in,out] osr HTTP response we got
*/
static void
handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
- struct TALER_MERCHANT_HttpResponse *hr)
+ struct TALER_MERCHANT_OrderStatusResponse *osr)
{
uint32_t ec32;
uint32_t hc32;
json_t *wire_details;
json_t *wire_reports;
json_t *refund_details;
- struct TALER_MERCHANT_OrderStatusResponse osr = {
- .status = TALER_MERCHANT_OSC_PAID
- };
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_bool ("refunded",
- &osr.details.paid.refunded),
+ &osr->details.success.details.paid.refunded),
GNUNET_JSON_spec_bool ("refund_pending",
- &osr.details.paid.refund_pending),
+ &osr->details.success.details.paid.refund_pending),
GNUNET_JSON_spec_bool ("wired",
- &osr.details.paid.wired),
+ &osr->details.success.details.paid.wired),
TALER_JSON_spec_amount_any ("deposit_total",
- &osr.details.paid.deposit_total),
+ &osr->details.success.details.paid.deposit_total),
GNUNET_JSON_spec_uint32 ("exchange_code",
&ec32),
GNUNET_JSON_spec_uint32 ("exchange_http_status",
&hc32),
TALER_JSON_spec_amount_any ("refund_amount",
- &osr.details.paid.refund_amount),
- GNUNET_JSON_spec_json ("contract_terms",
- (json_t **) &osr.details.paid.contract_terms),
+ &osr->details.success.details.paid.refund_amount),
+ GNUNET_JSON_spec_json (
+ "contract_terms",
+ (json_t **) &osr->details.success.details.paid.contract_terms),
GNUNET_JSON_spec_json ("wire_details",
&wire_details),
GNUNET_JSON_spec_json ("wire_reports",
@@ -204,34 +200,33 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
};
if (GNUNET_OK !=
- GNUNET_JSON_parse (hr->reply,
+ GNUNET_JSON_parse (osr->hr.reply,
spec,
NULL, NULL))
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
return;
}
if (! (json_is_array (wire_details) &&
json_is_array (wire_reports) &&
json_is_array (refund_details) &&
- json_is_object (osr.details.paid.contract_terms)) )
+ json_is_object (osr->details.success.details.paid.contract_terms)) )
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
GNUNET_JSON_parse_free (spec);
return;
}
- osr.details.paid.exchange_ec = (enum TALER_ErrorCode) ec32;
- osr.details.paid.exchange_hc = (unsigned int) hc32;
+ osr->details.success.status = TALER_MERCHANT_OSC_PAID;
+ osr->details.success.details.paid.exchange_ec = (enum TALER_ErrorCode) ec32;
+ osr->details.success.details.paid.exchange_hc = (unsigned int) hc32;
{
unsigned int wts_len = json_array_size (wire_details);
unsigned int wrs_len = json_array_size (wire_reports);
@@ -265,11 +260,10 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
NULL, NULL))
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
GNUNET_JSON_parse_free (spec);
return;
}
@@ -302,11 +296,10 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
NULL, NULL))
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
GNUNET_JSON_parse_free (spec);
return;
}
@@ -336,25 +329,23 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle *omgh,
NULL, NULL))
{
GNUNET_break_op (0);
- hr->http_status = 0;
- hr->ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr->hr.http_status = 0;
+ osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- hr,
- NULL);
+ osr);
GNUNET_JSON_parse_free (spec);
return;
}
}
- osr.details.paid.wts = wts;
- osr.details.paid.wts_len = wts_len;
- osr.details.paid.wrs = wrs;
- osr.details.paid.wrs_len = wrs_len;
- osr.details.paid.refunds = ref;
- osr.details.paid.refunds_len = ref_len;
+ osr->details.success.details.paid.wts = wts;
+ osr->details.success.details.paid.wts_len = wts_len;
+ osr->details.success.details.paid.wrs = wrs;
+ osr->details.success.details.paid.wrs_len = wrs_len;
+ osr->details.success.details.paid.refunds = ref;
+ osr->details.success.details.paid.refunds_len = ref_len;
omgh->cb (omgh->cb_cls,
- hr,
- &osr);
+ osr);
}
GNUNET_JSON_parse_free (spec);
}
@@ -376,9 +367,9 @@ handle_merchant_order_get_finished (void *cls,
struct TALER_MERCHANT_OrderMerchantGetHandle *omgh = cls;
const json_t *json = response;
const char *order_status;
- struct TALER_MERCHANT_HttpResponse hr = {
- .http_status = (unsigned int) response_code,
- .reply = json
+ struct TALER_MERCHANT_OrderStatusResponse osr = {
+ .hr.http_status = (unsigned int) response_code,
+ .hr.reply = json
};
omgh->job = NULL;
@@ -388,78 +379,79 @@ handle_merchant_order_get_finished (void *cls,
/* see below */
break;
case MHD_HTTP_UNAUTHORIZED:
- hr.ec = TALER_JSON_get_error_code (json);
- hr.hint = TALER_JSON_get_error_hint (json);
- /* Nothing really to verify, merchant says we need to authenticate. */
- break;
+ osr.hr.ec = TALER_JSON_get_error_code (json);
+ osr.hr.hint = TALER_JSON_get_error_hint (json);
+ omgh->cb (omgh->cb_cls,
+ &osr);
+ TALER_MERCHANT_merchant_order_get_cancel (omgh);
+ return;
case MHD_HTTP_NOT_FOUND:
- hr.ec = TALER_JSON_get_error_code (json);
- hr.hint = TALER_JSON_get_error_hint (json);
+ osr.hr.ec = TALER_JSON_get_error_code (json);
+ osr.hr.hint = TALER_JSON_get_error_hint (json);
omgh->cb (omgh->cb_cls,
- &hr,
- NULL);
+ &osr);
TALER_MERCHANT_merchant_order_get_cancel (omgh);
return;
case MHD_HTTP_GATEWAY_TIMEOUT:
- hr.ec = TALER_JSON_get_error_code (json);
- hr.hint = TALER_JSON_get_error_hint (json);
+ osr.hr.ec = TALER_JSON_get_error_code (json);
+ osr.hr.hint = TALER_JSON_get_error_hint (json);
omgh->cb (omgh->cb_cls,
- &hr,
- NULL);
+ &osr);
TALER_MERCHANT_merchant_order_get_cancel (omgh);
return;
default:
- hr.ec = TALER_JSON_get_error_code (json);
- hr.hint = TALER_JSON_get_error_hint (json);
+ osr.hr.ec = TALER_JSON_get_error_code (json);
+ osr.hr.hint = TALER_JSON_get_error_hint (json);
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Polling payment failed with HTTP status code %u/%d\n",
(unsigned int) response_code,
- (int) hr.ec);
+ (int) osr.hr.ec);
GNUNET_break_op (0);
omgh->cb (omgh->cb_cls,
- &hr,
- NULL);
+ &osr);
TALER_MERCHANT_merchant_order_get_cancel (omgh);
return;
}
- order_status = json_string_value (json_object_get (json, "order_status"));
+ order_status = json_string_value (json_object_get (json,
+ "order_status"));
if (NULL == order_status)
{
GNUNET_break_op (0);
- hr.http_status = 0;
- hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr.hr.http_status = 0;
+ osr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- &hr,
- NULL);
+ &osr);
TALER_MERCHANT_merchant_order_get_cancel (omgh);
return;
}
- if (0 == strcmp ("paid", order_status))
+ if (0 == strcmp ("paid",
+ order_status))
{
handle_paid (omgh,
- &hr);
+ &osr);
}
- else if (0 == strcmp ("claimed", order_status))
+ else if (0 == strcmp ("claimed",
+ order_status))
{
handle_claimed (omgh,
- &hr);
+ &osr);
}
- else if (0 == strcmp ("unpaid", order_status))
+ else if (0 == strcmp ("unpaid",
+ order_status))
{
handle_unpaid (omgh,
- &hr);
+ &osr);
}
else
{
GNUNET_break_op (0);
- hr.http_status = 0;
- hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
+ osr.hr.http_status = 0;
+ osr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
omgh->cb (omgh->cb_cls,
- &hr,
- NULL);
+ &osr);
}
TALER_MERCHANT_merchant_order_get_cancel (omgh);
}