cash2ecash

cash2ecash: cash acceptor that issues digital cash (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit e9daf6a8cfe29f8fb653989d03df7ccba696e1ad
parent 08e28c6b032c29de1eab266fd216870438ec72f3
Author: Manuel Geissbühler <manuel@debian>
Date:   Wed,  8 Jan 2025 21:29:52 +0100

implemented no_amount_to_wallet

Diffstat:
Msrc/bank/bankCommunication.hpp | 4++--
Msrc/bank/bank_api_account_withdrawal.c | 23+++++++++++++----------
Msrc/bank/bank_lib.c | 5++++-
Msrc/bank/bank_lib.h | 2+-
Msrc/bank/taler_bank_service_cash2ecash.h | 6++++++
Msrc/cash2ecash.cpp | 3++-
6 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/src/bank/bankCommunication.hpp b/src/bank/bankCommunication.hpp @@ -46,8 +46,8 @@ class BankCommunication{ threadInit.detach(); } - void withdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, const char **res_withdrawal_id, const char **res_taler_withdraw_uri){ - std::thread threadWithdrawalRequest(&bankCommunicationWithdrawalRequest,amount, suggestedAmount, res_withdrawal_id, res_taler_withdraw_uri, withdrawalRequestCallback); + void withdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, bool *noAmountToWallet, const char **res_withdrawal_id, const char **res_taler_withdraw_uri){ + std::thread threadWithdrawalRequest(&bankCommunicationWithdrawalRequest, amount, suggestedAmount, noAmountToWallet, res_withdrawal_id, res_taler_withdraw_uri, withdrawalRequestCallback); threadWithdrawalRequest.detach(); } diff --git a/src/bank/bank_api_account_withdrawal.c b/src/bank/bank_api_account_withdrawal.c @@ -3,6 +3,7 @@ #include <gnunet/gnunet_common.h> #include <jansson.h> #include <microhttpd.h> +#include <stdbool.h> #include <stdio.h> #include <taler/platform.h> #include "taler_bank_service_cash2ecash.h" @@ -149,6 +150,7 @@ TALER_BANK_account_withdrawal ( const char *account_name, const struct TALER_Amount *amount, const struct TALER_Amount *suggested_amount, + const bool *no_amount_to_wallet, TALER_BANK_AccountWithdrawalCallback res_cb, void *res_cb_cls) { @@ -157,12 +159,11 @@ TALER_BANK_account_withdrawal ( CURL *eh; withdrawal_req = GNUNET_JSON_PACK( - GNUNET_JSON_pack_allow_null( - TALER_JSON_pack_amount("amount", - amount)), - GNUNET_JSON_pack_allow_null ( - TALER_JSON_pack_amount("suggested_amount", - suggested_amount))); + GNUNET_JSON_pack_allow_null(TALER_JSON_pack_amount("amount", amount)), + GNUNET_JSON_pack_allow_null( + TALER_JSON_pack_amount("suggested_amount", suggested_amount)), + GNUNET_JSON_pack_allow_null( + GNUNET_JSON_pack_bool("no_amount_to_wallet", *no_amount_to_wallet))); if (NULL == withdrawal_req) { GNUNET_break (0); @@ -511,18 +512,20 @@ handle_withdrawalID_info_finished (void *cls, &ir.details.ok.status), GNUNET_JSON_spec_mark_optional( TALER_JSON_spec_amount_any("amount", - &ir.details.ok.amount),NULL), + &ir.details.ok.amount), NULL), GNUNET_JSON_spec_mark_optional( TALER_JSON_spec_amount_any("suggested_amount", - &ir.details.ok.suggested_amount),NULL), + &ir.details.ok.suggested_amount), NULL), + GNUNET_JSON_spec_mark_optional( + GNUNET_JSON_spec_bool("no_amount_to_wallet", &ir.details.ok.no_amount_to_wallet), NULL), GNUNET_JSON_spec_string ("username", &ir.details.ok.username), GNUNET_JSON_spec_mark_optional( GNUNET_JSON_spec_string ("selected_reserve_pub", - &ir.details.ok.selected_reserve_pub),NULL), + &ir.details.ok.selected_reserve_pub), NULL), GNUNET_JSON_spec_mark_optional( GNUNET_JSON_spec_string ("selected_exchange_account", - &ir.details.ok.selected_exchange_account),NULL), + &ir.details.ok.selected_exchange_account), NULL), GNUNET_JSON_spec_end () }; diff --git a/src/bank/bank_lib.c b/src/bank/bank_lib.c @@ -36,6 +36,7 @@ static bankCommunicationInitCallback_t extInitCallback; */ static bankCommunicationWithdrawalCallback_t extWithdrawalCallback; static struct TALER_Amount *parAmount, *parSuggestedAmount; +static bool *parNoAmountToWallet; const char *par_res_withdrawal_id_string; const char *par_res_taler_withdraw_uri_string; const char **par_res_withdrawal_id; @@ -300,6 +301,7 @@ static void runWithdrawalRequest(void *cls, char *const *args, const char *cfgfi "finsteraarhorn", parAmount, parSuggestedAmount, + parNoAmountToWallet, account_withdrawal_cb, NULL); @@ -368,11 +370,12 @@ void bankCommunicationInit(bankCommunicationInitCallback_t callback) { bankCommunicationRun(runToken); } -void bankCommunicationWithdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, const char **res_withdrawal_id, const char **res_taler_withdraw_uri, bankCommunicationWithdrawalCallback_t callback){ +void bankCommunicationWithdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, bool *noAmountToWallet, const char **res_withdrawal_id, const char **res_taler_withdraw_uri, bankCommunicationWithdrawalCallback_t callback){ //Store the parameters globaly extWithdrawalCallback = callback; parAmount = amount; parSuggestedAmount = suggestedAmount; + parNoAmountToWallet = noAmountToWallet; par_res_withdrawal_id = res_withdrawal_id; par_res_taler_withdraw_uri = res_taler_withdraw_uri; diff --git a/src/bank/bank_lib.h b/src/bank/bank_lib.h @@ -17,7 +17,7 @@ typedef void (*bankCommunicationWithdrawalIDInfoCallback_t)(); void bankCommunicationInit(bankCommunicationInitCallback_t callback); -void bankCommunicationWithdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, const char **res_withdrawal_id, const char **res_taler_withdraw_uri, bankCommunicationWithdrawalCallback_t callback); + void bankCommunicationWithdrawalRequest(struct TALER_Amount *amount, struct TALER_Amount *suggestedAmount, bool *noAmountToWallet, const char **res_withdrawal_id, const char **res_taler_withdraw_uri, bankCommunicationWithdrawalCallback_t callback); void bankCommunicationWithdrawalIDInfoRequest(const char *withdrawal_id, const char **res_status, bankCommunicationWithdrawalIDInfoCallback_t callback); void bankCommunicationWithdrawalConfirmRequest(const char *withdrawal_id, struct TALER_Amount *amount, bankCommunicationWithdrawalConfirmCallback_t callback); diff --git a/src/bank/taler_bank_service_cash2ecash.h b/src/bank/taler_bank_service_cash2ecash.h @@ -101,6 +101,7 @@ TALER_BANK_account_withdrawal ( const char *account_name, const struct TALER_Amount *amount, const struct TALER_Amount *suggested_amount, + const bool *no_amount_to_wallet, TALER_BANK_AccountWithdrawalCallback res_cb, void *res_cb_cls); @@ -256,6 +257,11 @@ struct TALER_BANK_WithdrawalIDInfoResponse struct TALER_Amount suggested_amount; /** + * If true, the wallet must not allow the user to specify an amount to withdraw (optional) + */ + bool no_amount_to_wallet; + + /** * Account username */ const char *username; diff --git a/src/cash2ecash.cpp b/src/cash2ecash.cpp @@ -103,7 +103,8 @@ void actionEventBankTokenDone(){ static struct TALER_Amount amountZero; TALER_amount_set_zero("KUDOS", &amountZero); amountZero.fraction = 5000000; - bankCommunication.withdrawalRequest(&amountZero, NULL, &withdrawal_id, &taler_withdraw_uri); + bool noAmountToWallet = true; + bankCommunication.withdrawalRequest(&amountZero, NULL, &noAmountToWallet, &withdrawal_id, &taler_withdraw_uri); } void actionEventBankWithdrawalDone(){