/*
This file is part of GNUnet.
- Copyright (C) 2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2013 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
static struct GNUNET_CRYPTO_EddsaPrivateKey *my_private_key;
-/**
- * Task run during shutdown.
- *
- * @param cls unused
- * @param tc unused
- */
-static void
-cleanup_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
-{
- GNUNET_DHT_disconnect (dht);
- dht = NULL;
- GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
- stats = NULL;
- GNUNET_SERVER_notification_context_destroy (nc);
- nc = NULL;
- GNUNET_free (my_private_key);
- my_private_key = NULL;
-}
-
-
/**
* A client disconnected. Remove all of its data structure entries.
*
* @param client identification of the client
*/
static void
-handle_client_disconnect (void *cls, struct GNUNET_SERVER_Client *client)
+handle_client_disconnect (void *cls,
+ struct GNUNET_SERVER_Client *client)
{
struct ClientEntry *ce;
struct ClientEntry *nx;
REGEX_INTERNAL_search_cancel (ce->sh);
ce->sh = NULL;
}
- GNUNET_CONTAINER_DLL_remove (client_head, client_tail, ce);
+ GNUNET_CONTAINER_DLL_remove (client_head,
+ client_tail,
+ ce);
GNUNET_free (ce);
}
}
}
+/**
+ * Task run during shutdown.
+ *
+ * @param cls unused
+ */
+static void
+cleanup_task (void *cls)
+{
+ struct ClientEntry *ce;
+
+ while (NULL != (ce = client_head))
+ handle_client_disconnect (NULL,
+ ce->client);
+ GNUNET_DHT_disconnect (dht);
+ dht = NULL;
+ GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
+ stats = NULL;
+ GNUNET_SERVER_notification_context_destroy (nc);
+ nc = NULL;
+ GNUNET_free (my_private_key);
+ my_private_key = NULL;
+}
+
+
/**
* Periodic task to refresh our announcement of the regex.
*
- * @param cls the 'struct ClientEntry' of the client that triggered the
+ * @param cls the `struct ClientEntry *` of the client that triggered the
* announcement
- * @param tc scheduler context
*/
static void
-reannounce (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+reannounce (void *cls)
{
struct ClientEntry *ce = cls;
* @param cls the struct ClientEntry of the client searching
* @param id Peer providing a regex that matches the string.
* @param get_path Path of the get request.
- * @param get_path_length Lenght of get_path.
+ * @param get_path_length Lenght of @a get_path.
* @param put_path Path of the put request.
- * @param put_path_length Length of the put_path.
+ * @param put_path_length Length of the @a put_path.
*/
static void
handle_search_result (void *cls,
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
return;
}
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Starting to search for `%s'\n",
+ string);
ce = GNUNET_new (struct ClientEntry);
ce->client = client;
ce->sh = REGEX_INTERNAL_search (dht,
- string,
- &handle_search_result,
- ce,
- stats);
+ string,
+ &handle_search_result,
+ ce,
+ stats);
if (NULL == ce->sh)
{
GNUNET_break (0);
GNUNET_SCHEDULER_shutdown ();
return;
}
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
- NULL);
+ GNUNET_SCHEDULER_add_shutdown (&cleanup_task,
+ NULL);
nc = GNUNET_SERVER_notification_context_create (server, 1);
stats = GNUNET_STATISTICS_create ("regex", cfg);
GNUNET_SERVER_add_handlers (server, handlers);
- GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
+ GNUNET_SERVER_disconnect_notify (server,
+ &handle_client_disconnect,
+ NULL);
}