X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fmain.c;h=156a77d297b4962c09b29e6edb27ac70509c7e46;hb=e68a315bcf2bd681466c27026fea73598071bda6;hp=81f891b362d39e2e971425ab0b198b3570eff9f9;hpb=d50bd20d0a95a87f4308bdd908f3d54aa0a01a5f;p=src%2Fapp-framework-binder.git diff --git a/src/main.c b/src/main.c index 81f891b3..156a77d2 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 "IoT.bzh" + * Copyright (C) 2015, 2016 "IoT.bzh" * Author "Fulup Ar Foll" * Author José Bollo * @@ -20,17 +20,11 @@ #include #include -#include #include #include #include #include -#include - #include -#include -#include -#include #include @@ -42,11 +36,12 @@ #include "afb-hsrv.h" #include "afb-context.h" #include "afb-hreq.h" +#include "afb-sig-handler.h" #include "session.h" #include "verbose.h" #include "afb-common.h" -#include "afb-plugin.h" +#include #if !defined(PLUGIN_INSTALL_DIR) #error "you should define PLUGIN_INSTALL_DIR" @@ -127,8 +122,6 @@ static AFB_options cliOptions [] = { {0, 0, NULL, NULL} }; - - /*---------------------------------------------------------- | printversion | print version and copyright @@ -138,7 +131,7 @@ static void printVersion (FILE *file) fprintf(file, "\n----------------------------------------- \n"); fprintf(file, " AFB [Application Framework Binder] version=%s |\n", AFB_VERSION); fprintf(file, " \n"); - fprintf(file, " Copyright(C) 2016 /IoT.bzh [fulup -at- iot.bzh]\n"); + fprintf(file, " Copyright (C) 2015, 2016 \"IoT.bzh\" [fulup -at- iot.bzh]\n"); fprintf(file, " AFB comes with ABSOLUTELY NO WARRANTY.\n"); fprintf(file, " Licence Apache 2\n\n"); exit (0); @@ -428,49 +421,6 @@ static void closeSession (int status, void *data) { /* struct afb_config *config = data; */ } -/*---------------------------------------------------------- - | timeout signalQuit - +--------------------------------------------------------- */ -void signalQuit (int signum) -{ - ERROR("Terminating signal received %s", strsignal(signum)); - exit(1); -} - -/*---------------------------------------------------------- - | Error signals - | - +--------------------------------------------------------- */ -__thread sigjmp_buf *error_handler; -static void signalError(int signum) -{ - sigset_t sigset; - - // unlock signal to allow a new signal to come - if (error_handler != NULL) { - sigemptyset(&sigset); - sigaddset(&sigset, signum); - sigprocmask(SIG_UNBLOCK, &sigset, 0); - longjmp(*error_handler, signum); - } - if (signum == SIGALRM) - return; - ERROR("Unmonitored signal received %s", strsignal(signum)); - exit(2); -} - -static void install_error_handlers() -{ - int i, signals[] = { SIGALRM, SIGSEGV, SIGFPE, 0 }; - - for (i = 0; signals[i] != 0; i++) { - if (signal(signals[i], signalError) == SIG_ERR) { - ERROR("Signal handler error"); - exit(1); - } - } -} - /*---------------------------------------------------------- | daemonize | set the process in background @@ -529,10 +479,10 @@ static int init_http_server(struct afb_hsrv *hsrv, struct afb_config * config) return 0; for (idx = 0; idx < config->aliascount; idx++) - if (!afb_hsrv_add_alias (hsrv, config->aliasdir[idx].url, config->aliasdir[idx].path, 0)) + if (!afb_hsrv_add_alias (hsrv, config->aliasdir[idx].url, config->aliasdir[idx].path, 0, 0)) return 0; - if (!afb_hsrv_add_alias(hsrv, "", config->rootdir, -10)) + if (!afb_hsrv_add_alias(hsrv, "", config->rootdir, -10, 1)) return 0; if (!afb_hsrv_add_handler(hsrv, config->rootbase, afb_hswitch_one_page_api_redirect, NULL, -20)) @@ -620,8 +570,7 @@ int main(int argc, char *argv[]) { struct afb_config *config; struct sd_event *eventloop; - // open syslog if ever needed - openlog("afb-daemon", 0, LOG_DAEMON); + LOGAUTH("afb-daemon"); // ------------- Build session handler & init config ------- config = calloc (1, sizeof (struct afb_config)); @@ -635,8 +584,12 @@ int main(int argc, char *argv[]) { exit (1); } - if (config->ldpaths) - afb_api_so_add_pathset(config->ldpaths); + if (config->ldpaths) { + if (afb_api_so_add_pathset(config->ldpaths) < 0) { + ERROR("initialisation of plugins within %s failed", config->ldpaths); + exit(1); + } + } start_items(config->items); config->items = NULL; @@ -647,11 +600,8 @@ int main(int argc, char *argv[]) { exit (1); } - install_error_handlers(); - - // ------------------ clean exit on CTR-C signal ------------------------ - if (signal (SIGINT, signalQuit) == SIG_ERR || signal (SIGABRT, signalQuit) == SIG_ERR) { - ERROR("main fail to install Signal handler"); + if (afb_sig_handler_init() < 0) { + ERROR("main fail to initialise signal handlers"); return 1; }