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>
###########################################################################
# 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")
###########################################################################
+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(
${LIBMAGIC_LDFLAGS}
-ldl
-lrt
- )
+)
ADD_SUBDIRECTORY(src/devtools)
###########################################################################
# 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
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}>
-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
/**
* 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'
{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
{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"},
{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
/* *INDENT-ON* */
};
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
static const char MONITORING_ALIAS[] = "/monitoring:"BINDING_INSTALL_DIR"/monitoring";
#endif
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 }
};
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, "." }
};
/**********************************
#endif
"DBUS "
-#if defined(WITH_MONITORING_OPTION)
+#if WITH_MONITORING
"+"
#else
"-"
return value;
}
+__attribute__((unused))
static void config_del(struct json_object *config, int optid)
{
return json_object_object_del(config, name_of_optid(optid));
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;
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);
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:
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:
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
* limitations under the License.
*/
+#if WITH_LIBMICROHTTPD
+
#define _GNU_SOURCE
#include <stdlib.h>
#define JSON_C_TO_STRING_NOSLASHESCAPE 0
#endif
-#if defined(USE_MAGIC_MIME_TYPE)
+#if USE_MAGIC_MIME_TYPE
#include <magic.h>
#endif
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"
{
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
}
}
#endif
-#if defined(USE_MAGIC_MIME_TYPE)
+#if USE_MAGIC_MIME_TYPE
if (result == NULL)
result = magic_mimetype_fd(fd);
#endif
return hreq;
}
+#endif
#pragma once
+#if WITH_LIBMICROHTTPD
+
#include "afb-xreq.h"
struct json_object;
extern void afb_hreq_unref(struct afb_hreq *hreq);
extern struct afb_hreq *afb_hreq_create();
+
+#endif
* limitations under the License.
*/
+#if WITH_LIBMICROHTTPD
+
#define _GNU_SOURCE
#include <stdint.h>
}
return afb_hsrv_add_interface(hsrv, buffer);
}
+
+#endif
#pragma once
+#if WITH_LIBMICROHTTPD
+
struct afb_hsrv;
struct afb_hreq;
struct locale_root;
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
* limitations under the License.
*/
+#if WITH_LIBMICROHTTPD
+
#define _GNU_SOURCE
#include <stdlib.h>
return afb_websock_check_upgrade(hreq, apiset);
}
-
+#endif
#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
* limitations under the License.
*/
+#if WITH_LIBMICROHTTPD
#include <microhttpd.h>
}
}
+#endif
#pragma once
+#if WITH_LIBMICROHTTPD
+
enum afb_method {
afb_method_none = 0,
afb_method_get = 1,
extern enum afb_method get_method(const char *method);
extern const char *get_method_name(enum afb_method method);
+#endif
* limitations under the License.
*/
+#if WITH_LIBMICROHTTPD
+
#define _GNU_SOURCE
#include <stdlib.h>
return rc;
}
+#endif
#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
*/
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);
*/
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;
}
evmgr->efd = eventfd(0, EFD_CLOEXEC|EFD_SEMAPHORE);
if (evmgr->efd < 0) {
ERROR("can't make eventfd for events");
- rc = -errno;
goto error1;
}
free(evmgr);
error:
*result = 0;
- return rc;
+ return errno ? -errno : -1;
}
#endif
#endif
#include "afb-args.h"
-#include "afb-hswitch.h"
#include "afb-apiset.h"
#include "afb-autoset.h"
#include "afb-api-so.h"
# 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"
| http server
| Handles the HTTP server
+--------------------------------------------------------- */
+#if WITH_LIBMICROHTTPD
static int init_alias(void *closure, const char *spec)
{
struct afb_hsrv *hsrv = closure;
return hsrv;
}
+#endif
/*---------------------------------------------------------
| execute_command
#endif
*traceses = NULL, *traceglob = NULL;
#endif
- const char *workdir, *rootdir, *token, *rootapi;
- struct json_object *settings;
- struct afb_hsrv *hsrv;
+ const char *workdir = NULL, *rootdir = NULL, *token = NULL;
+ struct json_object *settings = NULL;
int max_session_count, session_timeout, api_timeout;
- int no_httpd, http_port;
int rc;
+#if WITH_LIBMICROHTTPD
+ const char *rootapi = NULL;
+ int no_httpd = 0, http_port = -1;
+ struct afb_hsrv *hsrv;
+#endif
afb_debug("start-entry");
exit(1);
}
- settings = NULL;
- no_httpd = 0;
- http_port = -1;
- rootapi = token = NULL;
rc = wrap_json_unpack(main_config, "{"
"ss ss s?s"
"si si si"
+#if WITH_LIBMICROHTTPD
"s?b s?i s?s"
+#endif
#if WITH_AFB_HOOK
#if !defined(REMOVE_LEGACY_TRACE)
"s?s s?s"
"cntxtimeout", &session_timeout,
"session-max", &max_session_count,
+#if WITH_LIBMICROHTTPD
"no-httpd", &no_httpd,
"port", &http_port,
"rootapi", &rootapi,
-
+#endif
#if WITH_AFB_HOOK
#if !defined(REMOVE_LEGACY_TRACE)
"tracesvc", &tracesvc,
goto error;
}
+#if WITH_LIBMICROHTTPD
/* setup HTTP */
if (!no_httpd) {
if (http_port < 0) {
goto error;
}
}
+#endif
/* configure the daemon */
afb_export_set_config(settings);
#endif
/* start the HTTP server */
+#if WITH_LIBMICROHTTPD
afb_debug("start-http");
if (!no_httpd) {
if (!afb_hreq_init_cookie(http_port, rootapi, session_timeout)) {
if (hsrv == NULL)
goto error;
}
+#endif
/* run the startup calls */
afb_debug("start-call");