aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJose Bollo <jose.bollo@iot.bzh>2019-02-21 14:39:59 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2019-03-22 12:21:54 +0100
commit0e2b5f5b7fa3a09abf61c8253efce7c7f2b4c444 (patch)
tree85f54ba7b0301245553e86704d28dfccaa031013
parentf2f086fa99e47ca8b3001831ea3548f8758e1222 (diff)
Allow to remove libmicrohttpd (HTTP server)
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>
-rw-r--r--CMakeLists.txt126
-rw-r--r--src/CMakeLists.txt48
-rw-r--r--src/afb-args.c64
-rw-r--r--src/afb-hreq.c11
-rw-r--r--src/afb-hreq.h4
-rw-r--r--src/afb-hsrv.c4
-rw-r--r--src/afb-hsrv.h4
-rw-r--r--src/afb-hswitch.c4
-rw-r--r--src/afb-hswitch.h4
-rw-r--r--src/afb-method.c2
-rw-r--r--src/afb-method.h3
-rw-r--r--src/afb-websock.c3
-rw-r--r--src/afb-websock.h3
-rw-r--r--src/evmgr.c8
-rw-r--r--src/main-afb-daemon.c34
15 files changed, 205 insertions, 117 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f5c6d2ae..853f5fee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fbefcdad..e3ee7533 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -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
diff --git a/src/afb-args.c b/src/afb-args.c
index 467f0860..b7ef1f59 100644
--- a/src/afb-args.c
+++ b/src/afb-args.c
@@ -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
@@ -68,17 +70,21 @@
/**
* 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
@@ -93,9 +99,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
@@ -123,17 +130,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
diff --git a/src/afb-hreq.c b/src/afb-hreq.c
index a2df4b13..49c16921 100644
--- a/src/afb-hreq.c
+++ b/src/afb-hreq.c
@@ -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
diff --git a/src/afb-hreq.h b/src/afb-hreq.h
index 1b682c87..b23f54ae 100644
--- a/src/afb-hreq.h
+++ b/src/afb-hreq.h
@@ -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
diff --git a/src/afb-hsrv.c b/src/afb-hsrv.c
index ed0adeeb..28eca401 100644
--- a/src/afb-hsrv.c
+++ b/src/afb-hsrv.c
@@ -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
diff --git a/src/afb-hsrv.h b/src/afb-hsrv.h
index 7d496bc6..c99d0264 100644
--- a/src/afb-hsrv.h
+++ b/src/afb-hsrv.h
@@ -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
diff --git a/src/afb-hswitch.c b/src/afb-hswitch.c
index b4692bc5..604815af 100644
--- a/src/afb-hswitch.c
+++ b/src/afb-hswitch.c
@@ -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
diff --git a/src/afb-hswitch.h b/src/afb-hswitch.h
index c831e252..c55fe0c5 100644
--- a/src/afb-hswitch.h
+++ b/src/afb-hswitch.h
@@ -18,10 +18,12 @@
#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
diff --git a/src/afb-method.c b/src/afb-method.c
index 21656d78..d2f5e834 100644
--- a/src/afb-method.c
+++ b/src/afb-method.c
@@ -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
diff --git a/src/afb-method.h b/src/afb-method.h
index 7bfce701..b7dc6a66 100644
--- a/src/afb-method.h
+++ b/src/afb-method.h
@@ -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
diff --git a/src/afb-websock.c b/src/afb-websock.c
index 73bb3c5e..9e121c10 100644
--- a/src/afb-websock.c
+++ b/src/afb-websock.c
@@ -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
diff --git a/src/afb-websock.h b/src/afb-websock.h
index f853814b..981f5eb1 100644
--- a/src/afb-websock.h
+++ b/src/afb-websock.h
@@ -17,9 +17,12 @@
#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
diff --git a/src/evmgr.c b/src/evmgr.c
index d26502df..d11e5a6c 100644
--- a/src/evmgr.c
+++ b/src/evmgr.c
@@ -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
diff --git a/src/main-afb-daemon.c b/src/main-afb-daemon.c
index 705c69f9..a7ddf9f9 100644
--- a/src/main-afb-daemon.c
+++ b/src/main-afb-daemon.c
@@ -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"
@@ -65,6 +62,11 @@
#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");