summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2017-04-21 18:59:02 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2017-04-21 18:59:02 +0200
commitf047a6ebb105106fd3b293681298a9fa86418b23 (patch)
tree03576632713c3c8d3834f33fcc785809ab5bfb0e
parent7e358069a9e076a25bb31211e5b7386c231f0f8d (diff)
apiset: improvements
Change-Id: I476ab17bb5c48dbb3cd6c215687989203407549f Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--src/afb-apiset.c54
-rw-r--r--src/afb-apiset.h3
2 files changed, 48 insertions, 9 deletions
diff --git a/src/afb-apiset.c b/src/afb-apiset.c
index c17881ed..63c28fe7 100644
--- a/src/afb-apiset.c
+++ b/src/afb-apiset.c
@@ -146,6 +146,15 @@ struct afb_apiset *afb_apiset_create(const char *name, int timeout)
return set;
}
+/**
+ * the name of the apiset
+ * @param set the api set
+ * @return the name of the set
+ */
+const char *afb_apiset_name(struct afb_apiset *set)
+{
+ return set->name;
+}
/**
* Get the API timeout of the set
@@ -246,7 +255,6 @@ void afb_apiset_default_api_drop(struct afb_apiset *set)
* @param api the api
* @returns 0 in case of success or -1 in case
* of error with errno set:
- * - EINVAL if name isn't valid
* - EEXIST if name already registered
* - ENOMEM when out of memory
*/
@@ -255,13 +263,6 @@ int afb_apiset_add(struct afb_apiset *set, const char *name, struct afb_api api)
struct api_desc *apis;
int i, c;
- /* Checks the api name */
- if (!afb_api_is_valid_name(name)) {
- ERROR("invalid api name forbidden (name is '%s')", name);
- errno = EINVAL;
- goto error;
- }
-
/* check previously existing plugin */
for (i = 0 ; i < set->count ; i++) {
c = strcasecmp(set->apis[i].name, name);
@@ -337,6 +338,27 @@ int afb_apiset_del(struct afb_apiset *set, const char *name)
* @param api the structure where to store data about the API of name
* @return 0 in case of success or -1 in case of error
*/
+int afb_apiset_lookup(struct afb_apiset *set, const char *name, struct afb_api *api)
+{
+ const struct api_desc *i;
+
+ i = search(set, name);
+ if (i) {
+ *api = i->api;
+ return 0;
+ }
+
+ errno = ENOENT;
+ return -1;
+}
+
+/**
+ * Get from the 'set' the API of 'name' in 'api' with fallback to subset or default api
+ * @param set the set of API
+ * @param name the name of the API to get
+ * @param api the structure where to store data about the API of name
+ * @return 0 in case of success or -1 in case of error
+ */
int afb_apiset_get(struct afb_apiset *set, const char *name, struct afb_api *api)
{
const struct api_desc *i;
@@ -478,7 +500,7 @@ int afb_apiset_get_verbosity(struct afb_apiset *set, const char *name)
return -1;
}
if (!i->api.itf->get_verbosity)
- return 0;
+ return verbosity;
return i->api.itf->get_verbosity(i->api.closure);
}
@@ -513,3 +535,17 @@ const char **afb_apiset_get_names(struct afb_apiset *set)
return names;
}
+/**
+ * Enumerate the api names to a callback.
+ * @param set the api set
+ * @param callback the function to call for each name
+ * @param closure the closure for the callback
+ */
+void afb_apiset_enum(struct afb_apiset *set, void (*callback)(struct afb_apiset *set, const char *name, void *closure), void *closure)
+{
+ int i;
+
+ for (i = 0 ; i < set->count ; i++)
+ callback(set, set->apis[i].name, closure);
+}
+
diff --git a/src/afb-apiset.h b/src/afb-apiset.h
index 2b3ea2a6..ff6f6b48 100644
--- a/src/afb-apiset.h
+++ b/src/afb-apiset.h
@@ -23,6 +23,7 @@ struct afb_apiset;
extern struct afb_apiset *afb_apiset_addref(struct afb_apiset *set);
extern void afb_apiset_unref(struct afb_apiset *set);
extern struct afb_apiset *afb_apiset_create(const char *name, int timeout);
+extern const char *afb_apiset_name(struct afb_apiset *set);
extern int afb_apiset_timeout_get(struct afb_apiset *set);
extern void afb_apiset_timeout_set(struct afb_apiset *set, int to);
extern void afb_apiset_subset_set(struct afb_apiset *set, struct afb_apiset *subset);
@@ -33,6 +34,7 @@ extern void afb_apiset_default_api_set(struct afb_apiset *set, struct afb_api ap
extern void afb_apiset_default_api_drop(struct afb_apiset *set);
extern int afb_apiset_add(struct afb_apiset *set, const char *name, struct afb_api api);
extern int afb_apiset_del(struct afb_apiset *set, const char *name);
+extern int afb_apiset_lookup(struct afb_apiset *set, const char *name, struct afb_api *api);
extern int afb_apiset_get(struct afb_apiset *set, const char *name, struct afb_api *api);
extern int afb_apiset_start_service(struct afb_apiset *set, const char *name, int share_session, int onneed);
extern int afb_apiset_start_all_services(struct afb_apiset *set, int share_session);
@@ -40,4 +42,5 @@ extern void afb_apiset_update_hooks(struct afb_apiset *set, const char *name);
extern void afb_apiset_set_verbosity(struct afb_apiset *set, const char *name, int level);
extern int afb_apiset_get_verbosity(struct afb_apiset *set, const char *name);
extern const char **afb_apiset_get_names(struct afb_apiset *set);
+extern void afb_apiset_enum(struct afb_apiset *set, void (*callback)(struct afb_apiset *set, const char *name, void *closure), void *closure);