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
Add gitreview file for Kooky Koi branch
[src/app-framework-binder.git]
/
src
/
afb-supervision.c
diff --git
a/src/afb-supervision.c
b/src/afb-supervision.c
index
2482a08
..
6563d92
100644
(file)
--- a/
src/afb-supervision.c
+++ b/
src/afb-supervision.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (C) 201
6, 2017, 2018
"IoT.bzh"
+ * Copyright (C) 201
5-2020
"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,7
+15,7
@@
* limitations under the License.
*/
* limitations under the License.
*/
-#if
defined(WITH_SUPERVISION)
+#if
WITH_SUPERVISION
#define _GNU_SOURCE
#define _GNU_SOURCE
@@
-32,28
+32,31
@@
#include <json-c/json.h>
#define AFB_BINDING_VERSION 3
#include <json-c/json.h>
#define AFB_BINDING_VERSION 3
+#define AFB_BINDING_NO_ROOT
#include <afb/afb-binding.h>
#include <afb/afb-binding.h>
-#include "afb-cred.h"
#include "afb-api.h"
#include "afb-apiset.h"
#include "afb-api-so-v2.h"
#include "afb-xreq.h"
#include "afb-trace.h"
#include "afb-session.h"
#include "afb-api.h"
#include "afb-apiset.h"
#include "afb-api-so-v2.h"
#include "afb-xreq.h"
#include "afb-trace.h"
#include "afb-session.h"
-#include "afb-
config
.h"
+#include "afb-
args
.h"
#include "afb-supervision.h"
#include "afs-supervision.h"
#include "afb-stub-ws.h"
#include "afb-debug.h"
#include "afb-fdev.h"
#include "afb-supervision.h"
#include "afs-supervision.h"
#include "afb-stub-ws.h"
#include "afb-debug.h"
#include "afb-fdev.h"
+#include "afb-error-text.h"
#include "verbose.h"
#include "wrap-json.h"
#include "jobs.h"
/* api and apiset name */
static const char supervision_apiname[] = AFS_SUPERVISION_APINAME;
#include "verbose.h"
#include "wrap-json.h"
#include "jobs.h"
/* api and apiset name */
static const char supervision_apiname[] = AFS_SUPERVISION_APINAME;
+#if WITH_AFB_TRACE
static const char supervisor_apiname[] = AFS_SUPERVISOR_APINAME;
static const char supervisor_apiname[] = AFS_SUPERVISOR_APINAME;
+#endif
/* path of the supervision socket */
static const char supervisor_socket_path[] = AFS_SUPERVISION_SOCKET;
/* path of the supervision socket */
static const char supervisor_socket_path[] = AFS_SUPERVISION_SOCKET;
@@
-64,7
+67,7
@@
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
/* the standard apiset */
static struct {
struct afb_apiset *apiset;
/* the standard apiset */
static struct {
struct afb_apiset *apiset;
- struct
afb_config
*config;
+ struct
json_object
*config;
} global;
/* the supervision apiset (not exported) */
} global;
/* the supervision apiset (not exported) */
@@
-80,8
+83,10
@@
static struct afb_api_itf supervision_api_itf =
/* the supervisor link */
static struct afb_stub_ws *supervisor;
/* the supervisor link */
static struct afb_stub_ws *supervisor;
+#if WITH_AFB_TRACE
/* the trace api */
static struct afb_trace *trace;
/* the trace api */
static struct afb_trace *trace;
+#endif
/* open the socket */
static int open_supervisor_socket(const char *path)
/* open the socket */
static int open_supervisor_socket(const char *path)
@@
-121,15
+126,17
@@
static int open_supervisor_socket(const char *path)
static void disconnect_supervisor()
{
struct afb_stub_ws *s;
static void disconnect_supervisor()
{
struct afb_stub_ws *s;
- struct afb_trace *t;
INFO("Disconnecting supervision");
s = __atomic_exchange_n(&supervisor, NULL, __ATOMIC_RELAXED);
INFO("Disconnecting supervision");
s = __atomic_exchange_n(&supervisor, NULL, __ATOMIC_RELAXED);
- t = __atomic_exchange_n(&trace, NULL, __ATOMIC_RELAXED);
if (s)
afb_stub_ws_unref(s);
if (s)
afb_stub_ws_unref(s);
+
+#if WITH_AFB_TRACE
+ struct afb_trace *t = __atomic_exchange_n(&trace, NULL, __ATOMIC_RELAXED);
if (t)
afb_trace_unref(t);
if (t)
afb_trace_unref(t);
+#endif
}
static void on_supervisor_hangup(struct afb_stub_ws *s)
}
static void on_supervisor_hangup(struct afb_stub_ws *s)
@@
-155,14
+162,14
@@
static void try_connect_supervisor()
/* check existing path */
if (supervisor_socket_path[0] != '@' && access(supervisor_socket_path, F_OK)) {
/* check existing path */
if (supervisor_socket_path[0] != '@' && access(supervisor_socket_path, F_OK)) {
-
NOTICE
("Can't acces socket path %s: %m", supervisor_socket_path);
+
INFO
("Can't acces socket path %s: %m", supervisor_socket_path);
goto end;
}
/* socket connection */
fd = open_supervisor_socket(supervisor_socket_path);
if (fd < 0) {
goto end;
}
/* socket connection */
fd = open_supervisor_socket(supervisor_socket_path);
if (fd < 0) {
-
NOTICE
("Can't connect supervision socket to %s: %m", supervisor_socket_path);
+
INFO
("Can't connect supervision socket to %s: %m", supervisor_socket_path);
goto end;
}
goto end;
}
@@
-212,7
+219,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;
@@
-238,7
+245,7
@@
static void on_sighup(int signum)
/**
* initialize the supervision
*/
/**
* initialize the supervision
*/
-int afb_supervision_init(struct afb_apiset *apiset, struct
afb_config
*config)
+int afb_supervision_init(struct afb_apiset *apiset, struct
json_object
*config)
{
int rc;
struct sigaction sa;
{
int rc;
struct sigaction sa;
@@
-286,10
+293,8
@@
int afb_supervision_init(struct afb_apiset *apiset, struct afb_config *config)
static void slist(void *closure, struct afb_session *session)
{
struct json_object *list = closure;
static void slist(void *closure, struct afb_session *session)
{
struct json_object *list = closure;
- struct json_object *item;
- wrap_json_pack(&item, "{ss}", "token", afb_session_token(session));
- json_object_object_add(list, afb_session_uuid(session), item);
+ json_object_object_add(list, afb_session_uuid(session), NULL);
}
/******************************************************************************
}
/******************************************************************************
@@
-302,12
+307,16
@@
enum { Break , Config , Do , Exit , Sclose , Slist , Trace , Wait };
static void on_supervision_call(void *closure, struct afb_xreq *xreq)
{
static void on_supervision_call(void *closure, struct afb_xreq *xreq)
{
- int i
, rc
;
- struct json_object *args, *
drop, *add, *
sub, *list;
+ int i;
+ struct json_object *args, *sub, *list;
const char *api, *verb, *uuid;
struct afb_session *session;
const struct afb_api_item *xapi;
afb_req_t req;
const char *api, *verb, *uuid;
struct afb_session *session;
const struct afb_api_item *xapi;
afb_req_t req;
+#if WITH_AFB_TRACE
+ struct json_object *drop, *add;
+ int rc;
+#endif
/* search the verb */
i = (int)(sizeof verbs / sizeof *verbs);
/* search the verb */
i = (int)(sizeof verbs / sizeof *verbs);
@@
-332,11
+341,11
@@
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_reply(xreq, NULL,
"invalid"
, NULL);
+ afb_xreq_reply(xreq, NULL,
afb_error_text_invalid_request
, NULL);
else {
session = afb_session_search(uuid);
if (!session)
else {
session = afb_session_search(uuid);
if (!session)
- afb_xreq_reply(xreq, NULL,
"not-found"
, NULL);
+ afb_xreq_reply(xreq, NULL,
afb_error_text_unknown_session
, NULL);
else {
afb_session_close(session);
afb_session_unref(session);
else {
afb_session_close(session);
afb_session_unref(session);
@@
-351,13
+360,14
@@
static void on_supervision_call(void *closure, struct afb_xreq *xreq)
afb_xreq_reply(xreq, list, NULL, NULL);
break;
case Config:
afb_xreq_reply(xreq, list, NULL, NULL);
break;
case Config:
- afb_xreq_reply(xreq,
afb_config_json
(global.config), NULL, NULL);
+ afb_xreq_reply(xreq,
json_object_get
(global.config), NULL, NULL);
break;
case Trace:
break;
case Trace:
+ req = xreq_to_req_x2(xreq);
+#if WITH_AFB_TRACE
if (!trace)
trace = afb_trace_create(supervisor_apiname, NULL /* not bound to any session */);
if (!trace)
trace = afb_trace_create(supervisor_apiname, NULL /* not bound to any session */);
- 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) {
@@
-371,18
+381,20
@@
static void on_supervision_call(void *closure, struct afb_xreq *xreq)
return;
}
afb_req_success(req, NULL, NULL);
return;
}
afb_req_success(req, NULL, NULL);
+#else
+ afb_req_reply(req, NULL, afb_error_text_not_available, NULL);
+#endif
break;
case Do:
sub = NULL;
if (wrap_json_unpack(args, "{ss ss s?o*}", "api", &api, "verb", &verb, "args", &sub))
break;
case Do:
sub = NULL;
if (wrap_json_unpack(args, "{ss ss s?o*}", "api", &api, "verb", &verb, "args", &sub))
- afb_xreq_reply(xreq, NULL,
"error", "bad request"
);
+ afb_xreq_reply(xreq, NULL,
afb_error_text_invalid_request, NULL
);
else {
xapi = afb_apiset_lookup_started(global.apiset, api, 1);
if (!xapi)
afb_xreq_reply_unknown_api(xreq);
else {
else {
xapi = afb_apiset_lookup_started(global.apiset, api, 1);
if (!xapi)
afb_xreq_reply_unknown_api(xreq);
else {
- afb_cred_unref(xreq->cred);
- xreq->cred = NULL;
+ afb_context_change_cred(&xreq->context, NULL);
xreq->request.called_api = api;
xreq->request.called_verb = verb;
xreq->json = json_object_get(sub);
xreq->request.called_api = api;
xreq->request.called_verb = verb;
xreq->json = json_object_get(sub);