-/*
+/*
* 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
+#define NO_BINDING_VERBOSE_MACRO
#include <stdlib.h>
#include <stdio.h>
#include "verbose.h"
#include "afb-common.h"
-#include <afb/afb-plugin.h>
+#include <afb/afb-binding.h>
-#if !defined(PLUGIN_INSTALL_DIR)
-#error "you should define PLUGIN_INSTALL_DIR"
+#if !defined(BINDING_INSTALL_DIR)
+#error "you should define BINDING_INSTALL_DIR"
#endif
#define AFB_VERSION "0.5"
#define DBUS_CLIENT 20
#define DBUS_SERVICE 21
-#define SO_PLUGIN 22
+#define SO_BINDING 22
+
+#define SET_SESSIONMAX 23
// Command line structure hold cli --command + help text
typedef struct {
{SET_ROOT_BASE ,1,"rootbase" , "Angular Base Root URL [default /opa]"},
{SET_ROOT_API ,1,"rootapi" , "HTML Root API URL [default /api]"},
{SET_ALIAS ,1,"alias" , "Muliple url map outside of rootdir [eg: --alias=/icons:/usr/share/icons]"},
-
- {SET_APITIMEOUT ,1,"apitimeout" , "Plugin API timeout in seconds [default 10]"},
+
+ {SET_APITIMEOUT ,1,"apitimeout" , "Binding 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]"},
- {SET_LDPATH ,1,"ldpaths" , "Load Plugins from dir1:dir2:... [default = PLUGIN_INSTALL_DIR"},
+ {SET_LDPATH ,1,"ldpaths" , "Load bindingss from dir1:dir2:... [default = "BINDING_INSTALL_DIR"]"},
{SET_AUTH_TOKEN ,1,"token" , "Initial Secret [default=no-session, --token="" for session without authentication]"},
-
+
{DISPLAY_VERSION ,0,"version" , "Display version and copyright"},
{DISPLAY_HELP ,0,"help" , "Display this help"},
{DBUS_CLIENT ,1,"dbus-client" , "bind to an afb service through dbus"},
{DBUS_SERVICE ,1,"dbus-server" , "provides an afb service through dbus"},
- {SO_PLUGIN ,1,"plugin" , "load the plugin of path"},
+ {SO_BINDING ,1,"binding" , "load the binding of path"},
+
+ {SET_SESSIONMAX ,1,"session-max" , "max count of session simultaneously [default 10]"},
{0, 0, NULL, NULL}
};
fprintf (file, " --%-15s %s\n", command, cliOptions[ind].help);
}
}
- fprintf (file, "Example:\n %s\\\n --verbose --port=1234 --token='azerty' --ldpaths=build/plugins:/usr/lib64/agl/plugins\n", name);
+ fprintf (file, "Example:\n %s\\\n --verbose --port=1234 --token='azerty' --ldpaths=build/bindings:/usr/lib64/agl/bindings\n", name);
}
// load config from disk and merge with CLI option
// default HTTP port
if (config->httpdPort == 0)
config->httpdPort = 1234;
-
- // default Plugin API timeout
+
+ // default binding API timeout
if (config->apiTimeout == 0)
config->apiTimeout = DEFLT_API_TIMEOUT;
-
+
// default AUTH_TOKEN
if (config->token == NULL)
config->token = DEFLT_AUTH_TOKEN;
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) {
// if directory does not exist createit
mkdir (config->rootdir, O_RDWR | S_IRWXU | S_IRGRP);
}
-
+
// if no Angular/HTML5 rootbase let's try '/' as default
if (config->rootbase == NULL)
config->rootbase = "/opa";
-
+
if (config->rootapi == NULL)
config->rootapi = "/api";
if (config->ldpaths == NULL)
- config->ldpaths = PLUGIN_INSTALL_DIR;
+ config->ldpaths = BINDING_INSTALL_DIR;
// if no session dir create a default path from rootdir
if (config->sessiondir == NULL) {
if (optarg == 0) goto needValueForOption;
if (!sscanf (optarg, "%d", &config->httpdPort)) goto notAnInteger;
break;
-
+
case SET_APITIMEOUT:
if (optarg == 0) goto needValueForOption;
if (!sscanf (optarg, "%d", &config->apiTimeout)) goto notAnInteger;
if (optarg == 0) goto needValueForOption;
config->rootdir = optarg;
INFO("Forcing Rootdir=%s",config->rootdir);
- break;
-
+ break;
+
case SET_ROOT_BASE:
if (optarg == 0) goto needValueForOption;
config->rootbase = optarg;
config->rootapi = optarg;
INFO("Forcing Rootapi=%s",config->rootapi);
break;
-
+
case SET_ALIAS:
if (optarg == 0) goto needValueForOption;
if ((unsigned)config->aliascount < sizeof (config->aliasdir) / sizeof (config->aliasdir[0])) {
}
} else {
ERROR("Too many aliases [max:%d] %s ignored", MAX_ALIAS, optarg);
- }
+ }
break;
-
+
case SET_AUTH_TOKEN:
if (optarg == 0) goto needValueForOption;
config->token = optarg;
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;
case DBUS_CLIENT:
case DBUS_SERVICE:
- case SO_PLUGIN:
+ case SO_BINDING:
if (optarg == 0) goto needValueForOption;
add_item(config, optc, optarg);
break;
}
}
free(gnuOptions);
-
+
config_set_default (config);
return;
exit(1);
}
break;
- case SO_PLUGIN:
- if (afb_api_so_add_plugin(item->value) < 0) {
- ERROR("can't start the plugin of path %s",item->value);
+ case SO_BINDING:
+ if (afb_api_so_add_binding(item->value) < 0) {
+ ERROR("can't start the binding of path %s",item->value);
exit(1);
}
break;
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);
+ ERROR("initialisation of bindings within %s failed", config->ldpaths);
exit(1);
}
}
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);
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);