*/
#define _GNU_SOURCE
-#define AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO
#include <stdlib.h>
#include <stdio.h>
#if !defined(BINDING_INSTALL_DIR)
#error "you should define BINDING_INSTALL_DIR"
#endif
-
-#define AFB_VERSION "0.6"
+#if !defined(AFB_VERSION)
+#error "you should define AFB_VERSION"
+#endif
// default
#define DEFLT_CNTX_TIMEOUT 3600 // default Client Connection
#if defined(WITH_MONITORING_OPTION)
#define SET_MONITORING 'M'
#endif
+#define SET_NAME 'n'
#define SET_TCP_PORT 'p'
#define SET_QUIET 'q'
#define SET_RNDTOKEN 'r'
#define SET_WORK_DIR 'w'
const char shortopts[] =
- "c:D:E:ehp:qrT:t:u:Vvw:"
+ "c:D:E:ehn:p:qrT:t:u:Vvw:"
#if defined(WITH_MONITORING_OPTION)
"M"
#endif
{SET_FORGROUND, 0, "foreground", "Get all in foreground mode"},
{SET_BACKGROUND, 0, "daemon", "Get all in background mode"},
+ {SET_NAME, 1, "name", "Set the visible name"},
+
{SET_TCP_PORT, 1, "port", "HTTP listening TCP port [default 1234]"},
{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]"},
+--------------------------------------------------------- */
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) 2015, 2016, 2017 \"IoT.bzh\" [fulup -at- iot.bzh]\n");
- fprintf(file, " AFB comes with ABSOLUTELY NO WARRANTY.\n");
- fprintf(file, " Licence Apache 2\n\n");
+ static const char version[] =
+ "\n"
+ " AFB [Application Framework Binder] version="AFB_VERSION"\n"
+ "\n"
+ " Copyright (C) 2015, 2016, 2017 \"IoT.bzh\"\n"
+ " AFB comes with ABSOLUTELY NO WARRANTY.\n"
+ " Licence Apache 2\n"
+ "\n";
+
+ fprintf(file, "%s", version);
}
/*----------------------------------------------------------
}
}
+static char **make_exec(char **argv)
+{
+ char **result, *iter;
+ size_t length;
+ int i;
+
+ length = 0;
+ for (i = 0 ; argv[i] ; i++)
+ length += strlen(argv[i]) + 1;
+
+ result = malloc(length + ((unsigned)(i + 1)) * sizeof *result);
+ if (result == NULL) {
+ ERROR("can't alloc memory");
+ exit(1);
+ }
+
+ iter = (char*)&result[i+1];
+ for (i = 0 ; argv[i] ; i++) {
+ result[i] = iter;
+ iter = stpcpy(iter, argv[i]) + 1;
+ }
+ result[i] = NULL;
+ return result;
+}
+
/*---------------------------------------------------------
| Parse option and launch action
+--------------------------------------------------------- */
config->background = 1;
break;
+ case SET_NAME:
+ config->name = argvalstr(optc);
+ break;
+
case SET_MODE:
config->mode = argvalenum(optc, mode_desc);
break;
break;
case SET_EXEC:
- config->exec = &argv[optind];
- optind = argc;
+ config->exec = make_exec(&argv[optind]);
+ optind = argc; /* stop option scanning */
break;
case SET_RNDTOKEN:
S(workdir)
S(uploaddir)
S(token)
+ S(name)
L(aliases)
L(dbus_clients)
#undef NN
}
+static void on_environment_list(struct afb_config_list **to, const char *name)
+{
+ char *value = getenv(name);
+
+ if (value)
+ list_add(to, value);
+}
+
+static void on_environment_enum(int *to, const char *name, struct enumdesc *desc)
+{
+ char *value = getenv(name);
+
+ if (value) {
+ while (desc->name) {
+ if (strcmp(desc->name, value))
+ desc++;
+ else {
+ *to = desc->value;
+ return;
+ }
+ }
+ WARNING("Unknown value %s for environment variable %s, ignored", value, name);
+ }
+}
+
+static void parse_environment(struct afb_config *config)
+{
+ on_environment_enum(&config->tracereq, "AFB_TRACEREQ", tracereq_desc);
+ on_environment_enum(&config->traceditf, "AFB_TRACEDITF", traceditf_desc);
+ on_environment_enum(&config->tracesvc, "AFB_TRACESVC", tracesvc_desc);
+ on_environment_enum(&config->traceevt, "AFB_TRACEEVT", traceevt_desc);
+ on_environment_list(&config->ldpaths, "AFB_LDPATHS");
+}
+
struct afb_config *afb_config_parse_arguments(int argc, char **argv)
{
struct afb_config *result;
result = calloc(1, sizeof *result);
+ parse_environment(result);
parse_arguments(argc, argv, result);
fulfill_config(result);
if (verbosity >= 3)