Make struct tevent_req opaque
[kai/samba-autobuild/.git] / lib / tevent / tevent.h
index 8c119ffb8ed032fcdaa1a716d38148fb526a6c92..5089d18ec21381ccf1179894dc99e22e72d67e77 100644 (file)
@@ -183,98 +183,22 @@ enum tevent_req_state {
  * finished. This can happen while the completion function is called.
  */
 
-struct tevent_req {
-       /**
-        * @brief What to do on completion
-        *
-        * This is used for the user of an async request, fn is called when
-        * the request completes, either successfully or with an error.
-        */
-       struct {
-               /**
-                * @brief Completion function
-                * Completion function, to be filled by the API user
-                */
-               void (*fn)(struct tevent_req *);
-               /**
-                * @brief Private data for the completion function
-                */
-               void *private_data;
-       } async;
+struct tevent_req;
 
-       /**
-        * @brief Private state pointer for the actual implementation
-        *
-        * The implementation doing the work for the async request needs a
-        * current state like for example a fd event. The user of an async
-        * request should not touch this.
-        */
-       void *private_state;
+typedef void (*tevent_req_fn)(struct tevent_req *);
 
-       /**
-        * @brief A function to overwrite the default print function
-        *
-        * The implementation doing the work may want to imeplement a
-        * custom function to print the text representation of the async
-        * request.
-        */
-       char *(*private_print)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+void tevent_req_set_callback(struct tevent_req *req, tevent_req_fn fn, void *pvt);
+void *_tevent_req_callback_data(struct tevent_req *req);
+void *_tevent_req_data(struct tevent_req *req);
 
-       /**
-        * @brief Internal state of the request
-        *
-        * Callers should only access this via functions and never directly.
-        */
-       struct {
-               /**
-                * @brief The talloc type of the private_state pointer
-                *
-                * This is filled by the tevent_req_create() macro.
-                *
-                * This for debugging only.
-                */
-               const char *private_type;
-
-               /**
-                * @brief The location where the request was created
-                *
-                * This uses the __location__ macro via the tevent_req_create()
-                * macro.
-                *
-                * This for debugging only.
-                */
-               const char *location;
-
-               /**
-                * @brief The external state - will be queried by the caller
-                *
-                * While the async request is being processed, state will remain in
-                * TEVENT_REQ_IN_PROGRESS. A request is finished if
-                * req->state>=TEVENT_REQ_DONE.
-                */
-               enum tevent_req_state state;
-
-               /**
-                * @brief status code when finished
-                *
-                * This status can be queried in the async completion function. It
-                * will be set to 0 when everything went fine.
-                */
-               uint64_t error;
-
-               /**
-                * @brief the timer event if tevent_req_post was used
-                *
-                */
-               struct tevent_timer *trigger;
-
-               /**
-                * @brief the timer event if tevent_req_set_timeout was used
-                *
-                */
-               struct tevent_timer *timer;
-       } internal;
-};
+#define tevent_req_callback_data(_req, _type) \
+       talloc_get_type_abort(_tevent_req_callback_data(_req), _type)
+#define tevent_req_data(_req, _type) \
+       talloc_get_type_abort(_tevent_req_data(_req), _type)
+
+typedef char *(*tevent_req_print_fn)(struct tevent_req *, TALLOC_CTX *);
+
+void tevent_req_set_print_fn(struct tevent_req *req, tevent_req_print_fn fn);
 
 char *tevent_req_default_print(struct tevent_req *req, TALLOC_CTX *mem_ctx);