gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]