From 90e56dd22eba15bf71e3e0042080c2213ae39920 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Thu, 5 Jul 2018 18:42:53 +0200 Subject: Files reorganization and rename project to AFT Change-Id: I2e4adc51bdf5fcb9001c68fb4fc71f4987da47e0 Signed-off-by: Romain Forlot --- src/CMakeLists.txt | 4 +- src/aft.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/aft.h | 32 ++++++++++ src/test-binding.c | 167 ----------------------------------------------------- src/test-binding.h | 32 ---------- 5 files changed, 201 insertions(+), 201 deletions(-) create mode 100644 src/aft.c create mode 100644 src/aft.h delete mode 100644 src/test-binding.c delete mode 100644 src/test-binding.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a7380e..5bbe7e8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,7 @@ # Add target to project dependency list -PROJECT_TARGET_ADD(test-binding) +PROJECT_TARGET_ADD(aft) # Define project Targets ADD_LIBRARY(${TARGET_NAME} MODULE ${TARGET_NAME}.c mapis.c) @@ -32,7 +32,7 @@ PROJECT_TARGET_ADD(test-binding) TARGET_LINK_LIBRARIES(${TARGET_NAME} afb-helpers - ctl-utilities + ctl-utilities ${link_libraries} ) diff --git a/src/aft.c b/src/aft.c new file mode 100644 index 0000000..1a3eb54 --- /dev/null +++ b/src/aft.c @@ -0,0 +1,167 @@ +/* +* Copyright (C) 2016 "IoT.bzh" +* Author Fulup Ar Foll +* Author Romain Forlot +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#define _GNU_SOURCE +#include +#include +#include + +#include "aft.h" +#include "mapis.h" +// default api to print log when apihandle not avaliable +afb_dynapi *AFB_default; + +// Config Section definition +static CtlSectionT ctrlSections[] = { + {.key = "resources", .loadCB = PluginConfig}, + {.key = "testVerb", .loadCB = ControlConfig}, + {.key = "events", .loadCB = EventConfig}, + {.key = "mapis", .loadCB = MapiConfig}, + {.key = NULL} +}; + +static void ctrlapi_ping(AFB_ReqT request) { + static int count = 0; + + count++; + AFB_ReqNotice(request, "Controller:ping count=%d", count); + AFB_ReqSuccess(request, json_object_new_int(count), NULL); +} + +static void ctrlapi_exit(AFB_ReqT request) { + + AFB_ReqNotice(request, "Exiting..."); + AFB_ReqSuccess(request, NULL, NULL); + exit(0); +} + +static AFB_ApiVerbs CtrlApiVerbs[] = { + /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */ + {.verb = "ping", .callback = ctrlapi_ping, .info = "ping test for API"}, + {.verb = "exit", .callback = ctrlapi_exit, .info = "Exit test"}, + {.verb = NULL} /* marker for end of the array */ +}; + +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); + } + + return errcount; +}; + +static int CtrlInitOneApi(AFB_ApiT apiHandle) { + // Hugely hack to make all V2 AFB_DEBUG to work in fileutils + AFB_default = apiHandle; + + CtlConfigT *ctrlConfig = afb_dynapi_get_userdata(apiHandle); + + return CtlConfigExec(apiHandle, ctrlConfig); +} + +// next generation dynamic API-V3 mode +#include + +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); + + // 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); + + // 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); + + afb_dynapi_seal(apiHandle); + return err; +} + +int afbBindingVdyn(afb_dynapi *apiHandle) { + int status, err = 0; + const char *dirList = NULL, *configPath = NULL; + json_object *resourcesJ = NULL, *eventsJ = NULL; + CtlConfigT *ctrlConfig = NULL; + AFB_default = apiHandle; + + AFB_ApiNotice(apiHandle, "Controller in afbBindingVdyn"); + + dirList = getenv("CONTROL_CONFIG_PATH"); + if (!dirList) + dirList = CONTROL_CONFIG_PATH; + + configPath = CtlConfigSearch(apiHandle, dirList, "aft"); + if (!configPath) { + AFB_ApiError(apiHandle, "CtlPreInit: No %s* config found in %s ", GetBinderName(), dirList); + return ERROR; + } + + // load config file and create API + 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); + + err = wrap_json_pack(&resourcesJ, "{s[{ss, ss, ss}]}", "resources", + "uid", "AFT", + "info", "LUA Binder test framework", + "libs", "aft.lua" ); + err += wrap_json_pack(&eventsJ, "{s[{ss, ss}]}", "events", + "uid", "monitor/trace", + "action", "lua://AFT#_evt_catcher_" ); + + if(err) { + AFB_ApiError(apiHandle, "Error at Controller configuration editing."); + return err; + } + wrap_json_object_add(ctrlConfig->configJ, resourcesJ); + wrap_json_object_add(ctrlConfig->configJ, eventsJ); + + // create one API per config file (Pre-V3 return code ToBeChanged) + status = afb_dynapi_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, CtrlLoadOneApi, ctrlConfig); + + return status; +} diff --git a/src/aft.h b/src/aft.h new file mode 100644 index 0000000..7ac00a0 --- /dev/null +++ b/src/aft.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2016 "IoT.bzh" + * Author Fulup Ar Foll + * Author Romain Forlot + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef _CTL_BINDING_INCLUDE_ +#define _CTL_BINDING_INCLUDE_ + +#include +#include +#include +#include + +#ifndef ERROR + #define ERROR -1 +#endif + +#endif /* _CTL_BINDING_INCLUDE_ */ diff --git a/src/test-binding.c b/src/test-binding.c deleted file mode 100644 index 39e90c4..0000000 --- a/src/test-binding.c +++ /dev/null @@ -1,167 +0,0 @@ -/* -* Copyright (C) 2016 "IoT.bzh" -* Author Fulup Ar Foll -* Author Romain Forlot -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#define _GNU_SOURCE -#include -#include -#include - -#include "test-binding.h" -#include "mapis.h" -// default api to print log when apihandle not avaliable -afb_dynapi *AFB_default; - -// Config Section definition -static CtlSectionT ctrlSections[] = { - {.key = "resources", .loadCB = PluginConfig}, - {.key = "testVerb", .loadCB = ControlConfig}, - {.key = "events", .loadCB = EventConfig}, - {.key = "mapis", .loadCB = MapiConfig}, - {.key = NULL} -}; - -static void ctrlapi_ping(AFB_ReqT request) { - static int count = 0; - - count++; - AFB_ReqNotice(request, "Controller:ping count=%d", count); - AFB_ReqSuccess(request, json_object_new_int(count), NULL); -} - -static void ctrlapi_exit(AFB_ReqT request) { - - AFB_ReqNotice(request, "Exiting..."); - AFB_ReqSuccess(request, NULL, NULL); - exit(0); -} - -static AFB_ApiVerbs CtrlApiVerbs[] = { - /* VERB'S NAME FUNCTION TO CALL SHORT DESCRIPTION */ - {.verb = "ping", .callback = ctrlapi_ping, .info = "ping test for API"}, - {.verb = "exit", .callback = ctrlapi_exit, .info = "Exit test"}, - {.verb = NULL} /* marker for end of the array */ -}; - -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); - } - - return errcount; -}; - -static int CtrlInitOneApi(AFB_ApiT apiHandle) { - // Hugely hack to make all V2 AFB_DEBUG to work in fileutils - AFB_default = apiHandle; - - CtlConfigT *ctrlConfig = afb_dynapi_get_userdata(apiHandle); - - return CtlConfigExec(apiHandle, ctrlConfig); -} - -// next generation dynamic API-V3 mode -#include - -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); - - // 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); - - // 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); - - afb_dynapi_seal(apiHandle); - return err; -} - -int afbBindingVdyn(afb_dynapi *apiHandle) { - int status, err = 0; - const char *dirList = NULL, *configPath = NULL; - json_object *resourcesJ = NULL, *eventsJ = NULL; - CtlConfigT *ctrlConfig = NULL; - AFB_default = apiHandle; - - AFB_ApiNotice(apiHandle, "Controller in afbBindingVdyn"); - - dirList = getenv("CONTROL_CONFIG_PATH"); - if (!dirList) - dirList = CONTROL_CONFIG_PATH; - - configPath = CtlConfigSearch(apiHandle, dirList, "aft"); - if (!configPath) { - AFB_ApiError(apiHandle, "CtlPreInit: No %s* config found in %s ", GetBinderName(), dirList); - return ERROR; - } - - // load config file and create API - 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); - - err = wrap_json_pack(&resourcesJ, "{s[{ss, ss, ss}]}", "resources", - "uid", "AFT", - "info", "LUA Binder test framework", - "libs", "aft.lua" ); - err += wrap_json_pack(&eventsJ, "{s[{ss, ss}]}", "events", - "uid", "monitor/trace", - "action", "lua://AFT#_evt_catcher_" ); - - if(err) { - AFB_ApiError(apiHandle, "Error at Controller configuration editing."); - return err; - } - wrap_json_object_add(ctrlConfig->configJ, resourcesJ); - wrap_json_object_add(ctrlConfig->configJ, eventsJ); - - // create one API per config file (Pre-V3 return code ToBeChanged) - status = afb_dynapi_new_api(apiHandle, ctrlConfig->api, ctrlConfig->info, 1, CtrlLoadOneApi, ctrlConfig); - - return status; -} diff --git a/src/test-binding.h b/src/test-binding.h deleted file mode 100644 index 7ac00a0..0000000 --- a/src/test-binding.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2016 "IoT.bzh" - * Author Fulup Ar Foll - * Author Romain Forlot - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#ifndef _CTL_BINDING_INCLUDE_ -#define _CTL_BINDING_INCLUDE_ - -#include -#include -#include -#include - -#ifndef ERROR - #define ERROR -1 -#endif - -#endif /* _CTL_BINDING_INCLUDE_ */ -- cgit 1.2.3-korg