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
Update copyright date
[src/app-framework-binder.git]
/
src
/
afb-supervision.c
diff --git
a/src/afb-supervision.c
b/src/afb-supervision.c
index
0884bc9
..
b6af92c
100644
(file)
--- a/
src/afb-supervision.c
+++ b/
src/afb-supervision.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (C) 2016
, 2017
"IoT.bzh"
+ * Copyright (C) 2016
-2019
"IoT.bzh"
* Author José Bollo <jose.bollo@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Author José Bollo <jose.bollo@iot.bzh>
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@
-15,8
+15,9
@@
* limitations under the License.
*/
* limitations under the License.
*/
+#if defined(WITH_SUPERVISION)
+
#define _GNU_SOURCE
#define _GNU_SOURCE
-#define AFB_BINDING_PRAGMA_NO_VERBOSE_MACRO
#include <string.h>
#include <errno.h>
#include <string.h>
#include <errno.h>
@@
-29,7
+30,9
@@
#include <sys/un.h>
#include <json-c/json.h>
#include <sys/un.h>
#include <json-c/json.h>
-#include <afb/afb-binding-v2.h>
+
+#define AFB_BINDING_VERSION 3
+#include <afb/afb-binding.h>
#include "afb-cred.h"
#include "afb-api.h"
#include "afb-cred.h"
#include "afb-api.h"
@@
-48,20
+51,21
@@
#include "wrap-json.h"
#include "jobs.h"
#include "wrap-json.h"
#include "jobs.h"
-extern struct afb_config *main_config;
-
/* api and apiset name */
/* api and apiset name */
-static const char supervision_apiname[] = AFS_SU
R
PERVISION_APINAME;
-static const char supervisor_apiname[] = AFS_SU
R
PERVISOR_APINAME;
+static const char supervision_apiname[] = AFS_SUPERVISION_APINAME;
+static const char supervisor_apiname[] = AFS_SUPERVISOR_APINAME;
/* path of the supervision socket */
/* path of the supervision socket */
-static const char supervisor_socket_path[] = AFS_SU
R
PERVISION_SOCKET;
+static const char supervisor_socket_path[] = AFS_SUPERVISION_SOCKET;
/* mutual exclusion */
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
/* the standard apiset */
/* mutual exclusion */
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
/* the standard apiset */
-extern struct afb_apiset *main_apiset;
+static struct {
+ struct afb_apiset *apiset;
+ struct json_object *config;
+} global;
/* the supervision apiset (not exported) */
static struct afb_apiset *supervision_apiset;
/* the supervision apiset (not exported) */
static struct afb_apiset *supervision_apiset;
@@
-162,7
+166,7
@@
static void try_connect_supervisor()
goto end;
}
goto end;
}
- /* nego
c
iation */
+ /* nego
t
iation */
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);
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
+180,7
@@
static void try_connect_supervisor()
ERROR("Bad interface of supervisor %s", supervisor_socket_path);
goto end2;
}
ERROR("Bad interface of supervisor %s", supervisor_socket_path);
goto end2;
}
- if (strcmp(initiator.interface, AFS_SU
R
PERVISION_INTERFACE_1)) {
+ if (strcmp(initiator.interface, AFS_SUPERVISION_INTERFACE_1)) {
ERROR("Unknown interface %s for supervisor %s", initiator.interface, supervisor_socket_path);
goto end2;
}
ERROR("Unknown interface %s for supervisor %s", initiator.interface, supervisor_socket_path);
goto end2;
}
@@
-208,7
+212,7
@@
static void try_connect_supervisor()
ERROR("Creation of supervisor failed: %m");
goto end;
}
ERROR("Creation of supervisor failed: %m");
goto end;
}
- afb_stub_ws_on_hangup(supervisor, on_supervisor_hangup);
+ afb_stub_ws_
set_
on_hangup(supervisor, on_supervisor_hangup);
/* successful termination */
goto end;
/* successful termination */
goto end;
@@
-232,9
+236,9
@@
static void on_sighup(int signum)
}
/**
}
/**
- * initalize the supervision
+ * init
i
alize the supervision
*/
*/
-int afb_supervision_init()
+int afb_supervision_init(
struct afb_apiset *apiset, struct json_object *config
)
{
int rc;
struct sigaction sa;
{
int rc;
struct sigaction sa;
@@
-252,7
+256,7
@@
int afb_supervision_init()
/* init the apiset */
rc = afb_apiset_add(supervision_apiset, supervision_apiname,
/* 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);
if (rc < 0) {
ERROR("Can't create supervision's apiset: %m");
afb_apiset_unref(supervision_apiset);
@@
-260,6
+264,10
@@
int afb_supervision_init()
return rc;
}
return rc;
}
+ /* init the globals */
+ global.apiset = apiset;
+ global.config = config;
+
/* get SIGHUP */
memset(&sa, 0, sizeof sa);
sa.sa_handler = on_sighup;
/* get SIGHUP */
memset(&sa, 0, sizeof sa);
sa.sa_handler = on_sighup;
@@
-298,14
+306,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;
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);
/* 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) {
if (i < 0) {
- afb_xreq_
fail
_unknown_verb(xreq);
+ afb_xreq_
reply
_unknown_verb(xreq);
return;
}
return;
}
@@
-324,32
+332,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)
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)
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();
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);
}
}
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:
break;
case Config:
- afb_xreq_
success(xreq, afb_config_json(main_config)
, NULL);
+ afb_xreq_
reply(xreq, json_object_get(global.config), NULL
, NULL);
break;
case Trace:
if (!trace)
trace = afb_trace_create(supervisor_apiname, NULL /* not bound to any session */);
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) {
add = drop = NULL;
wrap_json_unpack(args, "{s?o s?o}", "add", &add, "drop", &drop);
if (add) {
@@
-367,16
+375,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))
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 {
else {
- xapi = afb_apiset_lookup_started(
main_
apiset, api, 1);
+ xapi = afb_apiset_lookup_started(
global.
apiset, api, 1);
if (!xapi)
if (!xapi)
- afb_xreq_
fail
_unknown_api(xreq);
+ afb_xreq_
reply
_unknown_api(xreq);
else {
afb_cred_unref(xreq->cred);
xreq->cred = NULL;
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);
xreq->json = json_object_get(sub);
xapi->itf->call(xapi->closure, xreq);
json_object_put(args);
@@
-384,13
+392,14
@@
static void on_supervision_call(void *closure, struct afb_xreq *xreq)
}
break;
case Wait:
}
break;
case Wait:
- afb_
req_success(req
, NULL, NULL);
+ afb_
xreq_reply(xreq, NULL
, NULL, NULL);
afb_debug_wait("supervisor");
break;
case Break:
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;
}
}
afb_debug_break("supervisor");
break;
}
}
+#endif