afb-xreq: prepare futur afb_request
authorJosé Bollo <jose.bollo@iot.bzh>
Wed, 20 Sep 2017 09:12:36 +0000 (11:12 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Mon, 9 Oct 2017 12:08:30 +0000 (14:08 +0200)
Change-Id: I0986113475f354bccdbc711e74a63c9ca809c5ed
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
include/afb/afb-req-common.h
src/afb-xreq.c
src/afb-xreq.h

index 7d4473c..1bb017e 100644 (file)
@@ -89,7 +89,7 @@ struct afb_req
 };
 
 /*
- * Checks wether the request 'req' is valid or not.
+ * Checks whether the request 'req' is valid or not.
  *
  * Returns 0 if not valid or 1 if valid.
  */
index bc63e0d..842ff19 100644 (file)
@@ -60,12 +60,9 @@ static inline void xreq_unref(struct afb_xreq *xreq)
 
 /******************************************************************************/
 
-extern const struct afb_req_itf xreq_itf;
-extern const struct afb_req_itf xreq_hooked_itf;
-
 static inline struct afb_req to_req(struct afb_xreq *xreq)
 {
-       return (struct afb_req){ .itf = xreq->hookflags ? &xreq_hooked_itf : &xreq_itf, .closure = xreq };
+       return (struct afb_req){ .itf = xreq->itf, .closure = xreq };
 }
 
 /******************************************************************************/
@@ -927,6 +924,7 @@ void afb_xreq_call_verb_v2(struct afb_xreq *xreq, const struct afb_verb_v2 *verb
 void afb_xreq_init(struct afb_xreq *xreq, const struct afb_xreq_query_itf *queryitf)
 {
        memset(xreq, 0, sizeof *xreq);
+       xreq->itf = &xreq_hooked_itf; /* hook by default */
        xreq->refcount = 1;
        xreq->queryitf = queryitf;
 }
@@ -946,6 +944,8 @@ static void init_hooking(struct afb_xreq *xreq)
        afb_hook_init_xreq(xreq);
        if (xreq->hookflags)
                afb_hook_xreq_begin(xreq);
+       else
+               xreq->itf = &xreq_itf; /* unhook the interface */
 }
 
 /**
index ae71147..f7ca03b 100644 (file)
@@ -28,6 +28,8 @@ struct afb_event;
 struct afb_verb_desc_v1;
 struct afb_verb_v2;
 struct afb_req;
+struct afb_req_itf;
+struct afb_request;
 struct afb_stored_req;
 
 struct afb_xreq_query_itf {
@@ -53,6 +55,7 @@ struct afb_xreq_query_itf {
  */
 struct afb_xreq
 {
+       const struct afb_req_itf *itf;  /**< interface functions */
        struct afb_context context;     /**< context of the request */
        struct afb_apiset *apiset;      /**< apiset of the xreq */
        const char *api;                /**< the requested API */
@@ -62,7 +65,7 @@ struct afb_xreq
        int refcount;                   /**< current ref count */
        int replied;                    /**< is replied? */
        int hookflags;                  /**< flags for hooking */
-       int hookindex;                  /**< index for hooking */
+       int hookindex;                  /**< hook index of the request if hooked */
        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 */