plugin datastore mysql
[oweals/gnunet.git] / src / testbed / gnunet-service-testbed-logger.c
index 6bf33e681b9ecacaa65fbe9516f11299da3acce8..0f9fab01bf20e3d4febb0a9fd490efe3af8fdc82 100644 (file)
@@ -1,6 +1,6 @@
 /*
   This file is part of GNUnet.
-  (C) 2008--2013 Christian Grothoff (and other contributing authors)
+  Copyright (C) 2008--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
@@ -14,8 +14,8 @@
 
   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.
 */
 
 /**
@@ -80,11 +80,6 @@ static struct MessageQueue *mq_tail;
  */
 struct GNUNET_BIO_WriteHandle *bio;
 
-/**
- * The shutdown task handle
- */
-static GNUNET_SCHEDULER_TaskIdentifier shutdown_task_id;
-
 /**
  * The number of connections we have
  */
@@ -95,15 +90,17 @@ static unsigned int nconn;
  */
 static int in_shutdown;
 
+
 /**
- * Message handler for GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
+ * Message handler for #GNUNET_MESSAGE_TYPE_TESTBED_ADDHOST messages
  *
  * @param cls NULL
  * @param client identification of the client
  * @param msg the actual message
  */
 static void
-handle_log_msg (void *cls, struct GNUNET_SERVER_Client *client,
+handle_log_msg (void *cls,
+               struct GNUNET_SERVER_Client *client,
                 const struct GNUNET_MessageHeader *msg)
 {
   uint16_t ms;
@@ -119,28 +116,26 @@ handle_log_msg (void *cls, struct GNUNET_SERVER_Client *client,
  * Task to clean up and shutdown nicely
  *
  * @param cls NULL
- * @param tc the TaskContext from scheduler
  */
 static void
-shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+shutdown_task (void *cls)
 {
   struct MessageQueue *mq_entry;
 
-  shutdown_task_id = GNUNET_SCHEDULER_NO_TASK;
   in_shutdown = GNUNET_YES;
   if (0 != nconn)
   {
     /* Delay shutdown if there are active connections */
-    shutdown_task_id = GNUNET_SCHEDULER_add_delayed
-        (GNUNET_TIME_UNIT_FOREVER_REL,
-         &shutdown_task, NULL);
+    GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
     return;
   }
   while (NULL != (mq_entry = mq_head))
   {
     GNUNET_free (mq_entry->msg);
     GNUNET_SERVER_client_drop (mq_entry->client);
-    GNUNET_CONTAINER_DLL_remove (mq_head, mq_tail, mq_entry);
+    GNUNET_CONTAINER_DLL_remove (mq_head,
+                                mq_tail,
+                                mq_entry);
     GNUNET_free (mq_entry);
   }
   GNUNET_break (GNUNET_OK == GNUNET_BIO_write_close (bio));
@@ -148,15 +143,16 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 
 
 /**
- * Functions with this signature are called whenever a client
+x * Functions with this signature are called whenever a client
  * is disconnected on the network level.
  *
  * @param cls closure
  * @param client identification of the client; NULL
  *        for the last call when the server is destroyed
  */
-static void 
-client_disconnected (void *cls, struct GNUNET_SERVER_Client *client)
+static void
+client_disconnected (void *cls,
+                    struct GNUNET_SERVER_Client *client)
 {
   if (NULL == client)
   {
@@ -164,11 +160,8 @@ client_disconnected (void *cls, struct GNUNET_SERVER_Client *client)
     return;
   }
   nconn--;
-  if (GNUNET_YES != in_shutdown)
-    return;
-  GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != shutdown_task_id);
-  GNUNET_SCHEDULER_cancel (shutdown_task_id);
-  shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+  if (GNUNET_YES == in_shutdown)
+    GNUNET_SCHEDULER_shutdown ();
 }
 
 
@@ -180,7 +173,8 @@ client_disconnected (void *cls, struct GNUNET_SERVER_Client *client)
  * @param client identification of the client
  */
 static void
-client_connected (void *cls, struct GNUNET_SERVER_Client *client)
+client_connected (void *cls,
+                 struct GNUNET_SERVER_Client *client)
 {
   if (NULL == client)
   {
@@ -200,8 +194,9 @@ client_connected (void *cls, struct GNUNET_SERVER_Client *client)
  * @param cfg configuration to use
  */
 static void
-logger_run (void *cls, struct GNUNET_SERVER_Handle *server,
-             const struct GNUNET_CONFIGURATION_Handle *cfg)
+logger_run (void *cls,
+           struct GNUNET_SERVER_Handle *server,
+           const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   static const struct GNUNET_SERVER_MessageHandler message_handlers[] = {
     {&handle_log_msg, NULL, GNUNET_MESSAGE_TYPE_TESTBED_LOGGER_MSG, 0},
@@ -214,10 +209,14 @@ logger_run (void *cls, struct GNUNET_SERVER_Handle *server,
   pid_t pid;
 
   if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_filename (cfg, "TESTBED-LOGGER", "DIR",
+      GNUNET_CONFIGURATION_get_value_filename (cfg,
+                                              "TESTBED-LOGGER",
+                                              "DIR",
                                                &dir))
   {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Not logging directory definied.  Exiting\n");
+    GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
+                              "TESTBED-LOGGER",
+                              "DIR");
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
@@ -226,14 +225,19 @@ logger_run (void *cls, struct GNUNET_SERVER_Handle *server,
   hname = GNUNET_malloc (hname_len);
   if (0 != gethostname (hname, hname_len))
   {
-    LOG (GNUNET_ERROR_TYPE_ERROR, "Cannot get hostname.  Exiting\n");
+    LOG (GNUNET_ERROR_TYPE_ERROR,
+        "Cannot get hostname.  Exiting\n");
     GNUNET_free (hname);
     GNUNET_free (dir);
     GNUNET_SCHEDULER_shutdown ();
     return;
   }
-  (void) GNUNET_asprintf (&fn, "%s/%.*s_%jd.dat", dir, hname_len, hname,
-                          (intmax_t) pid);
+  GNUNET_asprintf (&fn,
+                  "%s/%.*s_%jd.dat",
+                  dir,
+                  hname_len,
+                  hname,
+                  (intmax_t) pid);
   GNUNET_free (hname);
   GNUNET_free (dir);
   if (NULL == (bio = GNUNET_BIO_write_open (fn)))
@@ -246,9 +250,7 @@ logger_run (void *cls, struct GNUNET_SERVER_Handle *server,
   GNUNET_SERVER_add_handlers (server, message_handlers);
   GNUNET_SERVER_connect_notify (server, &client_connected, NULL);
   GNUNET_SERVER_disconnect_notify (server, &client_disconnected, NULL);
-  shutdown_task_id =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
-                                    &shutdown_task, NULL);
+  GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL);
   LOG_DEBUG ("TESTBED-LOGGER startup complete\n");
 }
 
@@ -259,11 +261,10 @@ logger_run (void *cls, struct GNUNET_SERVER_Handle *server,
 int
 main (int argc, char *const *argv)
 {
-  //sleep (15);                 /* Debugging */
   return (GNUNET_OK ==
           GNUNET_SERVICE_run (argc, argv, "testbed-logger",
                               GNUNET_SERVICE_OPTION_NONE,
                               &logger_run, NULL)) ? 0 : 1;
 }
 
-/* end of gnunet-service-testbed.c */
+/* end of gnunet-service-testbed-logger.c */