aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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");