Code Review
/
src
/
app-framework-binder.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Fix AFB_SESSION_CREATE behaviour
[src/app-framework-binder.git]
/
src
/
afb-api-so.c
diff --git
a/src/afb-api-so.c
b/src/afb-api-so.c
index
693385d
..
a365294
100644
(file)
--- a/
src/afb-api-so.c
+++ b/
src/afb-api-so.c
@@
-48,7
+48,7
@@
struct api_so_desc {
static int api_timeout = 15;
static int api_timeout = 15;
-static const char plugin_register_function[] = "pluginAfbV1
Entry
";
+static const char plugin_register_function[] = "pluginAfbV1
Register
";
static void afb_api_so_event_sender_push(struct api_so_desc *desc, const char *name, struct json_object *object)
{
static void afb_api_so_event_sender_push(struct api_so_desc *desc, const char *name, struct json_object *object)
{
@@
-108,18
+108,22
@@
static void call_check(struct afb_req req, struct afb_context *context, const st
}
if ((stag & AFB_SESSION_CREATE) != 0) {
}
if ((stag & AFB_SESSION_CREATE) != 0) {
- if (
!afb_context_create(context
)) {
+ if (
afb_context_check_loa(context, 1
)) {
afb_context_close(context);
afb_req_fail(req, "failed", "invalid creation state");
return;
}
afb_context_close(context);
afb_req_fail(req, "failed", "invalid creation state");
return;
}
+ afb_context_change_loa(context, 1);
+ afb_context_refresh(context);
}
if ((stag & (AFB_SESSION_CREATE | AFB_SESSION_RENEW)) != 0)
afb_context_refresh(context);
}
if ((stag & (AFB_SESSION_CREATE | AFB_SESSION_RENEW)) != 0)
afb_context_refresh(context);
- if ((stag & AFB_SESSION_CLOSE) != 0)
+ if ((stag & AFB_SESSION_CLOSE) != 0) {
+ afb_context_change_loa(context, 0);
afb_context_close(context);
afb_context_close(context);
+ }
data.req = req;
data.action = verb->callback;
data.req = req;
data.action = verb->callback;
@@
-141,29
+145,35
@@
static void call(struct api_so_desc *desc, struct afb_req req, struct afb_contex
int afb_api_so_add_plugin(const char *path)
{
int afb_api_so_add_plugin(const char *path)
{
+ int rc;
+ void *handle;
struct api_so_desc *desc;
struct AFB_plugin *(*pluginAfbV1RegisterFct) (const struct AFB_interface *interface);
struct api_so_desc *desc;
struct AFB_plugin *(*pluginAfbV1RegisterFct) (const struct AFB_interface *interface);
- desc = calloc(1, sizeof *desc);
- if (desc == NULL) {
- ERROR("out of memory");
- goto error;
- }
-
// This is a loadable library let's check if it's a plugin
// This is a loadable library let's check if it's a plugin
- desc->handle = dlopen(path, RTLD_NOW | RTLD_LOCAL);
- if (desc->handle == NULL) {
+ rc = 0;
+ handle = dlopen(path, RTLD_NOW | RTLD_LOCAL);
+ if (handle == NULL) {
ERROR("plugin [%s] not loadable", path);
ERROR("plugin [%s] not loadable", path);
- goto error
2
;
+ goto error;
}
/* retrieves the register function */
}
/* retrieves the register function */
- pluginAfbV1RegisterFct = dlsym(
desc->
handle, plugin_register_function);
+ pluginAfbV1RegisterFct = dlsym(handle, plugin_register_function);
if (!pluginAfbV1RegisterFct) {
ERROR("plugin [%s] is not an AFB plugin", path);
if (!pluginAfbV1RegisterFct) {
ERROR("plugin [%s] is not an AFB plugin", path);
- goto error
3
;
+ goto error
2
;
}
INFO("plugin [%s] is a valid AFB plugin", path);
}
INFO("plugin [%s] is a valid AFB plugin", path);
+ rc = -1;
+
+ /* allocates the description */
+ desc = calloc(1, sizeof *desc);
+ if (desc == NULL) {
+ ERROR("out of memory");
+ goto error2;
+ }
+ desc->handle = handle;
/* init the interface */
desc->interface.verbosity = 0;
/* init the interface */
desc->interface.verbosity = 0;
@@
-187,6
+197,10
@@
int afb_api_so_add_plugin(const char *path)
ERROR("plugin [%s] bad prefix...", path);
goto error3;
}
ERROR("plugin [%s] bad prefix...", path);
goto error3;
}
+ if (!afb_apis_is_valid_api_name(desc->plugin->v1.prefix)) {
+ ERROR("plugin [%s] invalid prefix...", path);
+ goto error3;
+ }
if (desc->plugin->v1.info == NULL || *desc->plugin->v1.info == 0) {
ERROR("plugin [%s] bad description...", path);
goto error3;
if (desc->plugin->v1.info == NULL || *desc->plugin->v1.info == 0) {
ERROR("plugin [%s] bad description...", path);
goto error3;
@@
-208,11
+222,11
@@
int afb_api_so_add_plugin(const char *path)
return 0;
error3:
return 0;
error3:
- dlclose(desc->handle);
-error2:
free(desc);
free(desc);
+error2:
+ dlclose(handle);
error:
error:
- return
-1
;
+ return
rc
;
}
static int adddirs(char path[PATH_MAX], size_t end)
}
static int adddirs(char path[PATH_MAX], size_t end)
@@
-256,7
+270,8
@@
static int adddirs(char path[PATH_MAX], size_t end)
/* case of files */
if (!strstr(ent.d_name, ".so"))
continue;
/* case of files */
if (!strstr(ent.d_name, ".so"))
continue;
- afb_api_so_add_plugin(path);
+ if (afb_api_so_add_plugin(path) < 0)
+ return -1;
}
}
closedir(dir);
}
}
closedir(dir);
@@
-305,7
+320,8
@@
int afb_api_so_add_pathset(const char *pathset)
p = strsep(&ps, sep);
if (!p)
return 0;
p = strsep(&ps, sep);
if (!p)
return 0;
- afb_api_so_add_path(p);
- };
+ if (afb_api_so_add_path(p) < 0)
+ return -1;
+ }
}
}