X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-xreq.h;h=e2b09db0d1873cf0307e84e6f83f32321627bc7f;hb=af06c82a63166d0d3fbdc26ae50607a6231d42eb;hp=d78d88fbefdaa0e00db0648543d5e1729fd2058c;hpb=59cd34b59853f6a47e756d7ab5bc0329f40a471c;p=src%2Fapp-framework-binder.git diff --git a/src/afb-xreq.h b/src/afb-xreq.h index d78d88fb..e2b09db0 100644 --- a/src/afb-xreq.h +++ b/src/afb-xreq.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 "IoT.bzh" + * Copyright (C) 2017, 2018 "IoT.bzh" * Author José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -18,6 +18,7 @@ #pragma once #include +#include #include "afb-context.h" struct json_object; @@ -30,8 +31,6 @@ struct afb_eventid; 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 { @@ -60,8 +59,6 @@ struct afb_xreq struct afb_request request; /**< exported request */ struct afb_context context; /**< context of the request */ struct afb_apiset *apiset; /**< apiset of the xreq */ - const char *api; /**< the requested API */ - const char *verb; /**< the requested VERB */ struct json_object *json; /**< the json object (or NULL) */ const struct afb_xreq_query_itf *queryitf; /**< interface of xreq implmentation functions */ int refcount; /**< current ref count */ @@ -81,7 +78,7 @@ struct afb_xreq * @param ptr the pointer to an element 'field' * @return the pointer to the structure that contains the 'field' at address 'ptr' */ -#define CONTAINER_OF(type,field,ptr) ((type*)(((intptr_t)(ptr))-((intptr_t)&(((type*)NULL)->field)))) +#define CONTAINER_OF(type,field,ptr) ((type*)(((char*)(ptr))-((char*)&(((type*)NULL)->field)))) /** * Macro for retrieve the pointer of a structure of 'type' having a field named "xreq" @@ -150,3 +147,22 @@ extern void afb_xreq_process(struct afb_xreq *xreq, struct afb_apiset *apiset); extern void afb_xreq_call_verb_v1(struct afb_xreq *xreq, const struct afb_verb_desc_v1 *verb); extern void afb_xreq_call_verb_v2(struct afb_xreq *xreq, const struct afb_verb_v2 *verb); extern void afb_xreq_call_verb_vdyn(struct afb_xreq *xreq, const struct afb_api_dyn_verb *verb); + +/******************************************************************************/ + +static inline struct afb_req xreq_to_req(struct afb_xreq *xreq) +{ + return (struct afb_req){ .itf = xreq->request.itf, .closure = &xreq->request }; +} + +static inline struct afb_request *xreq_to_request(struct afb_xreq *xreq) +{ + return &xreq->request; +} + +static inline struct afb_xreq *xreq_from_request(struct afb_request *request) +{ + return CONTAINER_OF(struct afb_xreq, request, request); +} + +