[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r27203 - gnunet/src/hostlist
From: |
gnunet |
Subject: |
[GNUnet-SVN] r27203 - gnunet/src/hostlist |
Date: |
Fri, 17 May 2013 19:42:56 +0200 |
Author: grothoff
Date: 2013-05-17 19:42:56 +0200 (Fri, 17 May 2013)
New Revision: 27203
Modified:
gnunet/src/hostlist/hostlist-server.c
Log:
-fully abort and restart existing iteration on notify
Modified: gnunet/src/hostlist/hostlist-server.c
===================================================================
--- gnunet/src/hostlist/hostlist-server.c 2013-05-17 17:42:41 UTC (rev
27202)
+++ gnunet/src/hostlist/hostlist-server.c 2013-05-17 17:42:56 UTC (rev
27203)
@@ -79,11 +79,6 @@
static struct MHD_Response *response;
/**
- * NULL if we are not currenlty iterating over peer information.
- */
-static struct GNUNET_PEERINFO_IteratorContext *pitr;
-
-/**
* Handle for accessing peerinfo service.
*/
static struct GNUNET_PEERINFO_Handle *peerinfo;
@@ -99,7 +94,6 @@
static char *hostlist_uri;
-
/**
* Context for host processor.
*/
@@ -108,23 +102,32 @@
unsigned int size;
char *data;
+
+ struct GNUNET_PEERINFO_IteratorContext *pitr;
};
+/**
+ * NULL if we are not currenlty iterating over peer information.
+ */
+static struct HostSet *builder;
+
+
+
/**
* Function that assembles our response.
*/
static void
-finish_response (struct HostSet *results)
+finish_response ()
{
if (NULL != response)
MHD_destroy_response (response);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Creating hostlist response with %u bytes\n",
- (unsigned int) results->size);
+ (unsigned int) builder->size);
response =
- MHD_create_response_from_data (results->size, results->data, MHD_YES,
+ MHD_create_response_from_data (builder->size, builder->data, MHD_YES,
MHD_NO);
if ((NULL == daemon_handle_v4) && (NULL == daemon_handle_v6))
{
@@ -132,8 +135,9 @@
response = NULL;
}
GNUNET_STATISTICS_set (stats, gettext_noop ("bytes in hostlist"),
- results->size, GNUNET_YES);
- GNUNET_free (results);
+ builder->size, GNUNET_YES);
+ GNUNET_free (builder);
+ builder = NULL;
}
@@ -171,7 +175,6 @@
host_processor (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_HELLO_Message *hello, const char *err_msg)
{
- struct HostSet *results = cls;
size_t old;
size_t s;
int has_addr;
@@ -179,7 +182,9 @@
if (NULL != err_msg)
{
GNUNET_assert (NULL == peer);
- pitr = NULL;
+ builder->pitr = NULL;
+ GNUNET_free_non_null (builder->data);
+ GNUNET_free (builder);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
_("Error in communication with PEERINFO service: %s\n"),
err_msg);
@@ -187,8 +192,8 @@
}
if (NULL == peer)
{
- pitr = NULL;
- finish_response (results);
+ builder->pitr = NULL;
+ finish_response ();
return;
}
if (NULL == hello)
@@ -206,7 +211,7 @@
1, GNUNET_NO);
return;
}
- old = results->size;
+ old = builder->size;
s = GNUNET_HELLO_size (hello);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Received %u bytes of `%s' from peer `%s' for hostlist.\n",
@@ -223,8 +228,8 @@
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Adding peer `%s' to hostlist (%u bytes)\n", GNUNET_i2s (peer),
(unsigned int) s);
- GNUNET_array_grow (results->data, results->size, old + s);
- memcpy (&results->data[old], hello, s);
+ GNUNET_array_grow (builder->data, builder->size, old + s);
+ memcpy (&builder->data[old], hello, s);
}
@@ -412,21 +417,28 @@
process_notify (void *cls, const struct GNUNET_PeerIdentity *peer,
const struct GNUNET_HELLO_Message *hello, const char *err_msg)
{
- struct HostSet *results;
-
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Peerinfo is notifying us to rebuild our hostlist\n");
if (NULL != err_msg)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
_("Error in communication with PEERINFO service: %s\n"),
err_msg);
- if (NULL != pitr)
- return; /* re-build already in progress ... */
- results = GNUNET_malloc (sizeof (struct HostSet));
+ if (NULL != builder)
+ {
+ /* restart re-build already in progress ... */
+ GNUNET_PEERINFO_iterate_cancel (builder->pitr);
+ GNUNET_free_non_null (builder->data);
+ builder->size = 0;
+ builder->data = NULL;
+ }
+ else
+ {
+ builder = GNUNET_malloc (sizeof (struct HostSet));
+ }
GNUNET_assert (NULL != peerinfo);
- pitr =
+ builder->pitr =
GNUNET_PEERINFO_iterate (peerinfo, GNUNET_NO, NULL,
GNUNET_TIME_UNIT_MINUTES,
- &host_processor, results);
+ &host_processor, NULL);
}
@@ -716,10 +728,12 @@
GNUNET_PEERINFO_notify_cancel (notify);
notify = NULL;
}
- if (NULL != pitr)
+ if (NULL != builder)
{
- GNUNET_PEERINFO_iterate_cancel (pitr);
- pitr = NULL;
+ GNUNET_PEERINFO_iterate_cancel (builder->pitr);
+ builder->pitr = NULL;
+ GNUNET_free_non_null (builder->data);
+ GNUNET_free (builder);
}
if (NULL != peerinfo)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r27203 - gnunet/src/hostlist,
gnunet <=