Allow to remove libmicrohttpd (HTTP server)
authorJose Bollo <jose.bollo@iot.bzh>
Thu, 21 Feb 2019 13:39:59 +0000 (14:39 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Fri, 22 Mar 2019 11:21:54 +0000 (12:21 +0100)
This allows to remove the dependency to libmicrohttpd.
At the end, this will allow either to replace it with
an other HTTP library or to fully remove the HTTP server.

It also makes a tiny improvement of the conditionnal compilation.

Change-Id: I24106659af04453b6693f2cda0939a601391202f
Signed-off-by: Jose Bollo <jose.bollo@iot.bzh>
15 files changed:
CMakeLists.txt
src/CMakeLists.txt
src/afb-args.c
src/afb-hreq.c
src/afb-hreq.h
src/afb-hsrv.c
src/afb-hsrv.h
src/afb-hswitch.c
src/afb-hswitch.h
src/afb-method.c
src/afb-method.h
src/afb-websock.c
src/afb-websock.h
src/evmgr.c
src/main-afb-daemon.c

index f5c6d2a..853f5fe 100644 (file)
@@ -39,16 +39,54 @@ INCLUDE(CTest)
 ###########################################################################
 # possible settings
 
-option(AGL_DEVEL                   "Activates developping features" OFF)
-option(WITH_SYSTEMD                "Require use of libsystemd"      ON)
-
-option(INCLUDE_MONITORING          "Activates installation of monitoring" OFF)
+option(ONLY_DEVTOOLS               "Produces only development tools" OFF)
+option(AGL_DEVEL                   "Activates developping features"  OFF)
+option(WITH_SYSTEMD                "Require use of libsystemd"       ON)
+
+############################################################################
+
+option(WITH_SIG_MONITOR_DUMPSTACK "Activate dump stack on error"           ON)
+option(WITH_SIG_MONITOR_SIGNALS   "Activate handling of signals"           ON)
+option(WITH_SIG_MONITOR_FOR_CALL  "Activate monitoring of calls"           ON)
+option(WITH_SIG_MONITOR_TIMERS    "Activate monitoring of call expiration" ON)
+option(WITH_AFB_HOOK              "Include hooking"                        ON)
+option(WITH_AFB_TRACE             "Include monitoring trace"               ON)
+option(WITH_SUPERVISOR            "Activates installation of supervisor"   OFF)
+option(WITH_MONITORING            "Activates installation of monitoring" OFF)
+option(WITH_DBUS_TRANSPARENCY     "Allows API transparency over DBUS"      OFF)
+option(WITH_LEGACY_BINDING_V1     "Includes the legacy Binding API version 1" OFF)
+option(WITH_LEGACY_BINDING_V2     "Includes the legacy Binding API version 2" ON)
+option(WITH_LEGACY_BINDING_VDYN   "Includes the legacy Binding API version dynamic" OFF)
+option(WITH_DYNAMIC_BINDING       "Allow to load dynamic bindings (shared libraries)" ON)
+option(WITH_LIBMICROHTTPD         "Activates HTTP server through LIBMICROHTTPD" ON)
+
+############################################################################
+# legacy options
 
 option(INCLUDE_SUPERVISOR          "Activates installation of supervisor" OFF)
+option(INCLUDE_MONITORING          "Activates installation of monitoring" OFF)
 option(INCLUDE_DBUS_TRANSPARENCY   "Allows API transparency over DBUS" OFF)
 option(INCLUDE_LEGACY_BINDING_V1   "Includes the legacy Binding API version 1" OFF)
 option(INCLUDE_LEGACY_BINDING_VDYN "Includes the legacy Binding API version dynamic" OFF)
 
+if(INCLUDE_SUPERVISOR)
+  set(WITH_SUPERVISOR ON)
+endif()
+if(INCLUDE_MONITORING)
+  set(WITH_MONITORING ON)
+endif()
+if(INCLUDE_DBUS_TRANSPARENCY)
+  set(WITH_DBUS_TRANSPARENCY ON)
+endif()
+if(INCLUDE_LEGACY_BINDING_V1)
+  set(WITH_LEGACY_BINDING_V1 ON)
+endif()
+if(INCLUDE_LEGACY_BINDING_VDYN)
+  set(WITH_LEGACY_BINDING_VDYN ON)
+endif()
+
+###########################################################################
+
 set(AFS_SUPERVISION_SOCKET "@urn:AGL:afs:supervision:socket" CACHE STRING "Internal socket for supervision")
 set(AFS_SUPERVISOR_PORT 1619 CACHE STRING "Port of service for the supervisor")
 set(AFS_SUPERVISOR_TOKEN HELLO CACHE STRING "Secret token for the supervisor")
@@ -75,61 +113,54 @@ set(CMAKE_C_FLAGS_CCOV         "-g -O2 --coverage")
 
 ###########################################################################
 
+if(ONLY_DEVTOOLS)
+  set(WITH_LIBMICROHTTPD OFF)
+  set(WITH_SYSTEMD OFF)
+endif(ONLY_DEVTOOLS)
+
+if(NOT WITH_LIBMICROHTTPD)
+  set(WITH_MONITORING OFF)
+endif()
+###########################################################################
+
 INCLUDE(FindThreads)
 FIND_PACKAGE(Threads)
 
 PKG_CHECK_MODULES(json-c REQUIRED json-c)
-
-CHECK_INCLUDE_FILES(magic.h HAVE_MAGIC_H)
-CHECK_LIBRARY_EXISTS(magic magic_load "" HAVE_LIBMAGIC_SO)
-IF(HAVE_MAGIC_H)
-  IF(HAVE_LIBMAGIC_SO)
-    SET(HAVE_LIBMAGIC "1")
-    SET(LIBMAGIC_LDFLAGS -lmagic)
-  ENDIF(HAVE_LIBMAGIC_SO)
-ENDIF(HAVE_MAGIC_H)
-
-PKG_CHECK_MODULES(libsystemd libsystemd>=222)
-PKG_CHECK_MODULES(libmicrohttpd libmicrohttpd>=0.9.60)
-PKG_CHECK_MODULES(openssl openssl)
 PKG_CHECK_MODULES(uuid uuid)
 PKG_CHECK_MODULES(cynara cynara-client)
 
-ADD_DEFINITIONS("-DAFS_SUPERVISION_SOCKET=\"${AFS_SUPERVISION_SOCKET}\"")
-ADD_DEFINITIONS("-DAFS_SUPERVISOR_TOKEN=\"${AFS_SUPERVISOR_TOKEN}\"")
-ADD_DEFINITIONS("-DAFS_SUPERVISOR_PORT=${AFS_SUPERVISOR_PORT}")
+if(WITH_LIBMICROHTTPD)
 
-IF(cynara_FOUND)
+  CHECK_INCLUDE_FILES(magic.h HAVE_MAGIC_H)
+  CHECK_LIBRARY_EXISTS(magic magic_load "" HAVE_LIBMAGIC_SO)
+  if(HAVE_MAGIC_H AND HAVE_LIBMAGIC_SO)
+    SET(HAVE_LIBMAGIC "1")
+    SET(LIBMAGIC_LDFLAGS -lmagic)
+  else()
+    MESSAGE(FATAL_ERROR "\"magic.h\" or \"libmagic.so\" missing.
+    Please install the \"file-devel\" or \"libmagic-dev\" package !")
+  endif()
+  PKG_CHECK_MODULES(libmicrohttpd REQUIRED libmicrohttpd>=0.9.60)
+  PKG_CHECK_MODULES(openssl REQUIRED openssl)
+endif(WITH_LIBMICROHTTPD)
+
+if(cynara_FOUND)
        ADD_DEFINITIONS(-DBACKEND_PERMISSION_IS_CYNARA)
-ENDIF(cynara_FOUND)
+endif(cynara_FOUND)
 
-IF(NOT libsystemd_FOUND AND NOT WITH_SYSTEMD)
-  set(libsystemd_FOUND 1)
-ENDIF()
-IF(HAVE_LIBMAGIC AND libsystemd_FOUND AND libmicrohttpd_FOUND AND openssl_FOUND AND uuid_FOUND)
-ELSE()
-  IF(NOT HAVE_LIBMAGIC)
-    MESSAGE(WARNING "\"magic.h\" or \"libmagic.so\" missing.
-    Please install the \"file-devel\" or \"libmagic-dev\" package !")
-  ENDIF(NOT HAVE_LIBMAGIC)
-  IF(NOT libsystemd_FOUND)
-    MESSAGE(WARNING "Dependency to 'libsystemd' is missing")
-  ENDIF()
-  IF(NOT libmicrohttpd_FOUND)
-    MESSAGE(WARNING "Dependency to 'libmicrohttpd' is missing")
-  ENDIF()
-  IF(NOT openssl_FOUND)
-    MESSAGE(WARNING "Dependency to 'openssl' is missing")
-  ENDIF()
+if(WITH_SYSTEMD)
+  PKG_CHECK_MODULES(libsystemd REQUIRED libsystemd>=222)
+else()
+  PKG_CHECK_MODULES(libsystemd libsystemd>=222)
+endif(WITH_SYSTEMD)
+
+IF(NOT ONLY_DEVTOOLS)
   IF(NOT uuid_FOUND)
-    MESSAGE(WARNING "Dependency to 'uuid' is missing")
-  ENDIF()
-  IF(NOT ONLY_DEVTOOLS)
-    MESSAGE(FATAL_ERROR "Can't compile the binder, either define ONLY_DEVTOOLS or install dependencies")
+    MESSAGE(FATAL_ERROR "Dependency to 'uuid' is missing")
   ENDIF()
 ENDIF()
 
-ADD_DEFINITIONS(-DUSE_MAGIC_MIME_TYPE)
 ADD_DEFINITIONS(-DAFB_VERSION="${PROJECT_VERSION}")
 
 INCLUDE_DIRECTORIES(
@@ -154,7 +185,7 @@ SET(link_libraries
        ${LIBMAGIC_LDFLAGS}
        -ldl
        -lrt
-       )
+)
 
 ADD_SUBDIRECTORY(src/devtools)
 
@@ -165,8 +196,7 @@ ELSE()
 
        ###########################################################################
        # activates the monitoring by default
-       if(INCLUDE_MONITORING AND NOT ONLY_DEVTOOLS)
-               add_definitions(-DWITH_MONITORING_OPTION)
+       if(WITH_MONITORING)
                INSTALL(DIRECTORY
                        ${CMAKE_CURRENT_SOURCE_DIR}/test/monitoring
                        DESTINATION
index fbefcda..e3ee753 100644 (file)
@@ -20,37 +20,10 @@ if (CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
     message(FATAL_ERROR "Require at least gcc-4.9")
 endif(CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
 
-ADD_DEFINITIONS(-DBINDING_INSTALL_DIR="${binding_install_dir}")
-# Always add INFER_EXTENSION (more details in afb-hreq.c)
-ADD_DEFINITIONS(-DINFER_EXTENSION)
+add_definitions(-DBINDING_INSTALL_DIR="${binding_install_dir}")
 
 ############################################################################
 # TODO: improve below setting by using config file
-option(WITH_SIG_MONITOR_DUMPSTACK "Activate dump stack on error"           ON)
-option(WITH_SIG_MONITOR_SIGNALS   "Activate handling of signals"           ON)
-option(WITH_SIG_MONITOR_FOR_CALL  "Activate monitoring of calls"           ON)
-option(WITH_SIG_MONITOR_TIMERS    "Activate monitoring of call expiration" ON)
-option(WITH_AFB_HOOK              "Include hooking"                        ON)
-option(WITH_AFB_TRACE             "Include monitoring trace"               ON)
-option(WITH_SUPERVISOR            "Activates installation of supervisor"   OFF)
-option(WITH_DBUS_TRANSPARENCY     "Allows API transparency over DBUS"      OFF)
-option(WITH_LEGACY_BINDING_V1     "Includes the legacy Binding API version 1" OFF)
-option(WITH_LEGACY_BINDING_V2     "Includes the legacy Binding API version 2" ON)
-option(WITH_LEGACY_BINDING_VDYN   "Includes the legacy Binding API version dynamic" OFF)
-option(WITH_DYNAMIC_BINDING       "Allow to load dynamic bindings (shared libraries)" ON)
-
-if(INCLUDE_SUPERVISOR)
-  set(WITH_SUPERVISOR ON)
-endif()
-if(INCLUDE_DBUS_TRANSPARENCY)
-  set(WITH_DBUS_TRANSPARENCY ON)
-endif()
-if(INCLUDE_LEGACY_BINDING_V1)
-  set(WITH_LEGACY_BINDING_V1 ON)
-endif()
-if(INCLUDE_LEGACY_BINDING_VDYN)
-  set(WITH_LEGACY_BINDING_VDYN ON)
-endif()
 
 add_definitions(
   -DAGL_DEVEL=$<BOOL:${AGL_DEVEL}>
@@ -68,7 +41,26 @@ add_definitions(
   -DWITH_DYNAMIC_BINDING=$<BOOL:${WITH_DYNAMIC_BINDING}>
   -DWITH_SYSTEMD=$<BOOL:${WITH_SYSTEMD}>
   -DWITH_FDEV_EPOLL=$<NOT:$<BOOL:${WITH_SYSTEMD}>>
+  -DWITH_LIBMICROHTTPD=$<BOOL:${WITH_LIBMICROHTTPD}>
+  -DWITH_MONITORING=$<BOOL:${WITH_MONITORING}>
 )
+
+if (WITH_SUPERVISOR)
+  add_definitions(
+     -DAFS_SUPERVISION_SOCKET=\"${AFS_SUPERVISION_SOCKET}\"
+     -DAFS_SUPERVISOR_TOKEN=\"${AFS_SUPERVISOR_TOKEN}\"
+     -DAFS_SUPERVISOR_PORT=${AFS_SUPERVISOR_PORT}
+  )
+endif()
+
+if(WITH_LIBMICROHTTPD)
+  # Always add INFER_EXTENSION (more details in afb-hreq.c)
+  add_definitions(
+     -DINFER_EXTENSION=1
+     -DUSE_MAGIC_MIME_TYPE=1
+  )
+endif()
+
 ############################################################################
 
 SET(AFB_LIB_SOURCES
index 467f086..b7ef1f5 100644 (file)
@@ -58,7 +58,9 @@
 /**
  * The default timeout of cache in seconds
  */
+#if WITH_LIBMICROHTTPD
 #define DEFAULT_CACHE_TIMEOUT          100000
+#endif
 
 /**
  * The default maximum count of sessions
 /**
  * The default HTTP port to serve
  */
+#if WITH_LIBMICROHTTPD
 #define DEFAULT_HTTP_PORT              1234
+#endif
 
 // Define command line option
 #define SET_BACKGROUND       1
 #define SET_FOREGROUND       2
 #define SET_ROOT_DIR         3
+
+#if WITH_LIBMICROHTTPD
 #define SET_ROOT_BASE        4
 #define SET_ROOT_API         5
 #define ADD_ALIAS            6
-
 #define SET_CACHE_TIMEOUT    7
+#endif
 
 #if WITH_DYNAMIC_BINDING
 #define ADD_LDPATH          10
 #define ADD_WS_CLIENT       16
 #define ADD_WS_SERVICE      17
 
+#if WITH_LIBMICROHTTPD
 #define SET_ROOT_HTTP       18
-
 #define SET_NO_HTTPD        19
+#endif
 
 #define SET_TRACEEVT        20
 #define SET_TRACESES        21
 #define SET_EXEC           'e'
 #define GET_HELP           'h'
 #define SET_LOG            'l'
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
 #define SET_MONITORING     'M'
 #endif
 #define SET_NAME           'n'
 #define SET_OUTPUT         'o'
 #define SET_PORT           'p'
 #define SET_QUIET          'q'
+#if WITH_LIBMICROHTTPD
 #define SET_RANDOM_TOKEN   'r'
+#endif
 #define ADD_SET            's'
+#if WITH_LIBMICROHTTPD
 #define SET_TOKEN          't'
 #define SET_UPLOAD_DIR     'u'
+#endif
 #define GET_VERSION        'V'
 #define SET_VERBOSE        'v'
 #define SET_WORK_DIR       'w'
@@ -161,18 +172,23 @@ static struct option_desc optdefs[] = {
 
        {SET_NAME,            1, "name",        "Set the visible name"},
 
+#if WITH_LIBMICROHTTPD
+       {SET_NO_HTTPD,        0, "no-httpd",    "Forbid HTTP service"},
        {SET_PORT,            1, "port",        "HTTP listening TCP port  [default " d2s(DEFAULT_HTTP_PORT) "]"},
        {SET_ROOT_HTTP,       1, "roothttp",    "HTTP Root Directory [default no root http (files not served but apis still available)]"},
        {SET_ROOT_BASE,       1, "rootbase",    "Angular Base Root URL [default /opa]"},
        {SET_ROOT_API,        1, "rootapi",     "HTML Root API URL [default /api]"},
        {ADD_ALIAS,           1, "alias",       "Multiple url map outside of rootdir [eg: --alias=/icons:/usr/share/icons]"},
+       {SET_UPLOAD_DIR,      1, "uploaddir",   "Directory for uploading files [default: workdir] relative to workdir"},
+       {SET_CACHE_TIMEOUT,   1, "cache-eol",   "Client cache end of live [default " d2s(DEFAULT_CACHE_TIMEOUT) "]"},
+       {SET_TOKEN,           1, "token",       "Initial Secret [default=random, use --token="" to allow any token]"},
+       {SET_RANDOM_TOKEN,    0, "random-token","Enforce a random token"},
+#endif
 
        {SET_API_TIMEOUT,     1, "apitimeout",  "Binding API timeout in seconds [default " d2s(DEFAULT_API_TIMEOUT) "]"},
        {SET_SESSION_TIMEOUT, 1, "cntxtimeout", "Client Session Context Timeout [default " d2s(DEFAULT_SESSION_TIMEOUT) "]"},
-       {SET_CACHE_TIMEOUT,   1, "cache-eol",   "Client cache end of live [default " d2s(DEFAULT_CACHE_TIMEOUT) "]"},
 
        {SET_WORK_DIR,        1, "workdir",     "Set the working directory [default: $PWD or current working directory]"},
-       {SET_UPLOAD_DIR,      1, "uploaddir",   "Directory for uploading files [default: workdir] relative to workdir"},
        {SET_ROOT_DIR,        1, "rootdir",     "Root Directory of the application [default: workdir] relative to workdir"},
 
 #if WITH_DYNAMIC_BINDING
@@ -181,8 +197,6 @@ static struct option_desc optdefs[] = {
        {ADD_WEAK_LDPATH,     1, "weak-ldpaths","Same as --ldpaths but ignore errors"},
        {SET_NO_LDPATH,       0, "no-ldpaths",  "Discard default ldpaths loading"},
 #endif
-       {SET_TOKEN,           1, "token",       "Initial Secret [default=random, use --token="" to allow any token]"},
-       {SET_RANDOM_TOKEN,    0, "random-token","Enforce a random token"},
 
        {GET_VERSION,         0, "version",     "Display version and copyright"},
        {GET_HELP,            0, "help",        "Display this help"},
@@ -212,10 +226,9 @@ static struct option_desc optdefs[] = {
 
        {ADD_CALL,            1, "call",        "Call at start, format of val: API/VERB:json-args"},
 
-       {SET_NO_HTTPD,        0, "no-httpd",    "Forbid HTTP service"},
        {SET_EXEC,            0, "exec",        "Execute the remaining arguments"},
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
        {SET_MONITORING,      0, "monitoring",  "Enable HTTP monitoring at <ROOT>/monitoring/"},
 #endif
 
@@ -231,7 +244,7 @@ static struct option_desc optdefs[] = {
 /* *INDENT-ON* */
 };
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
 static const char MONITORING_ALIAS[] = "/monitoring:"BINDING_INSTALL_DIR"/monitoring";
 #endif
 
@@ -239,9 +252,11 @@ static const struct {
        int optid;
        int valdef;
 } default_optint_values[] = {
+#if WITH_LIBMICROHTTPD
        { SET_PORT,             DEFAULT_HTTP_PORT },
        { SET_API_TIMEOUT,      DEFAULT_API_TIMEOUT },
        { SET_CACHE_TIMEOUT,    DEFAULT_CACHE_TIMEOUT },
+#endif
        { SET_SESSION_TIMEOUT,  DEFAULT_SESSION_TIMEOUT },
        { SET_SESSIONMAX,       DEFAULT_MAX_SESSION_COUNT }
 };
@@ -250,11 +265,13 @@ static const struct {
        int optid;
        const char *valdef;
 } default_optstr_values[] = {
-       { SET_WORK_DIR,         "." },
-       { SET_ROOT_DIR,         "." },
+#if WITH_LIBMICROHTTPD
        { SET_UPLOAD_DIR,       "." },
        { SET_ROOT_BASE,        "/opa" },
-       { SET_ROOT_API,         "/api" }
+       { SET_ROOT_API,         "/api" },
+#endif
+       { SET_WORK_DIR,         "." },
+       { SET_ROOT_DIR,         "." }
 };
 
 /**********************************
@@ -344,7 +361,7 @@ static void printVersion(FILE * file)
 #endif
                "DBUS "
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
                "+"
 #else
                "-"
@@ -546,6 +563,7 @@ static int get_arg_bool(int optid)
        return value;
 }
 
+__attribute__((unused))
 static void config_del(struct json_object *config, int optid)
 {
        return json_object_object_del(config, name_of_optid(optid));
@@ -814,7 +832,9 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
 
                case SET_API_TIMEOUT:
                case SET_SESSION_TIMEOUT:
+#if WITH_LIBMICROHTTPD
                case SET_CACHE_TIMEOUT:
+#endif
                        config_set_optint(config, optid, 0, INT_MAX);
                        break;
 
@@ -823,11 +843,13 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
                        break;
 
                case SET_ROOT_DIR:
+#if WITH_LIBMICROHTTPD
                case SET_ROOT_HTTP:
                case SET_ROOT_BASE:
                case SET_ROOT_API:
                case SET_TOKEN:
                case SET_UPLOAD_DIR:
+#endif
                case SET_WORK_DIR:
                case SET_NAME:
                        config_set_optstr(config, optid);
@@ -837,7 +859,9 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
                case ADD_DBUS_CLIENT:
                case ADD_DBUS_SERVICE:
 #endif
+#if WITH_LIBMICROHTTPD
                case ADD_ALIAS:
+#endif
 #if WITH_DYNAMIC_BINDING
                case ADD_LDPATH:
                case ADD_WEAK_LDPATH:
@@ -854,18 +878,21 @@ static void parse_arguments_inner(int argc, char **argv, struct json_object *con
                        config_mix2_optstr(config, optid);
                        break;
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
                case SET_MONITORING:
 #endif
+#if WITH_LIBMICROHTTPD
                case SET_RANDOM_TOKEN:
                case SET_NO_HTTPD:
+#endif
 #if WITH_DYNAMIC_BINDING
                case SET_NO_LDPATH:
 #endif
+#if WITH_MONITORING || WITH_LIBMICROHTTPD || WITH_DYNAMIC_BINDING
                        noarg(optid);
                        config_set_bool(config, optid, 1);
                        break;
-
+#endif
 
                case SET_FOREGROUND:
                case SET_BACKGROUND:
@@ -992,15 +1019,16 @@ static void fulfill_config(struct json_object *config)
                        config_set_str(config, default_optstr_values[i].optid, default_optstr_values[i].valdef);
 
        // default AUTH_TOKEN
+#if WITH_LIBMICROHTTPD
        if (config_has_bool(config, SET_RANDOM_TOKEN))
                config_del(config, SET_TOKEN);
-
+#endif
 #if WITH_DYNAMIC_BINDING
        if (!config_has(config, ADD_LDPATH) && !config_has(config, ADD_WEAK_LDPATH) && !config_has_bool(config, SET_NO_LDPATH))
                config_add_str(config, ADD_LDPATH, BINDING_INSTALL_DIR);
 #endif
 
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
        if (config_has_bool(config, SET_MONITORING) && !config_has_str(config, ADD_ALIAS, MONITORING_ALIAS))
                config_add_str(config, ADD_ALIAS, MONITORING_ALIAS);
 #endif
index a2df4b1..49c1692 100644 (file)
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+#if WITH_LIBMICROHTTPD
+
 #define _GNU_SOURCE
 
 #include <stdlib.h>
@@ -31,7 +33,7 @@
 #define JSON_C_TO_STRING_NOSLASHESCAPE 0
 #endif
 
-#if defined(USE_MAGIC_MIME_TYPE)
+#if USE_MAGIC_MIME_TYPE
 #include <magic.h>
 #endif
 
@@ -218,7 +220,7 @@ void afb_hreq_reply_free(struct afb_hreq *hreq, unsigned status, size_t size, ch
        va_end(args);
 }
 
-#if defined(USE_MAGIC_MIME_TYPE)
+#if USE_MAGIC_MIME_TYPE
 
 #if !defined(MAGIC_DB)
 #define MAGIC_DB "/usr/share/misc/magic.mgc"
@@ -262,7 +264,7 @@ static const char *mimetype_fd_name(int fd, const char *filename)
 {
        const char *result = NULL;
 
-#if defined(INFER_EXTENSION)
+#if INFER_EXTENSION
        /*
         * Set some well-known extensions
         * Note that it is mandatory for example for css files in order to provide
@@ -307,7 +309,7 @@ static const char *mimetype_fd_name(int fd, const char *filename)
                }
        }
 #endif
-#if defined(USE_MAGIC_MIME_TYPE)
+#if USE_MAGIC_MIME_TYPE
        if (result == NULL)
                result = magic_mimetype_fd(fd);
 #endif
@@ -1001,3 +1003,4 @@ struct afb_hreq *afb_hreq_create()
        return hreq;
 }
 
+#endif
index 1b682c8..b23f54a 100644 (file)
@@ -17,6 +17,8 @@
 
 #pragma once
 
+#if WITH_LIBMICROHTTPD
+
 #include "afb-xreq.h"
 
 struct json_object;
@@ -98,3 +100,5 @@ extern void afb_hreq_addref(struct afb_hreq *hreq);
 extern void afb_hreq_unref(struct afb_hreq *hreq);
 
 extern struct afb_hreq *afb_hreq_create();
+
+#endif
index ed0adee..28eca40 100644 (file)
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+#if WITH_LIBMICROHTTPD
+
 #define _GNU_SOURCE
 
 #include <stdint.h>
@@ -590,3 +592,5 @@ int afb_hsrv_add_interface_tcp(struct afb_hsrv *hsrv, const char *itf, uint16_t
        }
        return afb_hsrv_add_interface(hsrv, buffer);
 }
+
+#endif
index 7d496bc..c99d026 100644 (file)
@@ -18,6 +18,8 @@
 
 #pragma once
 
+#if WITH_LIBMICROHTTPD
+
 struct afb_hsrv;
 struct afb_hreq;
 struct locale_root;
@@ -35,3 +37,5 @@ extern int afb_hsrv_add_interface(struct afb_hsrv *hsrv, const char *uri);
 extern int afb_hsrv_add_interface_tcp(struct afb_hsrv *hsrv, const char *itf, uint16_t port);
 
 extern void afb_hsrv_run(struct afb_hsrv *hsrv);
+
+#endif
index b4692bc..604815a 100644 (file)
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+#if WITH_LIBMICROHTTPD
+
 #define _GNU_SOURCE
 
 #include <stdlib.h>
@@ -109,4 +111,4 @@ int afb_hswitch_websocket_switch(struct afb_hreq *hreq, void *data)
        return afb_websock_check_upgrade(hreq, apiset);
 }
 
-
+#endif
index c831e25..c55fe0c 100644 (file)
 
 #pragma once
 
+#if WITH_LIBMICROHTTPD
+
 struct afb_hreq;
 
 extern int afb_hswitch_apis(struct afb_hreq *hreq, void *data);
 extern int afb_hswitch_one_page_api_redirect(struct afb_hreq *hreq, void *data);
 extern int afb_hswitch_websocket_switch(struct afb_hreq *hreq, void *data);
 
-
+#endif
index 21656d7..d2f5e83 100644 (file)
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+#if WITH_LIBMICROHTTPD
 
 #include <microhttpd.h>
 
@@ -78,4 +79,5 @@ const char *get_method_name(enum afb_method method)
        }
 }
 
+#endif
 
index 7bfce70..b7dc6a6 100644 (file)
@@ -18,6 +18,8 @@
 
 #pragma once
 
+#if WITH_LIBMICROHTTPD
+
 enum afb_method {
        afb_method_none = 0,
        afb_method_get = 1,
@@ -35,3 +37,4 @@ enum afb_method {
 extern enum afb_method get_method(const char *method);
 extern const char *get_method_name(enum afb_method method);
 
+#endif
index 73bb3c5..9e121c1 100644 (file)
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+#if WITH_LIBMICROHTTPD
+
 #define _GNU_SOURCE
 
 #include <stdlib.h>
@@ -255,3 +257,4 @@ int afb_websock_check_upgrade(struct afb_hreq *hreq, struct afb_apiset *apiset)
        return rc;
 }
 
+#endif
index f853814..981f5eb 100644 (file)
 
 #pragma once
 
+#if WITH_LIBMICROHTTPD
+
 struct afb_hreq;
 struct afb_apiset;
 
 extern int afb_websock_check_upgrade(struct afb_hreq *hreq, struct afb_apiset *apiset);
 
+#endif
 
index d26502d..d11e5a6 100644 (file)
@@ -241,7 +241,7 @@ error:
  */
 void evmgr_run(struct evmgr *evmgr)
 {
-       int rc;
+       int rc __attribute__((unused));
 
        evmgr->state = EVLOOP_STATE_WAIT|EVLOOP_STATE_RUN;
        rc = fdev_epoll_wait_and_dispatch(evmgr->fdev_epoll, -1);
@@ -284,14 +284,13 @@ static void on_evmgr_efd(void *closure, uint32_t event, struct fdev *fdev)
  */
 int evmgr_create(struct evmgr **result)
 {
-       int rc;
        struct evmgr *evmgr;
 
        /* creates the evmgr on need */
        evmgr = malloc(sizeof *evmgr);
        if (!evmgr) {
                ERROR("out of memory");
-               rc = -ENOMEM;
+               errno = ENOMEM;
                goto error;
        }
 
@@ -299,7 +298,6 @@ int evmgr_create(struct evmgr **result)
        evmgr->efd = eventfd(0, EFD_CLOEXEC|EFD_SEMAPHORE);
        if (evmgr->efd < 0) {
                ERROR("can't make eventfd for events");
-               rc = -errno;
                goto error1;
        }
 
@@ -334,7 +332,7 @@ error1:
        free(evmgr);
 error:
        *result = 0;
-       return rc;
+       return errno ? -errno : -1;
 }
 
 #endif
index 705c69f..a7ddf9f 100644 (file)
@@ -41,7 +41,6 @@
 #endif
 
 #include "afb-args.h"
-#include "afb-hswitch.h"
 #include "afb-apiset.h"
 #include "afb-autoset.h"
 #include "afb-api-so.h"
@@ -49,8 +48,6 @@
 #   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"
 #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"
@@ -288,6 +290,7 @@ static void daemonize()
  | http server
  |   Handles the HTTP server
  +--------------------------------------------------------- */
+#if WITH_LIBMICROHTTPD
 static int init_alias(void *closure, const char *spec)
 {
        struct afb_hsrv *hsrv = closure;
@@ -396,6 +399,7 @@ static struct afb_hsrv *start_http_server()
 
        return hsrv;
 }
+#endif
 
 /*---------------------------------------------------------
  | execute_command
@@ -695,12 +699,15 @@ static void start(int signum, void *arg)
 #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");
@@ -710,14 +717,12 @@ static void start(int signum, void *arg)
                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"
@@ -735,10 +740,11 @@ static void start(int signum, void *arg)
                        "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,
@@ -779,6 +785,7 @@ static void start(int signum, void *arg)
                goto error;
        }
 
+#if WITH_LIBMICROHTTPD
        /* setup HTTP */
        if (!no_httpd) {
                if (http_port < 0) {
@@ -795,6 +802,7 @@ static void start(int signum, void *arg)
                        goto error;
                }
        }
+#endif
 
        /* configure the daemon */
        afb_export_set_config(settings);
@@ -865,6 +873,7 @@ static void start(int signum, void *arg)
 #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)) {
@@ -876,6 +885,7 @@ static void start(int signum, void *arg)
                if (hsrv == NULL)
                        goto error;
        }
+#endif
 
        /* run the startup calls */
        afb_debug("start-call");