diff options
Diffstat (limited to 'src/bank-lib')
-rw-r--r-- | src/bank-lib/Makefile.am | 2 | ||||
-rw-r--r-- | src/bank-lib/fakebank.h | 2 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank.c | 51 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_accounts_withdrawals.c | 5 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_get_withdrawals.c | 7 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_post_accounts_withdrawals.c | 23 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_post_withdrawals_abort.c | 74 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_post_withdrawals_abort.h | 48 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_post_withdrawals_confirm.c | 107 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_post_withdrawals_confirm.h | 48 | ||||
-rw-r--r-- | src/bank-lib/fakebank_bank_post_withdrawals_id_op.c | 11 | ||||
-rw-r--r-- | src/bank-lib/fakebank_stop.c | 1 | ||||
-rw-r--r-- | src/bank-lib/fakebank_tbi_get_withdrawal_operation.c | 5 | ||||
-rw-r--r-- | src/bank-lib/fakebank_tbi_post_withdrawal_operation.c | 48 |
14 files changed, 87 insertions, 345 deletions
diff --git a/src/bank-lib/Makefile.am b/src/bank-lib/Makefile.am index a292dcece..ef7704684 100644 --- a/src/bank-lib/Makefile.am +++ b/src/bank-lib/Makefile.am @@ -72,8 +72,6 @@ libtalerfakebank_la_SOURCES = \ fakebank_bank_get_withdrawals.c fakebank_bank_get_withdrawals.h \ fakebank_bank_get_root.c fakebank_bank_get_root.h \ fakebank_bank_post_accounts_withdrawals.c fakebank_bank_post_accounts_withdrawals.h \ - fakebank_bank_post_withdrawals_abort.c fakebank_bank_post_withdrawals_abort.h \ - fakebank_bank_post_withdrawals_confirm.c fakebank_bank_post_withdrawals_confirm.h \ fakebank_bank_post_withdrawals_id_op.c fakebank_bank_post_withdrawals_id_op.h \ fakebank_bank_testing_register.c fakebank_bank_testing_register.h \ fakebank_tbr.c fakebank_tbr.h \ diff --git a/src/bank-lib/fakebank.h b/src/bank-lib/fakebank.h index a9d61d8b1..98c1bb020 100644 --- a/src/bank-lib/fakebank.h +++ b/src/bank-lib/fakebank.h @@ -161,7 +161,7 @@ struct WithdrawalOperation /** * Amount transferred. */ - struct TALER_Amount amount; + struct TALER_Amount *amount; /** * Public key of the reserve, wire transfer subject. diff --git a/src/bank-lib/fakebank_bank.c b/src/bank-lib/fakebank_bank.c index 7c2d39ab4..e9a437e21 100644 --- a/src/bank-lib/fakebank_bank.c +++ b/src/bank-lib/fakebank_bank.c @@ -34,8 +34,6 @@ #include "fakebank_bank_get_withdrawals.h" #include "fakebank_bank_get_root.h" #include "fakebank_bank_post_accounts_withdrawals.h" -#include "fakebank_bank_post_withdrawals_abort.h" -#include "fakebank_bank_post_withdrawals_confirm.h" #include "fakebank_bank_post_withdrawals_id_op.h" #include "fakebank_bank_testing_register.h" @@ -167,55 +165,6 @@ TALER_FAKEBANK_bank_main_ ( wid); } - if ( (0 == strncmp (url, - "/withdrawals/", - strlen ("/withdrawals/"))) && - (0 == strcasecmp (method, - MHD_HTTP_METHOD_POST)) ) - { - /* POST /withdrawals/$WID* */ - const char *wid = url + strlen ("/withdrawals/"); - const char *opid = strchr (wid, - '/'); - char *wi; - - if (NULL == opid) - { - /* POST /withdrawals/$WID (not defined) */ - GNUNET_break_op (0); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_GENERIC_ENDPOINT_UNKNOWN, - url); - } - wi = GNUNET_strndup (wid, - opid - wid); - if (0 == strcmp (opid, - "/abort")) - { - /* POST /withdrawals/$WID/abort */ - MHD_RESULT ret; - - ret = TALER_FAKEBANK_bank_withdrawals_abort_ (h, - connection, - wi); - GNUNET_free (wi); - return ret; - } - if (0 == strcmp (opid, - "/confirm")) - { - /* POST /withdrawals/$WID/confirm */ - MHD_RESULT ret; - - ret = TALER_FAKEBANK_bank_withdrawals_confirm_ (h, - connection, - wi); - GNUNET_free (wi); - return ret; - } - } - if (0 == strncmp (url, "/accounts/", strlen ("/accounts/"))) diff --git a/src/bank-lib/fakebank_bank_accounts_withdrawals.c b/src/bank-lib/fakebank_bank_accounts_withdrawals.c index bb435d975..d956a591f 100644 --- a/src/bank-lib/fakebank_bank_accounts_withdrawals.c +++ b/src/bank-lib/fakebank_bank_accounts_withdrawals.c @@ -96,6 +96,7 @@ TALER_FAKEBANK_bank_account_withdrawals_ ( &wo->reserve_pub) : GNUNET_JSON_pack_string ("selected_reserve_pub", NULL)), - TALER_JSON_pack_amount ("amount", - &wo->amount)); + GNUNET_JSON_pack_allow_null ( + TALER_JSON_pack_amount ("amount", + wo->amount))); } diff --git a/src/bank-lib/fakebank_bank_get_withdrawals.c b/src/bank-lib/fakebank_bank_get_withdrawals.c index 7f65e8660..84f65cc40 100644 --- a/src/bank-lib/fakebank_bank_get_withdrawals.c +++ b/src/bank-lib/fakebank_bank_get_withdrawals.c @@ -82,6 +82,9 @@ TALER_FAKEBANK_bank_get_withdrawals_ ( &wo->reserve_pub) : GNUNET_JSON_pack_string ("selected_reserve_pub", NULL)), - TALER_JSON_pack_amount ("amount", - &wo->amount)); + GNUNET_JSON_pack_string ("currency", + h->currency), + GNUNET_JSON_pack_allow_null ( + TALER_JSON_pack_amount ("amount", + wo->amount))); } diff --git a/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c b/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c index 7fbb93352..7d77f7626 100644 --- a/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c +++ b/src/bank-lib/fakebank_bank_post_accounts_withdrawals.c @@ -67,7 +67,11 @@ do_post_account_withdrawals ( } wo = GNUNET_new (struct WithdrawalOperation); wo->debit_account = acc; - wo->amount = *amount; + if (NULL != amount) + { + wo->amount = GNUNET_new (struct TALER_Amount); + *wo->amount = *amount; + } if (NULL == h->wops) { h->wops = GNUNET_CONTAINER_multishortmap_create (32, @@ -83,6 +87,8 @@ do_post_account_withdrawals ( &wo->wopid, wo, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)) + + break; } { @@ -169,11 +175,15 @@ TALER_FAKEBANK_bank_post_account_withdrawals_ ( { struct TALER_Amount amount; + bool amount_missing; + struct TALER_Amount *amount_ptr; enum GNUNET_GenericReturnValue ret; struct GNUNET_JSON_Specification spec[] = { - TALER_JSON_spec_amount ("amount", - h->currency, - &amount), + GNUNET_JSON_spec_mark_optional ( + TALER_JSON_spec_amount ("amount", + h->currency, + &amount), + &amount_missing), GNUNET_JSON_spec_end () }; @@ -186,10 +196,13 @@ TALER_FAKEBANK_bank_post_account_withdrawals_ ( json_decref (json); return (GNUNET_NO == ret) ? MHD_YES : MHD_NO; } + + amount_ptr = amount_missing ? NULL : &amount; + res = do_post_account_withdrawals (h, connection, account_name, - &amount); + amount_ptr); } json_decref (json); return res; diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_abort.c b/src/bank-lib/fakebank_bank_post_withdrawals_abort.c deleted file mode 100644 index f8ebf1b93..000000000 --- a/src/bank-lib/fakebank_bank_post_withdrawals_abort.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - 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 Foundation; either version 3, - or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see <http://www.gnu.org/licenses/> -*/ -/** - * @file bank-lib/fakebank_bank_post_withdrawals_abort.c - * @brief implement bank API withdrawals /abort endpoint - * @author Christian Grothoff <christian@grothoff.org> - */ -#include "platform.h" -#include <pthread.h> -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include <gnunet/gnunet_mhd_compat.h> -#include "fakebank.h" -#include "fakebank_bank_post_withdrawals_abort.h" -#include "fakebank_common_lookup.h" -#include "fakebank_common_lp.h" - - -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_abort_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *withdrawal_id) -{ - struct WithdrawalOperation *wo; - - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, - withdrawal_id); - if (NULL == wo) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - withdrawal_id); - } - if (wo->confirmation_done) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_BANK_ABORT_CONFIRM_CONFLICT, - withdrawal_id); - } - wo->aborted = true; - TALER_FAKEBANK_notify_withdrawal_ (h, - wo); - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_json (connection, - json_object (), /* FIXME: #7301 */ - MHD_HTTP_OK); -} diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_abort.h b/src/bank-lib/fakebank_bank_post_withdrawals_abort.h deleted file mode 100644 index 920b0b802..000000000 --- a/src/bank-lib/fakebank_bank_post_withdrawals_abort.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - 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 Foundation; either version 3, - or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see <http://www.gnu.org/licenses/> -*/ -/** - * @file bank-lib/fakebank_bank_post_withdrawals_abort.h - * @brief implement bank API withdrawals /abort endpoint - * @author Christian Grothoff <christian@grothoff.org> - */ -#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_ABORT_H -#define FAKEBANK_BANK_POST_WITHDRAWALS_ABORT_H - -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include <gnunet/gnunet_mhd_compat.h> -#include "fakebank.h" - - -/** - * Handle POST /withdrawals/{withdrawal_id}/abort request. - * - * @param h our fakebank handle - * @param connection the connection - * @param withdrawal_id the withdrawal operation identifier - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_abort_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *withdrawal_id); - -#endif diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c deleted file mode 100644 index 2fa67c970..000000000 --- a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - 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 Foundation; either version 3, - or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see <http://www.gnu.org/licenses/> -*/ -/** - * @file bank-lib/fakebank_bank_post_withdrawals_confirm.c - * @brief implement bank API withdrawals /confirm endpoint - * @author Christian Grothoff <christian@grothoff.org> - */ -#include "platform.h" -#include <pthread.h> -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include <gnunet/gnunet_mhd_compat.h> -#include "fakebank.h" -#include "fakebank_bank_post_withdrawals_confirm.h" -#include "fakebank_common_lookup.h" -#include "fakebank_common_lp.h" -#include "fakebank_common_make_admin_transfer.h" - - -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_confirm_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *withdrawal_id) -{ - struct WithdrawalOperation *wo; - - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, - withdrawal_id); - if (NULL == wo) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - withdrawal_id); - } - if (NULL == wo->exchange_account) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_BAD_REQUEST, - TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED, - NULL); - } - if (wo->aborted) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_BANK_CONFIRM_ABORT_CONFLICT, - withdrawal_id); - } - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - if (GNUNET_OK != - TALER_FAKEBANK_make_admin_transfer_ ( - h, - wo->debit_account->account_name, - wo->exchange_account->account_name, - &wo->amount, - &wo->reserve_pub, - &wo->row_id, - &wo->timestamp)) - { - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_BANK_DUPLICATE_RESERVE_PUB_SUBJECT, - NULL); - } - /* Re-acquiring the lock and continuing to operate on 'wo' - is currently (!) acceptable because we NEVER free 'wo' - until shutdown. We may want to revise this if keeping - all withdraw operations in RAM becomes an issue... */ - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo->confirmation_done = true; - TALER_FAKEBANK_notify_withdrawal_ (h, - wo); - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_json (connection, - json_object (), - MHD_HTTP_OK); -} diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h deleted file mode 100644 index 56cd2deda..000000000 --- a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - 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 Foundation; either version 3, - or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see <http://www.gnu.org/licenses/> -*/ -/** - * @file bank-lib/fakebank_bank_post_withdrawals_confirm.h - * @brief implement bank API withdrawals /confirm endpoint - * @author Christian Grothoff <christian@grothoff.org> - */ -#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_CONFIRM_H -#define FAKEBANK_BANK_POST_WITHDRAWALS_CONFIRM_H - -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include <gnunet/gnunet_mhd_compat.h> -#include "fakebank.h" - - -/** - * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/confirm request. - * - * @param h our fakebank handle - * @param connection the connection - * @param withdrawal_id the withdrawal operation identifier - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_confirm_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *withdrawal_id); - -#endif diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c index fe5cc982d..2adc07df0 100644 --- a/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c +++ b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c @@ -91,6 +91,15 @@ bank_withdrawals_confirm ( TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED, NULL); } + if (NULL == wo->amount) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_BAD_REQUEST, + TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED, + NULL); + } if (wo->aborted) { GNUNET_assert (0 == @@ -107,7 +116,7 @@ bank_withdrawals_confirm ( h, wo->debit_account->account_name, wo->exchange_account->account_name, - &wo->amount, + wo->amount, &wo->reserve_pub, &wo->row_id, &wo->timestamp)) diff --git a/src/bank-lib/fakebank_stop.c b/src/bank-lib/fakebank_stop.c index e31d47523..ff6b084f4 100644 --- a/src/bank-lib/fakebank_stop.c +++ b/src/bank-lib/fakebank_stop.c @@ -77,6 +77,7 @@ free_withdraw_op (void *cls, (void) cls; (void) key; + GNUNET_free (wo->amount); GNUNET_free (wo); return GNUNET_OK; } diff --git a/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c b/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c index 4749bda77..fd6f3b7c4 100644 --- a/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c +++ b/src/bank-lib/fakebank_tbi_get_withdrawal_operation.c @@ -123,8 +123,9 @@ TALER_FAKEBANK_tbi_get_withdrawal_operation_ ( GNUNET_JSON_pack_allow_null ( GNUNET_JSON_pack_string ("suggested_exchange", h->exchange_url)), - TALER_JSON_pack_amount ("amount", - &wc->wo->amount), + GNUNET_JSON_pack_allow_null ( + TALER_JSON_pack_amount ("amount", + wc->wo->amount)), GNUNET_JSON_pack_array_steal ("wire_types", wt)); } diff --git a/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c b/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c index 38b92e494..29f1e7475 100644 --- a/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c +++ b/src/bank-lib/fakebank_tbi_post_withdrawal_operation.c @@ -40,6 +40,8 @@ * @param wopid the withdrawal operation identifier * @param reserve_pub public key of the reserve * @param exchange_payto_uri payto://-URI of the exchange + * @param amount chosen by the client, or NULL to use the + * pre-determined amount * @return MHD result code */ static MHD_RESULT @@ -48,7 +50,8 @@ do_post_withdrawal ( struct MHD_Connection *connection, const char *wopid, const struct TALER_ReservePublicKeyP *reserve_pub, - const char *exchange_payto_uri) + const char *exchange_payto_uri, + const struct TALER_Amount *amount) { struct WithdrawalOperation *wo; char *credit_name; @@ -134,6 +137,35 @@ do_post_withdrawal ( TALER_EC_BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT, "exchange account changed"); } + if ( (NULL != wo->amount) && (NULL != amount) && (0 != TALER_amount_cmp (wo-> + amount, + amount)) ) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_CONFLICT, + TALER_EC_BANK_WITHDRAWAL_OPERATION_RESERVE_SELECTION_CONFLICT, + "amount changed"); + } + if (NULL == wo->amount) + { + if (NULL == amount) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_BAD_REQUEST, + TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED, + "amount missing"); + } + else + { + wo->amount = GNUNET_new (struct TALER_Amount); + *wo->amount = *amount; + } + } + GNUNET_assert (NULL != wo->amount); wo->exchange_account = credit_account; wo->reserve_pub = *reserve_pub; wo->selection_done = true; @@ -203,11 +235,19 @@ TALER_FAKEBANK_tbi_post_withdrawal ( struct TALER_ReservePublicKeyP reserve_pub; const char *exchange_payto_url; enum GNUNET_GenericReturnValue ret; + struct TALER_Amount amount; + bool amount_missing; + struct TALER_Amount *amount_ptr; struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_fixed_auto ("reserve_pub", &reserve_pub), GNUNET_JSON_spec_string ("selected_exchange", &exchange_payto_url), + GNUNET_JSON_spec_mark_optional ( + TALER_JSON_spec_amount ("amount", + h->currency, + &amount), + &amount_missing), GNUNET_JSON_spec_end () }; @@ -220,11 +260,15 @@ TALER_FAKEBANK_tbi_post_withdrawal ( json_decref (json); return (GNUNET_NO == ret) ? MHD_YES : MHD_NO; } + + amount_ptr = amount_missing ? NULL : &amount; + res = do_post_withdrawal (h, connection, wopid, &reserve_pub, - exchange_payto_url); + exchange_payto_url, + amount_ptr); } json_decref (json); return res; |