diff options
-rw-r--r-- | CMakeLists.txt | 126 | ||||
-rw-r--r-- | src/CMakeLists.txt | 48 | ||||
-rw-r--r-- | src/afb-args.c | 64 | ||||
-rw-r--r-- | src/afb-hreq.c | 11 | ||||
-rw-r--r-- | src/afb-hreq.h | 4 | ||||
-rw-r--r-- | src/afb-hsrv.c | 4 | ||||
-rw-r--r-- | src/afb-hsrv.h | 4 | ||||
-rw-r--r-- | src/afb-hswitch.c | 4 | ||||
-rw-r--r-- | src/afb-hswitch.h | 4 | ||||
-rw-r--r-- | src/afb-method.c | 2 | ||||
-rw-r--r-- | src/afb-method.h | 3 | ||||
-rw-r--r-- | src/afb-websock.c | 3 | ||||
-rw-r--r-- | src/afb-websock.h | 3 | ||||
-rw-r--r-- | src/evmgr.c | 8 | ||||
-rw-r--r-- | src/main-afb-daemon.c | 34 |
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"); |