diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2018-06-29 19:42:56 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2018-07-10 17:12:14 +0200 |
commit | dc63d731f884da11cb0fc2d3b98eef5e2c2c07bc (patch) | |
tree | 09b095334b9e0b57574e8d31df033c61ed53c735 /src | |
parent | 06e96704868d7b13c1e8e296ce1b262069ca9b4a (diff) |
First draft for mock apis
An m(ock)api is a plugin with its action as verb. About
now the event listener is the same then the main api
Change-Id: Iadbbb60cfbe9d5ef85801c346e6565ccde92b0c4
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/fapis.c | 57 | ||||
-rw-r--r-- | src/mapis.c | 87 | ||||
-rw-r--r-- | src/mapis.h (renamed from src/fapis.h) | 2 | ||||
-rw-r--r-- | src/test-binding.c | 6 |
5 files changed, 92 insertions, 62 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 170844d..8a7380e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,7 +21,7 @@ PROJECT_TARGET_ADD(test-binding) # Define project Targets - ADD_LIBRARY(${TARGET_NAME} MODULE ${TARGET_NAME}.c fapis.c) + ADD_LIBRARY(${TARGET_NAME} MODULE ${TARGET_NAME}.c mapis.c) SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES PREFIX "" diff --git a/src/fapis.c b/src/fapis.c deleted file mode 100644 index a736fd6..0000000 --- a/src/fapis.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2016 "IoT.bzh" - * - * Author Romain Forlot <romain@iot.bzh> - * - * 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. - */ - -#include <fapis.h> - -static int LoadOneFapi(void *data, AFB_ApiT apiHandle) -{ - CtlActionT *actions = NULL; - json_object* verbsJ = (json_object*) data; - - actions = ActionConfig(apiHandle, verbsJ, 1); - - return 0; -} - -static void OneFapiConfig(void *data, json_object *fapiJ) { - const char *uid = NULL, *info = NULL, *spath = NULL; - json_object *verbsJ = NULL, *filesJ = NULL, *luaJ = NULL; - - AFB_ApiT apiHandle = (AFB_ApiT)data; - - if(wrap_json_unpack(fapiJ, "{ss,s?s,s?s,so,s?o,so !}", - "uid", &uid, - "info", &info, - "spath", &spath, - "libs", &filesJ, - "lua", &luaJ, - "verbs", &verbsJ)) { - AFB_ApiError(apiHandle, "Wrong fapis specification, missing uid|[info]|[spath]|libs|[lua]|verbs"); - return; - } - - if (afb_dynapi_new_api(apiHandle, uid, info, 1, LoadOneFapi, )) { - AFB_ApiError(apiHandle, "Error creating new api: %s", uid); - return; - } -} - -int FapisConfig(AFB_ApiT apiHandle, CtlSectionT *section, json_object *fapisJ) { - if(! PluginConfig(apiHandle, section, fapisJ)) - wrap_json_optarray_for_all(fapisJ, OneFapiConfig, (void*)apiHandle); -} diff --git a/src/mapis.c b/src/mapis.c new file mode 100644 index 0000000..d196ed0 --- /dev/null +++ b/src/mapis.c @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2016 "IoT.bzh" + * + * Author Romain Forlot <romain@iot.bzh> + * + * 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. + */ + +#include <mapis.h> +#include <ctl-plugin.h> + +struct mapisHandleT { + AFB_ApiT mainApiHandle; + CtlSectionT *section; + json_object *mapiJ; + json_object *verbsJ; +}; + +static int LoadOnemapi(void *data, AFB_ApiT apiHandle) +{ + struct mapisHandleT *mapisHandle = (struct mapisHandleT*)data; + + if(PluginConfig(apiHandle, mapisHandle->section, mapisHandle->mapiJ)) { + AFB_ApiError(apiHandle, "Problem loading the plugin as an API for %s, see log message above", json_object_get_string(mapisHandle->mapiJ)); + return -1; + } + + // declare the verbs for this API + if(! ActionConfig(apiHandle, mapisHandle->verbsJ, 1)) { + AFB_ApiError(apiHandle, "Problems at verbs creations for %s", json_object_get_string(mapisHandle->mapiJ)); + return -1; + } + // declare an event event manager for this API; + afb_dynapi_on_event(apiHandle, CtrlDispatchApiEvent); + + return 0; +} + +static void OnemapiConfig(void *data, json_object *mapiJ) { + const char *uid = NULL, *info = NULL; + + struct mapisHandleT *mapisHandle = (struct mapisHandleT*)data; + + if(mapiJ) { + if(wrap_json_unpack(mapiJ, "{ss,s?s,s?s,so,s?o,so !}", + "uid", &uid, + "info", &info, + "spath", NULL, + "libs", NULL, + "lua", NULL, + "verbs", &mapisHandle->verbsJ)) { + AFB_ApiError(mapisHandle->mainApiHandle, "Wrong mapis specification, missing uid|[info]|[spath]|libs|[lua]|verbs"); + return; + } + + json_object_get(mapisHandle->verbsJ); + json_object_object_del(mapiJ, "verbs"); + mapisHandle->mapiJ = mapiJ; + + if (afb_dynapi_new_api(mapisHandle->mainApiHandle, uid, info, 1, LoadOnemapi, (void*)mapisHandle)) { + AFB_ApiError(mapisHandle->mainApiHandle, "Error creating new api: %s", uid); + return; + } + } +} + +int mapisConfig(AFB_ApiT apiHandle, CtlSectionT *section, json_object *mapisJ) { + struct mapisHandleT mapisHandle = { + .mainApiHandle = apiHandle, + .section = section, + .mapiJ = NULL, + .verbsJ = NULL + }; + wrap_json_optarray_for_all(mapisJ, OnemapiConfig, (void*)&mapisHandle); + + return 0; +} diff --git a/src/fapis.h b/src/mapis.h index d0dd467..9ea03b1 100644 --- a/src/fapis.h +++ b/src/mapis.h @@ -20,4 +20,4 @@ #include <wrap-json.h> #include <filescan-utils.h> -int FapisConfig(AFB_ApiT apiHandle, CtlSectionT *section, json_object *fapisJ); +int mapisConfig(AFB_ApiT apiHandle, CtlSectionT *section, json_object *mapisJ); diff --git a/src/test-binding.c b/src/test-binding.c index 1668360..d0fcb3c 100644 --- a/src/test-binding.c +++ b/src/test-binding.c @@ -22,7 +22,7 @@ #include <time.h> #include "test-binding.h" -#include "fapis.h" +#include "mapis.h" // default api to print log when apihandle not avaliable afb_dynapi *AFB_default; @@ -31,7 +31,7 @@ static CtlSectionT ctrlSections[] = { {.key = "resources", .loadCB = PluginConfig}, {.key = "onload", .loadCB = OnloadConfig}, {.key = "events", .loadCB = EventConfig}, - {.key = "fapis", .loadCB = FapisConfig}, + {.key = "mapis", .loadCB = mapisConfig}, {.key = NULL} }; @@ -114,7 +114,7 @@ int afbBindingVdyn(afb_dynapi *apiHandle) { if (!dirList) dirList = CONTROL_CONFIG_PATH; - configPath = CtlConfigSearch(apiHandle, dirList, ""); + configPath = CtlConfigSearch(apiHandle, dirList, "aft"); if (!configPath) { AFB_ApiError(apiHandle, "CtlPreInit: No %s* config found in %s ", GetBinderName(), dirList); return ERROR; |