summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.vscode/c_cpp_properties.json4
-rw-r--r--src/harvester-binding.c192
2 files changed, 101 insertions, 95 deletions
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index d690f48..82768b6 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -5,12 +5,10 @@
"includePath": [
"${workspaceFolder}",
"/usr/include/c++/7",
- "/usr/include/c++/7/x86_64-redhat-linux",
"/usr/include/c++/7/backward",
"/usr/local/include",
"/usr/lib64/clang/5.0.1/include",
"/usr/include",
- "/opt/include",
"/opt/AGL/include",
"/opt/AGL/include/afb",
"${workspaceFolder}/src"
@@ -21,12 +19,10 @@
"path": [
"${workspaceFolder}",
"/usr/include/c++/7",
- "/usr/include/c++/7/x86_64-redhat-linux",
"/usr/include/c++/7/backward",
"/usr/local/include",
"/usr/lib64/clang/5.0.1/include",
"/usr/include",
- "/opt/include",
"/opt/AGL/include",
"/opt/AGL/include/afb"
],
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 <afb/afb-binding.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
-#include <afb/afb-binding.h>
-
#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 <signal.h>
-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;
}