aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/afb-ws-json1.c19
-rw-r--r--src/afb-xreq.c4
-rw-r--r--src/afb-xreq.h1
3 files changed, 18 insertions, 6 deletions
diff --git a/src/afb-ws-json1.c b/src/afb-ws-json1.c
index 23160fc2..c7991934 100644
--- a/src/afb-ws-json1.c
+++ b/src/afb-ws-json1.c
@@ -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);
+}
+
diff --git a/src/afb-xreq.c b/src/afb-xreq.c
index 790a384f..17a603c3 100644
--- a/src/afb-xreq.c
+++ b/src/afb-xreq.c
@@ -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");
diff --git a/src/afb-xreq.h b/src/afb-xreq.h
index f1945a02..5b01457a 100644
--- a/src/afb-xreq.h
+++ b/src/afb-xreq.h
@@ -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 */
};