[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r14688 - gnunet/src/peerinfo
From: |
gnunet |
Subject: |
[GNUnet-SVN] r14688 - gnunet/src/peerinfo |
Date: |
Mon, 21 Mar 2011 15:54:33 +0100 |
Author: grothoff
Date: 2011-03-21 15:54:33 +0100 (Mon, 21 Mar 2011)
New Revision: 14688
Modified:
gnunet/src/peerinfo/peerinfo_api_notify.c
Log:
make peerinfo notify api more robust to serious disconnects
Modified: gnunet/src/peerinfo/peerinfo_api_notify.c
===================================================================
--- gnunet/src/peerinfo/peerinfo_api_notify.c 2011-03-21 14:44:50 UTC (rev
14687)
+++ gnunet/src/peerinfo/peerinfo_api_notify.c 2011-03-21 14:54:33 UTC (rev
14688)
@@ -62,6 +62,11 @@
*/
const struct GNUNET_CONFIGURATION_Handle *cfg;
+ /**
+ * Tasked used for delayed re-connection attempt.
+ */
+ GNUNET_SCHEDULER_TaskIdentifier task;
+
};
@@ -86,6 +91,32 @@
/**
+ * Task to re-try connecting to peerinfo.
+ *
+ * @param cls the 'struct GNUNET_PEERINFO_NotifyContext'
+ * @param tc scheduler context
+ */
+static void
+reconnect (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext *tc)
+{
+ struct GNUNET_PEERINFO_NotifyContext *nc = cls;
+
+ nc->task = GNUNET_SCHEDULER_NO_TASK;
+ nc->client = GNUNET_CLIENT_connect ("peerinfo", nc->cfg);
+ if (NULL == nc->client)
+ {
+ /* ugh */
+ nc->task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+ &reconnect,
+ nc);
+ return;
+ }
+ request_notifications (nc);
+}
+
+
+/**
* Receive a peerinfo information message, process it and
* go for more.
*
@@ -105,8 +136,7 @@
if (msg == NULL)
{
GNUNET_CLIENT_disconnect (nc->client, GNUNET_NO);
- nc->client = GNUNET_CLIENT_connect ("peerinfo", nc->cfg);
- request_notifications (nc);
+ reconnect (nc, NULL);
return;
}
ms = ntohs (msg->size);
@@ -259,7 +289,10 @@
GNUNET_CLIENT_notify_transmit_ready_cancel (nc->init);
nc->init = NULL;
}
- GNUNET_CLIENT_disconnect (nc->client, GNUNET_NO);
+ if (NULL != nc->client)
+ GNUNET_CLIENT_disconnect (nc->client, GNUNET_NO);
+ if (GNUNET_SCHEDULER_NO_TASK != nc->task)
+ GNUNET_SCHEDULER_cancel (nc->task);
GNUNET_free (nc);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r14688 - gnunet/src/peerinfo,
gnunet <=