Change-Id: I476ab17bb5c48dbb3cd6c215687989203407549f
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
+/**
+ * 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
/**
* Get the API timeout of the set
* @param api the api
* @returns 0 in case of success or -1 in case
* of error with errno 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
*/
* - EEXIST if name already registered
* - ENOMEM when out of memory
*/
struct api_desc *apis;
int i, c;
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);
/* check previously existing plugin */
for (i = 0 ; i < set->count ; i++) {
c = strcasecmp(set->apis[i].name, 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
*/
* @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;
int afb_apiset_get(struct afb_apiset *set, const char *name, struct afb_api *api)
{
const struct api_desc *i;
return -1;
}
if (!i->api.itf->get_verbosity)
return -1;
}
if (!i->api.itf->get_verbosity)
return i->api.itf->get_verbosity(i->api.closure);
}
return i->api.itf->get_verbosity(i->api.closure);
}
+/**
+ * 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);
+}
+
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 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);
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);
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 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);
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);
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_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);