gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] 03/05: libgnunet: Add a new daemon main macro for daemons/serve


From: gnunet
Subject: [gnunet] 03/05: libgnunet: Add a new daemon main macro for daemons/servers in libgnunet.
Date: Sat, 28 Oct 2023 00:14:59 +0200

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository gnunet.

commit f5a3caba524371b1b1b257cb3ff0fd9f833b39c3
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Thu Oct 26 15:55:34 2023 +0200

    libgnunet: Add a new daemon main macro for daemons/servers in libgnunet.
---
 src/include/gnunet_program_lib.h      | 39 ++++++++++++++++++++++++++++
 src/lib/util/program.c                | 34 +++++++++++++++++++++++++
 src/service/rest/gnunet-rest-server.c | 48 ++++++-----------------------------
 3 files changed, 81 insertions(+), 40 deletions(-)

diff --git a/src/include/gnunet_program_lib.h b/src/include/gnunet_program_lib.h
index 0c51d6cf7..6290ec3d4 100644
--- a/src/include/gnunet_program_lib.h
+++ b/src/include/gnunet_program_lib.h
@@ -122,6 +122,45 @@ GNUNET_PROGRAM_run (int argc,
                     GNUNET_PROGRAM_Main task,
                     void *task_cls);
 
+enum GNUNET_GenericReturnValue
+GNUNET_DAEMON_register (const char *daemon_name,
+                        const char *daemon_desc,
+                        GNUNET_PROGRAM_Main task);
+
+#ifndef HAVE_GNUNET_MONOLITH
+#define GNUNET_DAEMON_MAIN(daemon_name, daemon_help, init_cb) \
+        int \
+        main (int argc, \
+              char *const *argv) \
+        { \
+          int ret; \
+          struct GNUNET_GETOPT_CommandLineOption options[] = { \
+            GNUNET_GETOPT_OPTION_END \
+          };\
+          if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, 
&argv)) \
+    return 2; \
+            ret =  GNUNET_PROGRAM_run (argc, \
+                                       argv, \
+                                       daemon_name, \
+                                       daemon_help, \
+                                       options, \
+                                       init_cb, \
+                                       NULL); \
+          GNUNET_free_nz ((void*) argv); \
+          return ret; \
+        }
+#else
+#define GNUNET_DAEMON_MAIN(daemon_name, daemon_help, init_cb) \
+        static int __attribute__ ((constructor)) \
+        init (void) \
+        { \
+          return GNUNET_DAEMON_register (daemon_name, \
+                                         daemon_help, \
+                                         init_cb); \
+        }
+#endif
+
+
 
 #if 0                           /* keep Emacsens' auto-indent happy */
 {
diff --git a/src/lib/util/program.c b/src/lib/util/program.c
index 21b616ee2..d492c9a07 100644
--- a/src/lib/util/program.c
+++ b/src/lib/util/program.c
@@ -415,5 +415,39 @@ GNUNET_PROGRAM_run (int argc,
                               GNUNET_NO);
 }
 
+/* A list of daemons to be launched when GNUNET_main()
+ * is called
+ */
+struct DaemonHandleList
+{
+  /* DLL */
+  struct DaemonHandleList *prev;
+
+  /* DLL */
+  struct DaemonHandleList *next;
+
+  /* Program to launch */
+  GNUNET_PROGRAM_Main d;
+};
+
+/* The daemon list */
+static struct DaemonHandleList *hll_head = NULL;
+
+/* The daemon list */
+static struct DaemonHandleList *hll_tail = NULL;
+
+enum GNUNET_GenericReturnValue
+GNUNET_DAEMON_register (const char *daemon_name,
+                        const char *daemon_help,
+                        GNUNET_PROGRAM_Main task)
+{
+  struct DaemonHandleList *hle;
+
+  hle = GNUNET_new (struct DaemonHandleList);
+  hle->d = task;
+  GNUNET_CONTAINER_DLL_insert (hll_head, hll_tail, hle);
+  return GNUNET_OK;
+}
+
 
 /* end of program.c */
diff --git a/src/service/rest/gnunet-rest-server.c 
b/src/service/rest/gnunet-rest-server.c
index 7cc4025b0..c4b59de96 100644
--- a/src/service/rest/gnunet-rest-server.c
+++ b/src/service/rest/gnunet-rest-server.c
@@ -1028,6 +1028,7 @@ do_shutdown (void *cls)
   kill_httpd ();
   GNUNET_free (allow_credentials);
   GNUNET_free (allow_headers);
+  MHD_destroy_response (failure_response);
 }
 
 
@@ -1145,10 +1146,10 @@ setup_plugin (const char *name,
  */
 static void
 run (void *cls,
-     char *const *args,
-     const char *cfgfile,
-     const struct GNUNET_CONFIGURATION_Handle *c)
+     const struct GNUNET_CONFIGURATION_Handle *c,
+     struct GNUNET_SERVICE_Handle *service)
 {
+  static const char *err_page = "{}";
   char *addr_str;
   char *basic_auth_file;
   uint64_t secret;
@@ -1156,6 +1157,9 @@ run (void *cls,
   cfg = c;
   plugins_head = NULL;
   plugins_tail = NULL;
+  failure_response = MHD_create_response_from_buffer (strlen (err_page),
+                                                      (void *) err_page,
+                                                      MHD_RESPMEM_PERSISTENT);
   /* Get port to bind to */
   if (GNUNET_OK !=
       GNUNET_CONFIGURATION_get_value_number (cfg, "rest", "HTTP_PORT", &port))
@@ -1419,42 +1423,6 @@ run (void *cls,
 }
 
 
-/**
- *
- * The main function for gnunet-rest-service
- *
- * @param argc number of arguments from the cli
- * @param argv command line arguments
- * @return 0 ok, 1 on error
- *
- */
-int
-main (int argc, char *const *argv)
-{
-  struct GNUNET_GETOPT_CommandLineOption options[] =
-  { GNUNET_GETOPT_OPTION_END };
-  static const char *err_page = "{}";
-  int ret;
-
-  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
-    return 2;
-  GNUNET_log_setup ("gnunet-rest-server", "WARNING", NULL);
-  failure_response = MHD_create_response_from_buffer (strlen (err_page),
-                                                      (void *) err_page,
-                                                      MHD_RESPMEM_PERSISTENT);
-  ret = (GNUNET_OK == GNUNET_PROGRAM_run (argc,
-                                          argv,
-                                          "gnunet-rest-server",
-                                          _ ("GNUnet REST server"),
-                                          options,
-                                          &run,
-                                          NULL))
-        ? 0
-        : 1;
-  MHD_destroy_response (failure_response);
-  GNUNET_free_nz ((char *) argv);
-  return ret;
-}
-
+GNUNET_DAEMON_MAIN("rest", _("GNUnet REST service"), &run)
 
 /* end of gnunet-rest-server.c */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]