X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-supervision.c;h=84c302f67769d3768a7ae41226444ffab0739391;hb=c98c0d913e3720e61f42d1fabc56a12a73a612ae;hp=0884bc961827425c4169f0c97d051523be595d6e;hpb=d7ca347f30509d92cf70b4b320dcd675f5b3a147;p=src%2Fapp-framework-binder.git diff --git a/src/afb-supervision.c b/src/afb-supervision.c index 0884bc96..84c302f6 100644 --- a/src/afb-supervision.c +++ b/src/afb-supervision.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016, 2017 "IoT.bzh" + * Copyright (C) 2016, 2017, 2018 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,9 @@ * limitations under the License. */ +#if defined(WITH_SUPERVISION) + #define _GNU_SOURCE -#define AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO #include #include @@ -29,7 +30,9 @@ #include #include -#include + +#define AFB_BINDING_VERSION 3 +#include #include "afb-cred.h" #include "afb-api.h" @@ -51,11 +54,11 @@ extern struct afb_config *main_config; /* api and apiset name */ -static const char supervision_apiname[] = AFS_SURPERVISION_APINAME; -static const char supervisor_apiname[] = AFS_SURPERVISOR_APINAME; +static const char supervision_apiname[] = AFS_SUPERVISION_APINAME; +static const char supervisor_apiname[] = AFS_SUPERVISOR_APINAME; /* path of the supervision socket */ -static const char supervisor_socket_path[] = AFS_SURPERVISION_SOCKET; +static const char supervisor_socket_path[] = AFS_SUPERVISION_SOCKET; /* mutual exclusion */ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; @@ -162,7 +165,7 @@ static void try_connect_supervisor() goto end; } - /* negociation */ + /* negotiation */ do { srd = read(fd, &initiator, sizeof initiator); } while(srd < 0 && errno == EINTR); if (srd < 0) { NOTICE("Can't read supervisor %s: %m", supervisor_socket_path); @@ -176,7 +179,7 @@ static void try_connect_supervisor() ERROR("Bad interface of supervisor %s", supervisor_socket_path); goto end2; } - if (strcmp(initiator.interface, AFS_SURPERVISION_INTERFACE_1)) { + if (strcmp(initiator.interface, AFS_SUPERVISION_INTERFACE_1)) { ERROR("Unknown interface %s for supervisor %s", initiator.interface, supervisor_socket_path); goto end2; } @@ -232,7 +235,7 @@ static void on_sighup(int signum) } /** - * initalize the supervision + * initialize the supervision */ int afb_supervision_init() { @@ -252,7 +255,7 @@ int afb_supervision_init() /* init the apiset */ rc = afb_apiset_add(supervision_apiset, supervision_apiname, - (struct afb_api){ .itf = &supervision_api_itf, .closure = NULL}); + (struct afb_api_item){ .itf = &supervision_api_itf, .closure = NULL}); if (rc < 0) { ERROR("Can't create supervision's apiset: %m"); afb_apiset_unref(supervision_apiset); @@ -298,14 +301,14 @@ static void on_supervision_call(void *closure, struct afb_xreq *xreq) struct json_object *args, *drop, *add, *sub, *list; const char *api, *verb, *uuid; struct afb_session *session; - const struct afb_api *xapi; - struct afb_req req; + const struct afb_api_item *xapi; + afb_req_t req; /* search the verb */ i = (int)(sizeof verbs / sizeof *verbs); - while(--i >= 0 && strcasecmp(verbs[i], xreq->request.verb)); + while(--i >= 0 && strcasecmp(verbs[i], xreq->request.called_verb)); if (i < 0) { - afb_xreq_fail_unknown_verb(xreq); + afb_xreq_reply_unknown_verb(xreq); return; } @@ -324,32 +327,32 @@ static void on_supervision_call(void *closure, struct afb_xreq *xreq) if (wrap_json_unpack(args, "s", &uuid)) wrap_json_unpack(args, "{ss}", "uuid", &uuid); if (!uuid) - afb_xreq_fail(xreq, "invalid", NULL); + afb_xreq_reply(xreq, NULL, "invalid", NULL); else { session = afb_session_search(uuid); if (!session) - afb_xreq_fail(xreq, "not-found", NULL); + afb_xreq_reply(xreq, NULL, "not-found", NULL); else { afb_session_close(session); afb_session_unref(session); afb_session_purge(); - afb_xreq_success(xreq, NULL, NULL); + afb_xreq_reply(xreq, NULL, NULL, NULL); } } break; case Slist: list = json_object_new_object(); afb_session_foreach(slist, list); - afb_xreq_success(xreq, list, NULL); + afb_xreq_reply(xreq, list, NULL, NULL); break; case Config: - afb_xreq_success(xreq, afb_config_json(main_config), NULL); + afb_xreq_reply(xreq, afb_config_json(main_config), NULL, NULL); break; case Trace: if (!trace) trace = afb_trace_create(supervisor_apiname, NULL /* not bound to any session */); - req = xreq_to_req(xreq); + req = xreq_to_req_x2(xreq); add = drop = NULL; wrap_json_unpack(args, "{s?o s?o}", "add", &add, "drop", &drop); if (add) { @@ -367,16 +370,16 @@ static void on_supervision_call(void *closure, struct afb_xreq *xreq) case Do: sub = NULL; if (wrap_json_unpack(args, "{ss ss s?o*}", "api", &api, "verb", &verb, "args", &sub)) - afb_xreq_fail(xreq, "error", "bad request"); + afb_xreq_reply(xreq, NULL, "error", "bad request"); else { xapi = afb_apiset_lookup_started(main_apiset, api, 1); if (!xapi) - afb_xreq_fail_unknown_api(xreq); + afb_xreq_reply_unknown_api(xreq); else { afb_cred_unref(xreq->cred); xreq->cred = NULL; - xreq->request.api = api; - xreq->request.verb = verb; + xreq->request.called_api = api; + xreq->request.called_verb = verb; xreq->json = json_object_get(sub); xapi->itf->call(xapi->closure, xreq); json_object_put(args); @@ -384,13 +387,14 @@ static void on_supervision_call(void *closure, struct afb_xreq *xreq) } break; case Wait: - afb_req_success(req, NULL, NULL); + afb_xreq_reply(xreq, NULL, NULL, NULL); afb_debug_wait("supervisor"); break; case Break: - afb_req_success(req, NULL, NULL); + afb_xreq_reply(xreq, NULL, NULL, NULL); afb_debug_break("supervisor"); break; } } +#endif