aboutsummaryrefslogtreecommitdiffstats
path: root/src/xds-binding.c
diff options
context:
space:
mode:
authorSebastien Douheret <sebastien.douheret@iot.bzh>2018-06-12 17:52:40 +0200
committerSebastien Douheret <sebastien.douheret@iot.bzh>2018-07-10 23:59:54 +0200
commit75eb2161c641f85dded64a99cb862abfab64eff7 (patch)
treec2c6c515e45bba9ca1b2e30fe392342cab643ae0 /src/xds-binding.c
parent197d9acab4fb5097d3dce56227c2096abdc075bd (diff)
Improved supervisor requests & events recording
Change-Id: I4eb52820d2bec4ca4f2e3e455db7eb79d1a09d12 Signed-off-by: Sebastien Douheret <sebastien.douheret@iot.bzh>
Diffstat (limited to 'src/xds-binding.c')
-rw-r--r--src/xds-binding.c202
1 files changed, 106 insertions, 96 deletions
diff --git a/src/xds-binding.c b/src/xds-binding.c
index 4f7971f..3d9839b 100644
--- a/src/xds-binding.c
+++ b/src/xds-binding.c
@@ -23,135 +23,145 @@
#include "xds-binding.h"
-
-// default api to print log when apihandle not avaliable
-afb_dynapi *AFB_default;
+afb_dynapi* AFB_default;
// 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_ReqT request) {
- static int count = 0;
-
- count++;
- AFB_ReqNotice(request, "Controller:ping count=%d", count);
- AFB_ReqSucess(request, json_object_new_int(count), NULL);
-
- return;
+static void ctrlapi_ping(AFB_ReqT request)
+{
+ static int count = 0;
+ json_object* resJ;
+ int rc;
+ count++;
+ AFB_ReqNotice(request, "Controller:ping count=%d", count);
+ rc = wrap_json_pack(&resJ, "{ss si}", "status", "pong", "count", count);
+ if (rc < 0) {
+ AFB_ReqFailF(request, "ERROR", "wrap_json_pack rc=%d", rc);
+ return;
+ }
+ AFB_ReqSuccess(request, resJ, NULL);
+
+ return;
}
void ctrlapi_auth(AFB_ReqT request)
{
- AFB_ReqSetLOA(request, 1);
- AFB_ReqSucess(request, NULL, NULL);
+ AFB_ReqSetLOA(request, 1);
+ AFB_ReqSuccess(request, NULL, NULL);
}
static AFB_ApiVerbs 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_ApiVerbs *verbs) {
- int errcount = 0;
+static int CtrlLoadStaticVerbs(afb_dynapi* apiHandle, AFB_ApiVerbs* 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_ApiT apiHandle) {
- int err = 0;
- AFB_default = apiHandle; // hugely hack to make all V2 AFB_DEBUG to work in fileutils
+static int CtrlInitOneApi(AFB_ApiT apiHandle)
+{
+ int err = 0;
+
+ AFB_default = apiHandle; // hugely hack to make all V2 AFB_DEBUG to work in fileutils
- // retrieve section config from api handle
- CtlConfigT *ctrlConfig = (CtlConfigT *)afb_dynapi_get_userdata(apiHandle);
- err = CtlConfigExec(apiHandle, ctrlConfig);
- if(err) {
- AFB_ApiError(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_ApiError(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_ApiT apiHandle) {
- CtlConfigT *ctrlConfig = (CtlConfigT *)cbdata;
+static int CtrlLoadOneApi(void* cbdata, AFB_ApiT 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_ApiError(apiHandle, "CtrlLoadSection fail to register static V2 verbs");
- return ERROR;
- }
+ // add static controls verbs
+ int err = CtrlLoadStaticVerbs(apiHandle, CtrlApiVerbs);
+ if (err) {
+ AFB_ApiError(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 afbBindingVdyn(afb_dynapi *apiHandle) {
-
- AFB_default = apiHandle;
- AFB_ApiNotice(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_ApiError(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_ApiError(apiHandle,
- "CtrlBindingDyn No valid control config file in:\n-- %s",
- configPath);
- return ERROR;
- }
-
- if (!ctrlConfig->api) {
- AFB_ApiError(apiHandle,
- "CtrlBindingDyn API Missing from metadata in:\n-- %s",
- configPath);
- return ERROR;
- }
-
- AFB_ApiNotice(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);
+int afbBindingVdyn(afb_dynapi* apiHandle)
+{
- return status;
+ AFB_default = apiHandle;
+ AFB_ApiNotice(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_ApiError(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_ApiError(apiHandle,
+ "CtrlBindingDyn No valid control config file in:\n-- %s",
+ configPath);
+ return ERROR;
+ }
+
+ if (!ctrlConfig->api) {
+ AFB_ApiError(apiHandle,
+ "CtrlBindingDyn API Missing from metadata in:\n-- %s",
+ configPath);
+ return ERROR;
+ }
+
+ AFB_ApiNotice(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;
}