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/mapis.c | |
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/mapis.c')
-rw-r--r-- | src/mapis.c | 87 |
1 files changed, 87 insertions, 0 deletions
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; +} |