Service instanciation
[src/app-framework-binder.git] / src / main.c
index 156a77d..ce95735 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #define _GNU_SOURCE
+#define NO_PLUGIN_VERBOSE_MACRO
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -47,7 +48,7 @@
 #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
@@ -78,6 +79,8 @@
 #define DBUS_SERVICE       21
 #define SO_PLUGIN          22
 
+#define SET_SESSIONMAX     23
+
 // Command line structure hold cli --command + help text
 typedef struct {
   int  val;        // command number within application
@@ -102,7 +105,7 @@ static  AFB_options cliOptions [] = {
   
   {SET_APITIMEOUT   ,1,"apitimeout"      , "Plugin API timeout in seconds [default 10]"},
   {SET_CNTXTIMEOUT  ,1,"cntxtimeout"     , "Client Session Context Timeout [default 900]"},
-  {SET_CACHE_TIMEOUT,1,"cache-eol"       , "Client cache end of live [default 3600s]"},
+  {SET_CACHE_TIMEOUT,1,"cache-eol"       , "Client cache end of live [default 3600]"},
   
   {SET_SESSION_DIR  ,1,"sessiondir"      , "Sessions file path [default rootdir/sessions]"},
 
@@ -119,6 +122,8 @@ static  AFB_options cliOptions [] = {
   {DBUS_SERVICE     ,1,"dbus-server"     , "provides an afb service through dbus"},
   {SO_PLUGIN        ,1,"plugin"          , "load the plugin of path"},
 
+  {SET_SESSIONMAX   ,1,"session-max"     , "max count of session simultaneously [default 10]"},
+
   {0, 0, NULL, NULL}
  };
 
@@ -185,6 +190,10 @@ static void config_set_default (struct afb_config * config)
    if (config->cntxTimeout == 0)
                config->cntxTimeout = DEFLT_CNTX_TIMEOUT;
 
+   // max count of sessions
+   if (config->nbSessionMax == 0)
+       config->nbSessionMax = CTX_NBCLIENTS;
+
    if (config->rootdir == NULL) {
        config->rootdir = getenv("AFBDIR");
        if (config->rootdir == NULL) {
@@ -345,6 +354,11 @@ static void parse_arguments(int argc, char *argv[], struct afb_config *config)
        if (!sscanf (optarg, "%d", &config->cacheTimeout)) goto notAnInteger;
        break;
 
+    case  SET_SESSIONMAX:
+       if (optarg == 0) goto needValueForOption;
+       if (!sscanf (optarg, "%d", &config->nbSessionMax)) goto notAnInteger;
+       break;
+
     case SET_FORGROUND:
        if (optarg != 0) goto noValueForOption;
        config->background  = 0;
@@ -584,6 +598,7 @@ int main(int argc, char *argv[])  {
      exit (1);
   }
 
+  afb_api_so_set_timeout(config->apiTimeout);
   if (config->ldpaths) {
     if (afb_api_so_add_pathset(config->ldpaths) < 0) {
       ERROR("initialisation of plugins within %s failed", config->ldpaths);
@@ -594,7 +609,7 @@ int main(int argc, char *argv[])  {
   start_items(config->items);
   config->items = NULL;
 
-  ctxStoreInit(CTX_NBCLIENTS, config->cntxTimeout, config->token, afb_apis_count());
+  ctxStoreInit(config->nbSessionMax, config->cntxTimeout, config->token, afb_apis_count());
   if (!afb_hreq_init_cookie(config->httpdPort, config->rootapi, DEFLT_CNTX_TIMEOUT)) {
      ERROR("initialisation of cookies failed");
      exit (1);
@@ -628,6 +643,10 @@ int main(int argc, char *argv[])  {
    if (hsrv == NULL)
        exit(1);
 
+   /* start the services */
+   if (afb_apis_start_all_services(1) < 0)
+       exit(1);
+
    if (config->readyfd != 0) {
                static const char readystr[] = "READY=1";
                write(config->readyfd, readystr, sizeof(readystr) - 1);