[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.