[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-mdb] 32/93: retry NFC failures more nicely
From: |
gnunet |
Subject: |
[taler-taler-mdb] 32/93: retry NFC failures more nicely |
Date: |
Mon, 18 Nov 2019 21:12:55 +0100 |
This is an automated email from the git hooks/post-receive script.
marco-boss pushed a commit to branch master
in repository taler-mdb.
commit b549e5f0b6635dbf533d94b0a7b24bfcd6cc976b
Author: Christian Grothoff <address@hidden>
AuthorDate: Sat Nov 9 16:31:08 2019 +0100
retry NFC failures more nicely
---
src/main.c | 97 ++++++++++++++++++++++++++++++++++----------------------------
1 file changed, 54 insertions(+), 43 deletions(-)
diff --git a/src/main.c b/src/main.c
index b26d7ec..67cb528 100644
--- a/src/main.c
+++ b/src/main.c
@@ -220,6 +220,8 @@ shutdown_task (void *cls)
GNUNET_CURL_gnunet_rc_destroy (rc);
rc = NULL;
}
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Shutdown complete\n");
}
@@ -257,9 +259,8 @@ wallet_transmit_uri (void *cls)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to send command\n");
- pa->task = GNUNET_SCHEDULER_add_delayed (NFC_FAILURE_RETRY_FREQ,
- &connect_target,
- pa);
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa);
return;
}
if (0 != memcmp (response,
@@ -270,9 +271,8 @@ wallet_transmit_uri (void *cls)
"'PUT DATA' command transmission failed, return code: %x%x\n",
response[0],
response[1]);
- pa->task = GNUNET_SCHEDULER_add_delayed (NFC_FAILURE_RETRY_FREQ,
- &connect_target,
- pa);
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa);
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
@@ -306,10 +306,9 @@ wallet_select_aid (void *cls)
NFC_TIMEOUT))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to transceive with NFC app, trying to find another NFC
client in 1s\n");
- pa->task = GNUNET_SCHEDULER_add_delayed (NFC_FAILURE_RETRY_FREQ,
- &connect_target,
- pa);
+ "Failed to transceive with NFC app, trying to find another NFC
client\n");
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa);
return;
}
if (0 == memcmp (response,
@@ -323,12 +322,11 @@ wallet_select_aid (void *cls)
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "AID selection failure, return code: %x%x, trying to find
another NFC client in 1s\n",
+ "AID selection failure, return code: %x%x, trying to find
another NFC client\n",
response[0],
response[1]);
- pa->task = GNUNET_SCHEDULER_add_delayed (NFC_FAILURE_RETRY_FREQ,
- &connect_target,
- pa);
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa);
}
@@ -356,6 +354,7 @@ connect_target (void *cls)
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,
@@ -383,9 +382,45 @@ connect_target (void *cls)
pa);
return;
}
- pa->task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
- &connect_target,
- pa);
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa);
+}
+
+
+static void
+connect_nfc (void *cls)
+{
+ struct PaymentActivity *pa = cls;
+
+ pa->task = NULL;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Trying to open NFC device\n");
+ pa->pnd = nfc_open (context, NULL);
+ if (NULL == pa->pnd)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Payment inititation: Unable to open nfc device\n");
+ pa->task = GNUNET_SCHEDULER_add_delayed (NFC_FAILURE_RETRY_FREQ,
+ &connect_nfc,
+ pa);
+ return;
+ }
+ if (0 > nfc_initiator_init (pa->pnd))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to initialize NFC device: %s",
+ nfc_strerror (pa->pnd));
+ cleanup_payment (pa);
+ GNUNET_assert (payment_activity == pa);
+ payment_activity = NULL;
+ return;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "NFC in operation %s / %s\n",
+ nfc_device_get_name (pa->pnd),
+ nfc_device_get_connstring (pa->pnd));
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa);
}
@@ -414,10 +449,10 @@ check_payment_cb (void *cls,
struct TALER_Amount *refund_amount,
const char *taler_pay_uri)
{
+ struct PaymentActivity *pa = cls;
(void) refunded;
(void) refund_amount;
(void) obj;
- struct PaymentActivity *pa = cls;
pa->cpo = NULL;
if (MHD_HTTP_OK != http_status)
@@ -450,31 +485,7 @@ check_payment_cb (void *cls,
{
GNUNET_assert (NULL == pa->pnd);
pa->taler_pay_uri = GNUNET_strdup (taler_pay_uri);
- pa->pnd = nfc_open (context, NULL);
- if (NULL == pa->pnd)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Payment inititation: Unable to open nfc device\n");
- cleanup_payment (pa);
- GNUNET_assert (payment_activity == pa);
- payment_activity = NULL;
- return;
- }
- if (0 > nfc_initiator_init (pa->pnd))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Failed to initialize NFC device: %s",
- nfc_strerror (pa->pnd));
- cleanup_payment (pa);
- GNUNET_assert (payment_activity == pa);
- payment_activity = NULL;
- return;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "NFC in operation %s / %s\n",
- nfc_device_get_name (pa->pnd),
- nfc_device_get_connstring (pa->pnd));
- pa->task = GNUNET_SCHEDULER_add_now (&connect_target,
+ pa->task = GNUNET_SCHEDULER_add_now (&connect_nfc,
pa);
}
}
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [taler-taler-mdb] 23/93: chaos monkey, (continued)
- [taler-taler-mdb] 23/93: chaos monkey, gnunet, 2019/11/18
- [taler-taler-mdb] 15/93: fixes, gnunet, 2019/11/18
- [taler-taler-mdb] 14/93: updated .gitignore, gnunet, 2019/11/18
- [taler-taler-mdb] 20/93: more implementations using GNUNETUtils, gnunet, 2019/11/18
- [taler-taler-mdb] 19/93: GNUnet logs added, -h option added, gnunet, 2019/11/18
- [taler-taler-mdb] 12/93: initial indenting, gnunet, 2019/11/18
- [taler-taler-mdb] 31/93: cleanup, gnunet, 2019/11/18
- [taler-taler-mdb] 33/93: typo, gnunet, 2019/11/18
- [taler-taler-mdb] 30/93: cleanup, gnunet, 2019/11/18
- [taler-taler-mdb] 24/93: use event loop, gnunet, 2019/11/18
- [taler-taler-mdb] 32/93: retry NFC failures more nicely,
gnunet <=
- [taler-taler-mdb] 36/93: fixed delay when cancelling, new bugs detected marked with FIXME, gnunet, 2019/11/18
- [taler-taler-mdb] 46/93: first steps in configurable products, gnunet, 2019/11/18
- [taler-taler-mdb] 28/93: misc cleanup, gnunet, 2019/11/18
- [taler-taler-mdb] 45/93: first steps in configurable products, gnunet, 2019/11/18
- [taler-taler-mdb] 40/93: fix, gnunet, 2019/11/18
- [taler-taler-mdb] 43/93: preparations for QR code alternative path, gnunet, 2019/11/18
- [taler-taler-mdb] 35/93: explicitly detect not-found code, gnunet, 2019/11/18
- [taler-taler-mdb] 39/93: use test for now, gnunet, 2019/11/18
- [taler-taler-mdb] 38/93: merged, gnunet, 2019/11/18
- [taler-taler-mdb] 37/93: fixed delay when cancelling, new bugs detected marked with FIXME, gnunet, 2019/11/18