handle new 202 accepted status code on withdraw in client logic

This commit is contained in:
Christian Grothoff 2021-10-16 18:42:39 +02:00
parent 681449a6e0
commit 95c71daf5e
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 43 additions and 4 deletions

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER This file is part of TALER
Copyright (C) 2014-2020 Taler Systems SA Copyright (C) 2014-2021 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software terms of the GNU General Public License as published by the Free Software
@ -117,7 +117,24 @@ handle_reserve_withdraw_finished (
break; break;
} }
case MHD_HTTP_ACCEPTED: case MHD_HTTP_ACCEPTED:
wr.details.accepted.payment_target_uuid; // FIXME {
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_uint64 ("payment_target_uuid",
&wr.details.accepted.payment_target_uuid),
GNUNET_JSON_spec_end ()
};
if (GNUNET_OK !=
GNUNET_JSON_parse (hr->reply,
spec,
NULL, NULL))
{
GNUNET_break_op (0);
wr.hr.http_status = 0;
wr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
break;
}
}
break; break;
default: default:
break; break;

View File

@ -95,7 +95,7 @@ struct TALER_EXCHANGE_Withdraw2Handle
* @param json reply from the exchange * @param json reply from the exchange
* @return #GNUNET_OK on success, #GNUNET_SYSERR on errors * @return #GNUNET_OK on success, #GNUNET_SYSERR on errors
*/ */
static int static enum GNUNET_GenericReturnValue
reserve_withdraw_ok (struct TALER_EXCHANGE_Withdraw2Handle *wh, reserve_withdraw_ok (struct TALER_EXCHANGE_Withdraw2Handle *wh,
const json_t *json) const json_t *json)
{ {
@ -142,7 +142,7 @@ reserve_withdraw_ok (struct TALER_EXCHANGE_Withdraw2Handle *wh,
* @param json reply from the exchange * @param json reply from the exchange
* @return #GNUNET_OK on success, #GNUNET_SYSERR on errors * @return #GNUNET_OK on success, #GNUNET_SYSERR on errors
*/ */
static int static enum GNUNET_GenericReturnValue
reserve_withdraw_payment_required ( reserve_withdraw_payment_required (
struct TALER_EXCHANGE_Withdraw2Handle *wh, struct TALER_EXCHANGE_Withdraw2Handle *wh,
const json_t *json) const json_t *json)
@ -269,6 +269,28 @@ handle_reserve_withdraw_finished (void *cls,
GNUNET_assert (NULL == wh->cb); GNUNET_assert (NULL == wh->cb);
TALER_EXCHANGE_withdraw2_cancel (wh); TALER_EXCHANGE_withdraw2_cancel (wh);
return; return;
case MHD_HTTP_ACCEPTED:
/* only validate reply is well-formed */
{
uint64_t ptu;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_uint64 ("payment_target_uuid",
&ptu),
GNUNET_JSON_spec_end ()
};
if (GNUNET_OK !=
GNUNET_JSON_parse (j,
spec,
NULL, NULL))
{
GNUNET_break_op (0);
hr.http_status = 0;
hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
break;
}
}
break;
case MHD_HTTP_BAD_REQUEST: case MHD_HTTP_BAD_REQUEST:
/* This should never happen, either us or the exchange is buggy /* This should never happen, either us or the exchange is buggy
(or API version conflict); just pass JSON reply to the application */ (or API version conflict); just pass JSON reply to the application */