* @author Matthias Wachs
*/
#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
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 */