#include <json-c/json.h>
-#include <systemd/sd-daemon.h>
+#if WITH_SYSTEMD
+# include <systemd/sd-daemon.h>
+#endif
#include "afb-args.h"
-#include "afb-hswitch.h"
#include "afb-apiset.h"
#include "afb-autoset.h"
#include "afb-api-so.h"
-#if defined(WITH_DBUS_TRANSPARENCY)
+#if WITH_DBUS_TRANSPARENCY
# include "afb-api-dbus.h"
#endif
#include "afb-api-ws.h"
-#include "afb-hsrv.h"
-#include "afb-hreq.h"
#include "afb-xreq.h"
#include "afb-session.h"
#include "verbose.h"
#include "afb-hook-flags.h"
#endif
#include "afb-debug.h"
-#if defined(WITH_SUPERVISION)
+#if WITH_SUPERVISION
# include "afb-supervision.h"
#endif
+#if WITH_LIBMICROHTTPD
+# include "afb-hsrv.h"
+# include "afb-hreq.h"
+# include "afb-hswitch.h"
+#endif
#include "process-name.h"
#include "wrap-json.h"
| http server
| Handles the HTTP server
+--------------------------------------------------------- */
+#if WITH_LIBMICROHTTPD
static int init_alias(void *closure, const char *spec)
{
struct afb_hsrv *hsrv = closure;
return hsrv;
}
+#endif
/*---------------------------------------------------------
| execute_command
+--------------------------------------------------------- */
+static void wait_child_and_exit()
+{
+ pid_t pidchld = childpid;
+
+ childpid = 0;
+ if (!SELF_PGROUP)
+ killpg(pidchld, SIGKILL);
+ waitpid(pidchld, NULL, 0);
+ exit(0);
+}
+
static void on_sigchld(int signum, siginfo_t *info, void *uctx)
{
if (info->si_pid == childpid) {
case CLD_EXITED:
case CLD_KILLED:
case CLD_DUMPED:
- childpid = 0;
- if (!SELF_PGROUP)
- killpg(info->si_pid, SIGKILL);
- waitpid(info->si_pid, NULL, 0);
- exit(0);
+ jobs_exit(wait_child_and_exit);
+ default:
+ break;
}
}
}
#endif
*traceses = NULL, *traceglob = NULL;
#endif
- const char *workdir, *rootdir, *token, *rootapi;
- struct json_object *settings;
- struct afb_hsrv *hsrv;
+ const char *workdir = NULL, *rootdir = NULL, *token = NULL;
+ struct json_object *settings = NULL;
int max_session_count, session_timeout, api_timeout;
- int no_httpd, http_port;
int rc;
+#if WITH_LIBMICROHTTPD
+ const char *rootapi = NULL;
+ int no_httpd = 0, http_port = -1;
+ struct afb_hsrv *hsrv;
+#endif
afb_debug("start-entry");
exit(1);
}
- settings = NULL;
- no_httpd = 0;
- http_port = -1;
- rootapi = token = NULL;
rc = wrap_json_unpack(main_config, "{"
"ss ss s?s"
"si si si"
+#if WITH_LIBMICROHTTPD
"s?b s?i s?s"
+#endif
#if WITH_AFB_HOOK
#if !defined(REMOVE_LEGACY_TRACE)
"s?s s?s"
"cntxtimeout", &session_timeout,
"session-max", &max_session_count,
+#if WITH_LIBMICROHTTPD
"no-httpd", &no_httpd,
"port", &http_port,
"rootapi", &rootapi,
-
+#endif
#if WITH_AFB_HOOK
#if !defined(REMOVE_LEGACY_TRACE)
"tracesvc", &tracesvc,
goto error;
}
+#if WITH_LIBMICROHTTPD
/* setup HTTP */
if (!no_httpd) {
if (http_port < 0) {
goto error;
}
}
+#endif
/* configure the daemon */
afb_export_set_config(settings);
ERROR("failed to setup monitor");
goto error;
}
-#if defined(WITH_SUPERVISION)
+#if WITH_SUPERVISION
if (afb_supervision_init(main_apiset, main_config) < 0) {
ERROR("failed to setup supervision");
goto error;
/* load bindings and apis */
afb_debug("start-load");
+#if WITH_DYNAMIC_BINDING
apiset_start_list("binding", afb_api_so_add_binding, "the binding");
apiset_start_list("ldpaths", afb_api_so_add_pathset_fails, "the binding path set");
apiset_start_list("weak-ldpaths", afb_api_so_add_pathset_nofails, "the weak binding path set");
+#endif
apiset_start_list("auto-api", afb_autoset_add_any, "the automatic api path set");
-#if defined(WITH_DBUS_TRANSPARENCY)
+#if WITH_DBUS_TRANSPARENCY
apiset_start_list("dbus-client", afb_api_dbus_add_client, "the afb-dbus client");
#endif
apiset_start_list("ws-client", afb_api_ws_add_client_weak, "the afb-websocket client");
/* export started apis */
apiset_start_list("ws-server", afb_api_ws_add_server, "the afb-websocket service");
-#if defined(WITH_DBUS_TRANSPARENCY)
+#if WITH_DBUS_TRANSPARENCY
apiset_start_list("dbus-server", afb_api_dbus_add_server, "the afb-dbus service");
#endif
/* start the HTTP server */
+#if WITH_LIBMICROHTTPD
afb_debug("start-http");
if (!no_httpd) {
if (!afb_hreq_init_cookie(http_port, rootapi, session_timeout)) {
if (hsrv == NULL)
goto error;
}
+#endif
/* run the startup calls */
afb_debug("start-call");
goto error;
/* ready */
+#if WITH_SYSTEMD
sd_notify(1, "READY=1");
+#endif
/* activate the watchdog */
#if HAS_WATCHDOG