afb-error-text: Introduce standard error text
[src/app-framework-binder.git] / src / afb-supervision.c
index 8636ef0..0515234 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2016, 2017, 2018 "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");
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-#if defined(WITH_SUPERVISION)
+#if WITH_SUPERVISION
 
 #define _GNU_SOURCE
 
 #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-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;
+#if WITH_AFB_TRACE
 static const char supervisor_apiname[] = AFS_SUPERVISOR_APINAME;
+#endif
 
 /* path of the supervision socket */
 static const char supervisor_socket_path[] = AFS_SUPERVISION_SOCKET;
@@ -80,8 +83,10 @@ static struct afb_api_itf supervision_api_itf =
 /* the supervisor link */
 static struct afb_stub_ws *supervisor;
 
+#if WITH_AFB_TRACE
 /* the trace api */
 static struct afb_trace *trace;
+#endif
 
 /* 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;
-       struct afb_trace *t;
 
        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 WITH_AFB_TRACE
+       struct afb_trace *t = __atomic_exchange_n(&trace, NULL, __ATOMIC_RELAXED);
        if (t)
                afb_trace_unref(t);
+#endif
 }
 
 static void on_supervisor_hangup(struct afb_stub_ws *s)
@@ -212,7 +219,7 @@ static void try_connect_supervisor()
                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;
@@ -286,10 +293,8 @@ int afb_supervision_init(struct afb_apiset *apiset, struct json_object *config)
 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)
 {
-       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;
+#if WITH_AFB_TRACE
+       struct json_object *drop, *add;
+       int rc;
+#endif
 
        /* 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)
-                       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)
-                               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);
@@ -354,10 +363,11 @@ static void on_supervision_call(void *closure, struct afb_xreq *xreq)
                afb_xreq_reply(xreq, json_object_get(global.config), NULL, NULL);
                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 */);
 
-               req = xreq_to_req_x2(xreq);
                add = drop = NULL;
                wrap_json_unpack(args, "{s?o s?o}", "add", &add, "drop", &drop);
                if (add) {
@@ -371,11 +381,14 @@ static void on_supervision_call(void *closure, struct afb_xreq *xreq)
                                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))
-                       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)