add log macros for plugins
[src/app-framework-binder.git] / src / main.c
index 81f891b..defab84 100644 (file)
@@ -1,5 +1,5 @@
 /* 
- * Copyright (C) 2015 "IoT.bzh"
+ * Copyright (C) 2015, 2016 "IoT.bzh"
  * Author "Fulup Ar Foll"
  * Author José Bollo <jose.bollo@iot.bzh>
  *
  */
 
 #define _GNU_SOURCE
+#define NO_PLUGIN_VERBOSE_MACRO
 
 #include <stdlib.h>
 #include <stdio.h>
-#include <stdint.h>
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/stat.h>
-#include <sys/types.h>
-
 #include <getopt.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <syslog.h>
 
 #include <systemd/sd-event.h>
 
 #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 <afb/afb-plugin.h>
 
 #if !defined(PLUGIN_INSTALL_DIR)
 #error "you should define PLUGIN_INSTALL_DIR"
 #endif
 
-#define AFB_VERSION    "0.4"
+#define AFB_VERSION    "0.5"
 
 // Define command line option
 #define SET_VERBOSE        1
@@ -127,8 +123,6 @@ static  AFB_options cliOptions [] = {
   {0, 0, NULL, NULL}
  };
 
-
-
 /*----------------------------------------------------------
  | printversion
  |   print version and copyright
@@ -138,7 +132,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 +422,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 +480,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 +571,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 +585,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 +601,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;
   }