From 9e15ef8f38cd7562365356839ab9822e060c68cc Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Fri, 5 Jul 2019 15:51:43 +0200 Subject: Use generic path for Json config file Change-Id: Iad3f46a4b08e29efb72dff8a3d2328e19923186a Signed-off-by: Sebastien Douheret --- src/harvester-binding.c | 192 +++++++++++++++++++++++++----------------------- 1 file changed, 101 insertions(+), 91 deletions(-) (limited to 'src') diff --git a/src/harvester-binding.c b/src/harvester-binding.c index afa672e..a78290e 100644 --- a/src/harvester-binding.c +++ b/src/harvester-binding.c @@ -17,136 +17,146 @@ */ #define _GNU_SOURCE +#include #include #include #include -#include - #include "harvester-binding.h" // Config Section definition (note: controls section index should match handle // retrieval in HalConfigExec) static CtlSectionT ctrlSections[] = { - {.key = "plugins" , .loadCB = PluginConfig}, - {.key = "onload" , .loadCB = OnloadConfig}, - {.key = "controls", .loadCB = ControlConfig}, - {.key = "events" , .loadCB = EventConfig}, - {.key = NULL} + { .key = "plugins", .loadCB = PluginConfig }, + { .key = "onload", .loadCB = OnloadConfig }, + { .key = "controls", .loadCB = ControlConfig }, + { .key = "events", .loadCB = EventConfig }, + { .key = NULL } }; -static void ctrlapi_ping(afb_req_t request) { - static int count = 0; +static void ctrlapi_ping(afb_req_t request) +{ + static int count = 0; - count++; - AFB_REQ_NOTICE(request, "Controller:ping count=%d", count); - afb_req_success(request, json_object_new_int(count), NULL); + count++; + AFB_REQ_NOTICE(request, "Controller:ping count=%d", count); + afb_req_success(request, json_object_new_int(count), NULL); - return; + return; } static void ctrlapi_auth(afb_req_t request) { - afb_req_session_set_LOA(request, 1); - afb_req_success(request, NULL, NULL); + afb_req_session_set_LOA(request, 1); + afb_req_success(request, NULL, NULL); } static afb_verb_t CtrlApiVerbs[] = { - /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */ - {.verb = "ping", .callback = ctrlapi_ping, .info = "ping test for API"}, - {.verb = "auth", .callback = ctrlapi_auth, .info = "Authenticate session to raise Level Of Assurance of the session"}, - {.verb = NULL} /* marker for end of the array */ + /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */ + { .verb = "ping", .callback = ctrlapi_ping, .info = "ping test for API" }, + { .verb = "auth", .callback = ctrlapi_auth, .info = "Authenticate session to raise Level Of Assurance of the session" }, + { .verb = NULL } /* marker for end of the array */ }; -static int CtrlLoadStaticVerbs(afb_dynapi *apiHandle, afb_verb_t *verbs) { - int errcount = 0; +static int CtrlLoadStaticVerbs(afb_dynapi* apiHandle, afb_verb_t* verbs) +{ + int errcount = 0; - for (int idx = 0; verbs[idx].verb; idx++) { - errcount += afb_dynapi_add_verb( - apiHandle, CtrlApiVerbs[idx].verb, NULL, CtrlApiVerbs[idx].callback, - (void *)&CtrlApiVerbs[idx], CtrlApiVerbs[idx].auth, 0); - } + for (int idx = 0; verbs[idx].verb; idx++) { + errcount += afb_dynapi_add_verb( + apiHandle, CtrlApiVerbs[idx].verb, NULL, CtrlApiVerbs[idx].callback, + (void*)&CtrlApiVerbs[idx], CtrlApiVerbs[idx].auth, 0); + } - return errcount; + return errcount; }; -static int CtrlInitOneApi(afb_api_t apiHandle) { - int err = 0; +static int CtrlInitOneApi(afb_api_t apiHandle) +{ + int err = 0; - // retrieve section config from api handle - CtlConfigT *ctrlConfig = (CtlConfigT *)afb_dynapi_get_userdata(apiHandle); - err = CtlConfigExec(apiHandle, ctrlConfig); - if(err) { - AFB_API_ERROR(apiHandle, "Error at CtlConfigExec step"); - return err; - } + // retrieve section config from api handle + CtlConfigT* ctrlConfig = (CtlConfigT*)afb_dynapi_get_userdata(apiHandle); + err = CtlConfigExec(apiHandle, ctrlConfig); + if (err) { + AFB_API_ERROR(apiHandle, "Error at CtlConfigExec step"); + return err; + } - return err; + return err; } // next generation dynamic API-V3 mode #include -static int CtrlLoadOneApi(void *cbdata, afb_api_t apiHandle) { - CtlConfigT *ctrlConfig = (CtlConfigT *)cbdata; +static int CtrlLoadOneApi(void* cbdata, afb_api_t apiHandle) +{ + CtlConfigT* ctrlConfig = (CtlConfigT*)cbdata; - // save closure as api's data context - afb_dynapi_set_userdata(apiHandle, ctrlConfig); + // save closure as api's data context + afb_dynapi_set_userdata(apiHandle, ctrlConfig); - // add static controls verbs - int err = CtrlLoadStaticVerbs(apiHandle, CtrlApiVerbs); - if (err) { - AFB_API_ERROR(apiHandle, "CtrlLoadSection fail to register static V2 verbs"); - return ERROR; - } + // add static controls verbs + int err = CtrlLoadStaticVerbs(apiHandle, CtrlApiVerbs); + if (err) { + AFB_API_ERROR(apiHandle, "CtrlLoadSection fail to register static V2 verbs"); + return ERROR; + } - // load section for corresponding API - err = CtlLoadSections(apiHandle, ctrlConfig, ctrlSections); + // load section for corresponding API + err = CtlLoadSections(apiHandle, ctrlConfig, ctrlSections); - // declare an event event manager for this API; - afb_dynapi_on_event(apiHandle, CtrlDispatchApiEvent); + // declare an event event manager for this API; + afb_dynapi_on_event(apiHandle, CtrlDispatchApiEvent); - // init API function (does not receive user closure ??? - afb_dynapi_on_init(apiHandle, CtrlInitOneApi); + // init API function (does not receive user closure ??? + afb_dynapi_on_init(apiHandle, CtrlInitOneApi); - afb_dynapi_seal(apiHandle); - return err; + afb_dynapi_seal(apiHandle); + return err; } -int afbBindingEntry(afb_dynapi *apiHandle) { - AFB_API_NOTICE(apiHandle, "Controller in afbBindingVdyn"); - - const char *dirList = getenv("CONTROL_CONFIG_PATH"); - if (!dirList) - dirList = CONTROL_CONFIG_PATH; - - const char *configPath = CtlConfigSearch(apiHandle, dirList, ""); - if (!configPath) { - AFB_API_ERROR(apiHandle, "CtlPreInit: No %s* config found in %s ", GetBinderName(), dirList); - return ERROR; - } - - // load config file and create API - CtlConfigT *ctrlConfig = CtlLoadMetaData(apiHandle, configPath); - if (!ctrlConfig) { - AFB_API_ERROR(apiHandle, - "CtrlBindingDyn No valid control config file in:\n-- %s", - configPath); - return ERROR; - } - - if (!ctrlConfig->api) { - AFB_API_ERROR(apiHandle, - "CtrlBindingDyn API Missing from metadata in:\n-- %s", - configPath); - return ERROR; - } - - AFB_API_NOTICE(apiHandle, "Controller API='%s' info='%s'", ctrlConfig->api, - ctrlConfig->info); - - // create one API per config file (Pre-V3 return code ToBeChanged) - int status = afb_dynapi_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, CtrlLoadOneApi, ctrlConfig); - - return status; +int afbBindingEntry(afb_dynapi* apiHandle) +{ + AFB_API_NOTICE(apiHandle, "Controller in afbBinding"); + char* dirList; + const char* dir = GetBindingDirPath(apiHandle); + if (!dir) + dirList = CONTROL_CONFIG_PATH; + else { + dirList = calloc(strlen(dir) + strlen("/etc"), sizeof(char)); + strcpy(dirList, dir); + strcat(dirList, "/etc"); + AFB_API_NOTICE(apiHandle, "Json config directory : %s", dirList); + } + + const char* configPath = CtlConfigSearch(apiHandle, dirList, ""); + if (!configPath) { + AFB_API_ERROR(apiHandle, "CtlPreInit: No %s* config found in %s ", GetBinderName(), dirList); + return ERROR; + } + + // load config file and create API + CtlConfigT* ctrlConfig = CtlLoadMetaData(apiHandle, configPath); + if (!ctrlConfig) { + AFB_API_ERROR(apiHandle, + "CtrlBindingDyn No valid control config file in:\n-- %s", + configPath); + return ERROR; + } + + if (!ctrlConfig->api) { + AFB_API_ERROR(apiHandle, + "CtrlBindingDyn API Missing from metadata in:\n-- %s", + configPath); + return ERROR; + } + + AFB_API_NOTICE(apiHandle, "Controller API='%s' info='%s'", ctrlConfig->api, + ctrlConfig->info); + + // create one API per config file (Pre-V3 return code ToBeChanged) + int status = afb_dynapi_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, CtrlLoadOneApi, ctrlConfig); + + return status; } -- cgit 1.2.3-korg