taler-mdb

GNU Taler Extensions and Integrations
Log | Files | Refs | Submodules | README | LICENSE

commit 0609d5c9cb0aaee6a3a0c9f7b6497b9aad488982
parent b9c1a93ab13f7e8fc306457201afe8e357a4ba66
Author: BOSS_Marco <bossm8@students.bfh.ch>
Date:   Sat,  9 Nov 2019 20:00:40 +0100

fixed delay when cancelling, new bugs detected marked with FIXME

Diffstat:
Mconfigure.ac | 2+-
Msrc/main.c | 52++++++++++++++++++++++++----------------------------
2 files changed, 25 insertions(+), 29 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) -AC_CONFIG_SRCDIR([src/product.c]) +AC_CONFIG_SRCDIR([src/]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. diff --git a/src/main.c b/src/main.c @@ -96,8 +96,6 @@ struct PaymentActivity struct GNUNET_SCHEDULER_Task *delay_task; - int nfc_has_target; - int wallet_has_uri; }; @@ -169,6 +167,11 @@ SNACK_print_hex_info (const char*message, static void cleanup_payment (struct PaymentActivity *pa) { + if (NULL != pa->pnd) + { + nfc_abort_command(pa->pnd); + nfc_close (pa->pnd); + } if (NULL != pa->po) TALER_MERCHANT_proposal_cancel (pa->po); if (NULL != pa->cpo) @@ -176,11 +179,8 @@ cleanup_payment (struct PaymentActivity *pa) if (NULL != pa->task) GNUNET_SCHEDULER_cancel (pa->task); if (NULL != pa->delay_task) - GNUNET_SCHEDULER_cancel (pa->delay_task); - if (GNUNET_YES == pa->nfc_has_target) - nfc_initiator_deselect_target (pa->pnd); // needed? - if (NULL != pa->pnd) - nfc_close (pa->pnd); + GNUNET_SCHEDULER_cancel (pa->delay_task); /* FIXME - double free or corruption (!prev) - when already sent a message via nfc and then press 'c' (abort) */ + /* FIXME - cont. also abort when nfc device gets disconnected (maybe this is ok? because nfc is mandatory) */ GNUNET_free_non_null (pa->taler_pay_uri); GNUNET_free_non_null (pa->order_id); GNUNET_free (pa); @@ -258,7 +258,7 @@ wallet_transmit_uri (void *cls) NFC_TIMEOUT)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to send command\n"); + "Failed to send command\n"); /* Has this to be an error ? */ pa->task = GNUNET_SCHEDULER_add_now (&connect_target, pa); return; @@ -305,7 +305,7 @@ wallet_select_aid (void *cls) sizeof (response), NFC_TIMEOUT)) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, /* Has this to be an error ? */ "Failed to transceive with NFC app, trying to find another NFC client\n"); pa->task = GNUNET_SCHEDULER_add_now (&connect_target, pa); @@ -325,8 +325,9 @@ wallet_select_aid (void *cls) "AID selection failure, return code: %x%x, trying to find another NFC client\n", response[0], response[1]); - pa->task = GNUNET_SCHEDULER_add_now (&connect_target, - pa); + pa->task = GNUNET_SCHEDULER_add_delayed(NFC_FAILURE_RETRY_FREQ, + &connect_target, + pa); } @@ -342,26 +343,21 @@ connect_target (void *cls) struct PaymentActivity *pa = cls; const nfc_modulation nmMifare[] = { { .nmt = NMT_ISO14443A, - .nbr = NBR_106, + .nbr = NBR_212, } }; pa->task = NULL; - if (GNUNET_YES == pa->nfc_has_target) - { - nfc_initiator_deselect_target (pa->pnd); - pa->nfc_has_target = GNUNET_NO; - } pa->nt.nti.nai.szUidLen = 0; GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Trying to find NFC client\n"); - /* NOTE: this may block for up to 5s, libnfc API sucks... */ - if (0 >= nfc_initiator_select_passive_target (pa->pnd, - nmMifare[0], - NULL, - 0, - &pa->nt)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + if( 0 > nfc_initiator_poll_target ( pa->pnd, + nmMifare, + 1, + 0x01, + 0x01, + &pa->nt)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, /* Has this to be an error ? */ "Failed to connect to nfc target\n"); } else if ( (pa->nt.nti.nai.szUidLen > UID_LEN_UPPER) || @@ -377,13 +373,13 @@ connect_target (void *cls) { GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Found NFC client\n"); - pa->nfc_has_target = GNUNET_YES; pa->task = GNUNET_SCHEDULER_add_now (&wallet_select_aid, pa); return; } - pa->task = GNUNET_SCHEDULER_add_now (&connect_target, - pa); + pa->task = GNUNET_SCHEDULER_add_delayed ( NFC_FAILURE_RETRY_FREQ, + &connect_target, + pa); }