*/
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 char *hostlist_uri;
-
/**
* Context for host processor.
*/
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))
{
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;
}
{
int *arg = cls;
- if (GNUNET_TIME_absolute_get_remaining (expiration).rel_value == 0)
+ if (0 == GNUNET_TIME_absolute_get_remaining (expiration).rel_value_us)
{
GNUNET_STATISTICS_update (stats,
gettext_noop ("expired addresses encountered"), 1,
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;
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);
}
if (NULL == peer)
{
- pitr = NULL;
- finish_response (results);
+ builder->pitr = NULL;
+ finish_response ();
return;
}
if (NULL == hello)
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",
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);
}
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));
- GNUNET_assert (NULL != peerinfo);
- pitr =
- GNUNET_PEERINFO_iterate (peerinfo, NULL, GNUNET_TIME_UNIT_MINUTES,
- &host_processor, results);
+ 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);
+ builder->pitr =
+ GNUNET_PEERINFO_iterate (peerinfo, GNUNET_NO, NULL, GNUNET_TIME_UNIT_MINUTES,
+ &host_processor, NULL);
}
GNUNET_assert (MHD_YES == MHD_get_fdset (daemon_handle, &rs, &ws, &es, &max));
haveto = MHD_get_timeout (daemon_handle, &timeout);
if (haveto == MHD_YES)
- tv.rel_value = (uint64_t) timeout;
+ tv.rel_value_us = (uint64_t) timeout;
else
tv = GNUNET_TIME_UNIT_FOREVER_REL;
GNUNET_NETWORK_fdset_copy_native (wrs, &rs, max + 1);
GNUNET_CONFIGURATION_get_value_string (cfg, "HOSTLIST",
"BINDTOIP", &ip));
}
- else
+ else
ip = NULL;
if (NULL != ip)
{
ip);
sa = NULL;
}
+ GNUNET_free (ip);
}
else
sa = NULL;
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)
{