X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-api-v3.c;h=6469b886070a102b130b6a747e61f3a2c000e4ca;hb=4da9c713d091872f8e18cf096d2c5f616183d3b4;hp=7f63b6eb8e216f802a5addb25e3db25b44e8d6fa;hpb=9cbff28c8a97e7a5dc36f6e6225a9d5e2eab8f06;p=src%2Fapp-framework-binder.git diff --git a/src/afb-api-v3.c b/src/afb-api-v3.c index 7f63b6eb..6469b886 100644 --- a/src/afb-api-v3.c +++ b/src/afb-api-v3.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016, 2017, 2018 "IoT.bzh" + * Copyright (C) 2016-2019 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,7 +44,9 @@ struct afb_api_v3 { int refcount; int count; struct afb_verb_v3 **verbs; +#if WITH_LEGACY_BINDING_V2 const struct afb_verb_v2 *verbsv2; +#endif const struct afb_verb_v3 *verbsv3; struct afb_export *export; const char *info; @@ -77,7 +79,9 @@ static struct afb_verb_v3 *search_dynamic_verb(struct afb_api_v3 *api, const cha void afb_api_v3_process_call(struct afb_api_v3 *api, struct afb_xreq *xreq) { const struct afb_verb_v3 *verbsv3; +#if WITH_LEGACY_BINDING_V2 const struct afb_verb_v2 *verbsv2; +#endif const char *name; name = xreq->request.called_verb; @@ -104,6 +108,7 @@ void afb_api_v3_process_call(struct afb_api_v3 *api, struct afb_xreq *xreq) return; } +#if WITH_LEGACY_BINDING_V2 /* look in legacy set */ verbsv2 = api->verbsv2; if (verbsv2) { @@ -116,7 +121,7 @@ void afb_api_v3_process_call(struct afb_api_v3 *api, struct afb_xreq *xreq) } } } - +#endif afb_xreq_reply_unknown_verb(xreq); } @@ -158,37 +163,38 @@ struct json_object *afb_api_v3_make_description_openAPIv3(struct afb_api_v3 *api json_object_object_add(i, "version", json_object_new_string("0.0.0")); json_object_object_add(i, "description", json_object_new_string(api->info)); + buffer[0] = '/'; + buffer[sizeof buffer - 1] = 0; + p = json_object_new_object(); json_object_object_add(r, "paths", p); iter = api->verbs; end = iter + api->count; while (iter != end) { verb = *iter++; - buffer[0] = '/'; - strncpy(buffer + 1, verb->verb, sizeof buffer - 1); + strncpy(buffer + 1, verb->verb, sizeof buffer - 2); json_object_object_add(p, buffer, describe_verb_v3(verb)); } verb = api->verbsv3; if (verb) while(verb->verb) { - buffer[0] = '/'; - strncpy(buffer + 1, verb->verb, sizeof buffer - 1); + strncpy(buffer + 1, verb->verb, sizeof buffer - 2); json_object_object_add(p, buffer, describe_verb_v3(verb)); verb++; } return r; } -struct afb_api_v3 *afb_api_v3_create( - struct afb_apiset *declare_set, +struct afb_api_v3 *afb_api_v3_create(struct afb_apiset *declare_set, struct afb_apiset *call_set, const char *apiname, const char *info, int noconcurrency, int (*preinit)(void*, struct afb_api_x3 *), void *closure, - int copy_info -) + int copy_info, + struct afb_export* creator, + const char* path) { struct afb_api_v3 *api; @@ -206,7 +212,7 @@ struct afb_api_v3 *afb_api_v3_create( else api->info = info; - api->export = afb_export_create_v3(declare_set, call_set, apiname, api); + api->export = afb_export_create_v3(declare_set, call_set, apiname, api, creator, path); if (!api->export) goto oom2; @@ -251,12 +257,14 @@ struct afb_export *afb_api_v3_export(struct afb_api_v3 *api) return api->export; } +#if WITH_LEGACY_BINDING_V2 void afb_api_v3_set_verbs_v2( struct afb_api_v3 *api, const struct afb_verb_v2 *verbs) { api->verbsv2 = verbs; } +#endif void afb_api_v3_set_verbs_v3( struct afb_api_v3 *api, @@ -357,7 +365,7 @@ int afb_api_v3_set_binding_fields(const struct afb_binding_v3 *desc, struct afb_ if (!rc && desc->require_class) rc = afb_api_x3_require_class(api, desc->require_class); if (!rc && desc->require_api) - rc = afb_api_x3_require_api(api, desc->require_api, 1); + rc = afb_api_x3_require_api(api, desc->require_api, 0); return rc; } @@ -400,6 +408,6 @@ static int init_binding(void *closure, struct afb_api_x3 *api) struct afb_api_v3 *afb_api_v3_from_binding(const struct afb_binding_v3 *desc, struct afb_apiset *declare_set, struct afb_apiset * call_set) { - return afb_api_v3_create(declare_set, call_set, desc->api, desc->info, desc->noconcurrency, init_binding, (void*)desc, 0); + return afb_api_v3_create(declare_set, call_set, desc->api, desc->info, desc->noconcurrency, init_binding, (void*)desc, 0, NULL, NULL); }