summaryrefslogtreecommitdiff
path: root/src/bank-lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/bank-lib')
-rw-r--r--src/bank-lib/Makefile.am2
-rw-r--r--src/bank-lib/fakebank.h2
-rw-r--r--src/bank-lib/fakebank_bank.c51
-rw-r--r--src/bank-lib/fakebank_bank_accounts_withdrawals.c5
-rw-r--r--src/bank-lib/fakebank_bank_get_withdrawals.c7
-rw-r--r--src/bank-lib/fakebank_bank_post_accounts_withdrawals.c23
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_abort.c74
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_abort.h48
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_confirm.c107
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_confirm.h48
-rw-r--r--src/bank-lib/fakebank_bank_post_withdrawals_id_op.c11
-rw-r--r--src/bank-lib/fakebank_stop.c1
-rw-r--r--src/bank-lib/fakebank_tbi_get_withdrawal_operation.c5
-rw-r--r--src/bank-lib/fakebank_tbi_post_withdrawal_operation.c48
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;