X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fconfig.c;h=32336a7a08a3e2f3b1b93991f97feac6b62d0c62;hb=29d04383ea3e499840aae0220da700a27cce26e4;hp=893b3a5f32912c6449f17c1d62984fd033a13fbe;hpb=cd054544444e92e7695dd288f0c04b7af0f668e3;p=src%2Fapp-framework-binder.git diff --git a/src/config.c b/src/config.c index 893b3a5f..32336a7a 100644 --- a/src/config.c +++ b/src/config.c @@ -21,58 +21,45 @@ */ - #include "../include/local-def.h" #include #include #include - #define AFB_CONFIG_JTYPE "AFB_config" PUBLIC char *ERROR_LABEL[]=ERROR_LABEL_DEF; -PUBLIC int verbose; -STATIC AFB_ErrorT AFB_Error [AFB_SUCCESS+1]; -STATIC json_object *AFBJsonType; - -/* ------------------------------------------------------------------------------ - * Get localtime and return in a string - * ------------------------------------------------------------------------------ */ - -PUBLIC char * configTime (void) { - static char reqTime [26]; - time_t tt; - struct tm *rt; - - /* Get actual Date and Time */ - time (&tt); - rt = localtime (&tt); - - strftime (reqTime, sizeof (reqTime), "(%d-%b %H:%M)",rt); - - // return pointer on static data - return (reqTime); -} - // load config from disk and merge with CLI option -PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) { +PUBLIC AFB_error configLoadFile (AFB_session * session, AFB_config *cliconfig) { static char cacheTimeout [10]; int fd; json_object * AFBConfig, *value; - // fix config redirect message - session->config->html5.msg = "Angular/HTML5 redirect"; - session->config->html5.len = strlen(session->config->html5.msg); + // TBD integrate alias-dir array with config-file + session->config->aliasdir = cliconfig->aliasdir; + session->config->mode = cliconfig->mode; // default HTTP port if (cliconfig->httpdPort == 0) session->config->httpdPort=1234; else session->config->httpdPort=cliconfig->httpdPort; + + // default Plugin API timeout + if (cliconfig->apiTimeout == 0) session->config->apiTimeout=DEFLT_API_TIMEOUT; + else session->config->apiTimeout=cliconfig->apiTimeout; + + // default AUTH_TOKEN + if (cliconfig->token == NULL) session->config->token= DEFLT_AUTH_TOKEN; + else session->config->token=cliconfig->token; // cache timeout default one hour - if (cliconfig->cacheTimeout == 0) session->config->cacheTimeout=3600; + if (cliconfig->cacheTimeout == 0) session->config->cacheTimeout=DEFLT_CACHE_TIMEOUT; else session->config->cacheTimeout=cliconfig->cacheTimeout; + // cache timeout default one hour + if (cliconfig->cntxTimeout == 0) session->config->cntxTimeout=DEFLT_CNTX_TIMEOUT; + else session->config->cntxTimeout=cliconfig->cntxTimeout; + if (cliconfig->rootdir == NULL) { session->config->rootdir = getenv("AFBDIR"); if (session->config->rootdir == NULL) { @@ -88,19 +75,22 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) { // if no Angular/HTML5 rootbase let's try '/' as default if (cliconfig->rootbase == NULL) { - session->config->rootbase = "/"; + session->config->rootbase = "/opa"; } else { - session->config->console= cliconfig->console; + session->config->rootbase= cliconfig->rootbase; } - // if no rootapi use '/api' - if (cliconfig->rootbase == NULL) { - session->config->rootbase = "/api"; + if (cliconfig->rootapi == NULL) { + session->config->rootapi = "/api"; } else { - session->config->console= cliconfig->console; + session->config->rootapi= cliconfig->rootapi; } - + if (cliconfig->ldpaths == NULL) { + session->config->ldpaths = PLUGIN_INSTALL_DIR; + } else { + session->config->ldpaths= cliconfig->ldpaths; + } // if no session dir create a default path from rootdir if (cliconfig->sessiondir == NULL) { @@ -168,14 +158,14 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) { session->config->rootapi = strdup (json_object_get_string (value)); } - if (!cliconfig->smack && json_object_object_get_ex (AFBConfig, "smack", &value)) { - session->config->smack = strdup (json_object_get_string (value)); - } - - if (!cliconfig->plugins && json_object_object_get_ex (AFBConfig, "plugins", &value)) { - session->config->plugins = strdup (json_object_get_string (value)); + if (!cliconfig->ldpaths && json_object_object_get_ex (AFBConfig, "plugins", &value)) { + session->config->ldpaths = strdup (json_object_get_string (value)); } + if (!cliconfig->setuid && json_object_object_get_ex (AFBConfig, "setuid", &value)) { + session->config->setuid = strdup (json_object_get_string (value)); + } + if (!cliconfig->sessiondir && json_object_object_get_ex (AFBConfig, "sessiondir", &value)) { session->config->sessiondir = strdup (json_object_get_string (value)); } @@ -188,9 +178,6 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) { session->config->httpdPort = json_object_get_int (value); } - if (!cliconfig->setuid && json_object_object_get_ex (AFBConfig, "setuid", &value)) { - session->config->setuid = json_object_get_int (value); - } if (!cliconfig->localhostOnly && json_object_object_get_ex (AFBConfig, "localhostonly", &value)) { session->config->localhostOnly = json_object_get_int (value); @@ -199,137 +186,31 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) { if (!cliconfig->cacheTimeout && json_object_object_get_ex (AFBConfig, "cachetimeout", &value)) { session->config->cacheTimeout = json_object_get_int (value); } - // cacheTimeout is an interger but HTTPd wants it as a string + + if (!cliconfig->apiTimeout && json_object_object_get_ex (AFBConfig, "apitimeout", &value)) { + session->config->apiTimeout = json_object_get_int (value); + } + + if (!cliconfig->cntxTimeout && json_object_object_get_ex (AFBConfig, "cntxtimeout", &value)) { + session->config->cntxTimeout = json_object_get_int (value); + } + + // cacheTimeout is an integer but HTTPd wants it as a string snprintf (cacheTimeout, sizeof (cacheTimeout),"%d", session->config->cacheTimeout); session->cacheTimeout = cacheTimeout; // httpd uses cacheTimeout string version + json_object_put (AFBConfig); // decrease reference count to free the json object + + return AFB_SUCCESS; } -// Save the config on disk -PUBLIC void configStoreFile (AFB_session * session) { - json_object * AFBConfig; - time_t rawtime; - struct tm * timeinfo; - int err; - - AFBConfig = json_object_new_object(); - - // add a timestamp and store session on disk - time ( &rawtime ); timeinfo = localtime ( &rawtime ); - // A copy of the string is made and the memory is managed by the json_object - json_object_object_add (AFBConfig, "jtype" , json_object_new_string (AFB_CONFIG_JTYPE)); - json_object_object_add (AFBConfig, "timestamp" , json_object_new_string (asctime (timeinfo))); - json_object_object_add (AFBConfig, "rootdir" , json_object_new_string (session->config->rootdir)); - json_object_object_add (AFBConfig, "rootapi" , json_object_new_string (session->config->rootapi)); - json_object_object_add (AFBConfig, "rootbase" , json_object_new_string (session->config->rootbase)); - json_object_object_add (AFBConfig, "smack" , json_object_new_string (session->config->smack)); - json_object_object_add (AFBConfig, "plugins" , json_object_new_string (session->config->plugins)); - json_object_object_add (AFBConfig, "sessiondir" , json_object_new_string (session->config->sessiondir)); - json_object_object_add (AFBConfig, "pidfile" , json_object_new_string (session->config->pidfile)); - json_object_object_add (AFBConfig, "httpdPort" , json_object_new_int (session->config->httpdPort)); - json_object_object_add (AFBConfig, "setuid" , json_object_new_int (session->config->setuid)); - json_object_object_add (AFBConfig, "localhostonly" , json_object_new_int (session->config->localhostOnly)); - json_object_object_add (AFBConfig, "cachetimeout" , json_object_new_int (session->config->cacheTimeout)); - err = json_object_to_file (session->config->configfile, AFBConfig); - json_object_put (AFBConfig); // decrease reference count to free the json object - if (err < 0) { - fprintf(stderr, "AFB: Fail to save config on disk [%s]\n ", session->config->configfile); - } -} - - -PUBLIC AFB_session *configInit () { - - AFB_session *session; - AFB_config *config; - int idx, verbosesav; - - - session = malloc (sizeof (AFB_session)); - memset (session,0, sizeof (AFB_session)); - - // create config handle - config = malloc (sizeof (AFB_config)); - memset (config,0, sizeof (AFB_config)); - - // stack config handle into session - session->config = config; - - AFBJsonType = json_object_new_string ("AFB_message"); - - // initialise JSON constant messages and increase reference count to make them permanent - verbosesav = verbose; - verbose = 0; // run initialisation in silent mode - - - - for (idx = 0; idx <= AFB_SUCCESS; idx++) { - AFB_Error[idx].level = idx; - AFB_Error[idx].label = ERROR_LABEL [idx]; - AFB_Error[idx].json = jsonNewMessage (idx, NULL); - } - verbose = verbosesav; - - return (session); -} - - -// get JSON object from error level and increase its reference count -PUBLIC json_object *jsonNewStatus (AFB_ERROR level) { - - json_object *target = AFB_Error[level].json; - json_object_get (target); - - return (target); -} - -// get AFB object type with adequate usage count -PUBLIC json_object *jsonNewjtype (void) { - json_object_get (AFBJsonType); // increase reference count - return (AFBJsonType); -} - -// build an ERROR message and return it as a valid json object -PUBLIC json_object *jsonNewMessage (AFB_ERROR level, char* format, ...) { - static int count = 0; - json_object * AFBResponse; - va_list args; - char message [512]; - - // format message - if (format != NULL) { - va_start(args, format); - vsnprintf (message, sizeof (message), format, args); - va_end(args); - } - - AFBResponse = json_object_new_object(); - json_object_object_add (AFBResponse, "jtype", jsonNewjtype ()); - json_object_object_add (AFBResponse, "status" , json_object_new_string (ERROR_LABEL[level])); - if (format != NULL) { - json_object_object_add (AFBResponse, "info" , json_object_new_string (message)); - } - if (verbose) { - fprintf (stderr, "AFB:%-6s [%3d]: ", AFB_Error [level].label, count++); - if (format != NULL) { - fprintf (stderr, "%s", message); - } else { - fprintf (stderr, "No Message"); - } - fprintf (stderr, "\n"); - } - - return (AFBResponse); -} - -// Dump a message on stderr -PUBLIC void jsonDumpObject (json_object * jObject) { - - if (verbose) { - fprintf (stderr, "AFB:dump [%s]\n", json_object_to_json_string(jObject)); - } +PUBLIC AFB_session *configInit () +{ + AFB_session *session = calloc (1, sizeof (AFB_session)); + session->config = calloc (1, sizeof (AFB_config)); + return session; }