afb-xreq: Remove field 'listener' 35/21935/1
authorJose Bollo <jose.bollo@iot.bzh>
Wed, 27 Mar 2019 16:16:06 +0000 (17:16 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Tue, 23 Jul 2019 12:17:24 +0000 (14:17 +0200)
This simplifies the flow that now has only one
case: the callbacks subscribe/unsubscribe of
struct afb_xreq_query_itf.

Bug-AGL: SPEC-2658

Signed-off-by: Jose Bollo <jose.bollo@iot.bzh>
Change-Id: Ia49f3ce7aaa4d8603014fe163f311eadfcbf68e4

src/afb-ws-json1.c
src/afb-xreq.c
src/afb-xreq.h

index 23160fc..c799193 100644 (file)
@@ -52,6 +52,8 @@ static void aws_on_broadcast_cb(void *closure, const char *event, struct json_ob
 /* predeclaration of wsreq callbacks */
 static void wsreq_destroy(struct afb_xreq *xreq);
 static void wsreq_reply(struct afb_xreq *xreq, struct json_object *object, const char *error, const char *info);
+static int wsreq_subscribe(struct afb_xreq *xreq, struct afb_event_x2 *event);
+static int wsreq_unsubscribe(struct afb_xreq *xreq, struct afb_event_x2 *event);
 
 /* declaration of websocket structure */
 struct afb_ws_json1
@@ -85,6 +87,8 @@ static struct afb_wsj1_itf wsj1_itf = {
 /* interface for xreq */
 const struct afb_xreq_query_itf afb_ws_json1_xreq_itf = {
        .reply = wsreq_reply,
+       .subscribe = wsreq_subscribe,
+       .unsubscribe = wsreq_unsubscribe,
        .unref = wsreq_destroy
 };
 
@@ -202,7 +206,6 @@ static void aws_on_call_cb(void *closure, const char *api, const char *verb, str
        wsreq->xreq.request.called_verb = verb;
        wsreq->xreq.json = afb_wsj1_msg_object_j(wsreq->msgj1);
        wsreq->aws = afb_ws_json1_addref(ws);
-       wsreq->xreq.listener = wsreq->aws->listener;
 
        /* emits the call */
        afb_xreq_process(&wsreq->xreq, ws->apiset);
@@ -257,3 +260,17 @@ static void wsreq_reply(struct afb_xreq *xreq, struct json_object *object, const
                ERROR("Can't send reply: %m");
 }
 
+static int wsreq_subscribe(struct afb_xreq *xreq, struct afb_event_x2 *event)
+{
+       struct afb_wsreq *wsreq = CONTAINER_OF_XREQ(struct afb_wsreq, xreq);
+
+       return afb_evt_event_x2_add_watch(wsreq->aws->listener, event);
+}
+
+static int wsreq_unsubscribe(struct afb_xreq *xreq, struct afb_event_x2 *event)
+{
+       struct afb_wsreq *wsreq = CONTAINER_OF_XREQ(struct afb_wsreq, xreq);
+
+       return afb_evt_event_x2_remove_watch(wsreq->aws->listener, event);
+}
+
index 790a384..17a603c 100644 (file)
@@ -206,8 +206,6 @@ int afb_xreq_subscribe(struct afb_xreq *xreq, struct afb_event_x2 *event)
                ERROR("request replied, subscription impossible");
                errno = EINVAL;
        } else {
-               if (xreq->listener)
-                       return afb_evt_event_x2_add_watch(xreq->listener, event);
                if (xreq->queryitf->subscribe)
                        return xreq->queryitf->subscribe(xreq, event);
                ERROR("no event listener, subscription impossible");
@@ -233,8 +231,6 @@ int afb_xreq_unsubscribe(struct afb_xreq *xreq, struct afb_event_x2 *event)
                ERROR("request replied, unsubscription impossible");
                errno = EINVAL;
        } else {
-               if (xreq->listener)
-                       return afb_evt_event_x2_remove_watch(xreq->listener, event);
                if (xreq->queryitf->unsubscribe)
                        return xreq->queryitf->unsubscribe(xreq, event);
                ERROR("no event listener, unsubscription impossible");
index f1945a0..5b01457 100644 (file)
@@ -59,7 +59,6 @@ struct afb_xreq
        int hookflags;                  /**< flags for hooking */
        int hookindex;                  /**< hook index of the request if hooked */
 #endif
-       struct afb_evt_listener *listener; /**< event listener for the request */
        struct afb_cred *cred;          /**< client credential if revelant */
        struct afb_xreq *caller;        /**< caller request if any */
 };