- replace deprecated INCLUDES with AM_CPPFLAGS
[oweals/gnunet.git] / src / experimentation / gnunet-daemon-experimentation.c
index 1b8cf14184e09fca800da06bdb5a6aaf0d79f504..60a515022ebb6172880503db8746677e075528b2 100644 (file)
  */
 #include "platform.h"
 #include "gnunet_getopt_lib.h"
-#include "gnunet_service_lib.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_core_service.h"
+#include "gnunet_statistics_service.h"
+#include "gnunet-daemon-experimentation.h"
 
 
 /**
- * Task run during shutdown.
+ * Statistics handle shared between components
+ */
+struct GNUNET_STATISTICS_Handle *GED_stats;
+
+
+/**
+ * Configuration handle shared between components
+ */
+struct GNUNET_CONFIGURATION_Handle *GED_cfg;
+
+
+/**
+ * Task run during shutdown to stop all submodules of the experimentation daemon.
  *
  * @param cls unused
  * @param tc unused
  */
 static void
-cleanup_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  /* FIXME: do clean up here */
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Experimentation daemon shutting down ...\n"));
+
+  GED_scheduler_stop ();
+  GED_nodes_stop ();
+  GED_experiments_stop ();
+  GED_storage_stop ();
+  GED_capabilities_stop ();
 }
 
 
 /**
- * Process template requests.
+ * Function starting all submodules of the experimentation daemon.
  *
- * @param cls closure
- * @param server the initialized server
- * @param cfg configuration to use
+ * @param cls always NULL
+ * @param args temaining command line arguments
+ * @param cfgfile configuration file used
+ * @param cfg configuration handle
  */
 static void
-run (void *cls, struct GNUNET_SERVER_Handle *server,
+run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
-  static const struct GNUNET_SERVER_MessageHandler handlers[] = {
-    /* FIXME: add handlers here! */
-    {NULL, NULL, 0, 0}
-  };
-  /* FIXME: do setup here */
-  GNUNET_SERVER_add_handlers (server, handlers);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &cleanup_task,
+       GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Experimentation daemon starting ...\n"));
+
+       GED_cfg = (struct GNUNET_CONFIGURATION_Handle *) cfg;
+       GED_stats = GNUNET_STATISTICS_create ("experimentation", cfg);
+       if (NULL == GED_stats)
+       {
+               GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to create statistics!\n"));
+               return;
+       }
+
+       GED_capabilities_start ();
+
+       GED_storage_start ();
+
+       if (GNUNET_SYSERR == GED_experiments_start ())
+       {
+         GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
+         return;
+       }
+
+       GED_nodes_start ();
+  GED_scheduler_start ();
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
                                 NULL);
 }
 
 
 /**
- * The main function for the template service.
+ * The main function for the experimentation daemon.
  *
  * @param argc number of arguments from the command line
  * @param argv command line arguments
@@ -74,9 +112,14 @@ run (void *cls, struct GNUNET_SERVER_Handle *server,
 int
 main (int argc, char *const *argv)
 {
+  static const struct GNUNET_GETOPT_CommandLineOption options[] = {
+    GNUNET_GETOPT_OPTION_END
+  };
+
   return (GNUNET_OK ==
-          GNUNET_SERVICE_run (argc, argv, "experimentation",
-                              GNUNET_SERVICE_OPTION_NONE, &run, NULL)) ? 0 : 1;
+          GNUNET_PROGRAM_run (argc, argv, "experimentation",
+                                                                                       _("GNUnet experimentation daemon"), options,
+                              &run, NULL)) ? 0 : 1;
 }
 
 /* end of gnunet-daemon-experimentation.c */