STEP01: librpc/rpc/dcerpc_connection.c incoming.req with tevent_req_defer_callback()
authorStefan Metzmacher <metze@samba.org>
Wed, 22 Jan 2014 10:14:17 +0000 (11:14 +0100)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Jun 2019 10:45:39 +0000 (12:45 +0200)
librpc/rpc/dcerpc_connection.c

index 25d93e5da36b55f9cced390abe05f4300e3dce7b..6e5440ad65d560336500d467cc8556b17622b0d9 100644 (file)
@@ -105,8 +105,8 @@ struct dcerpc_call {
        struct dcerpc_presentation *pres;
 
        struct {
-               void *private_data;
-               NTSTATUS (*handler)(void *private_data,
+               struct tevent_req *req;
+               NTSTATUS (*handler)(struct tevent_req *req,
                                    struct ncacn_packet *pkt,
                                    DATA_BLOB frag);
        } incoming;
@@ -967,7 +967,7 @@ static void dcerpc_connection_loop(struct tevent_req *subreq)
                // reassemble and return
        }
 
-       error = call->incoming.handler(call->incoming.private_data, pkt, pdu);
+       error = call->incoming.handler(call->incoming.req, pkt, pdu);
        TALLOC_FREE(subreq);
        if (!NT_STATUS_IS_OK(error)) {
                // disconnect and notify pending calls
@@ -1024,7 +1024,7 @@ static void dcerpc_do_bind_cleanup(struct tevent_req *req,
 static void dcerpc_do_bind_sec_next(struct tevent_req *subreq);
 static void dcerpc_do_bind_out_frag_next(struct tevent_req *subreq);
 
-static NTSTATUS dcerpc_do_bind_handle_in_frag(void *private_data,
+static NTSTATUS dcerpc_do_bind_handle_in_frag(struct tevent_req *req,
                                              struct ncacn_packet *pkt,
                                              DATA_BLOB frag);
 
@@ -1053,12 +1053,11 @@ struct tevent_req *dcerpc_do_bind_send(TALLOC_CTX *mem_ctx,
        state->num_pres = num_pres;
        state->pres = pres;
 
-       state->call->incoming.private_data = req;
+       state->call->incoming.req = req;
        state->call->incoming.handler = dcerpc_do_bind_handle_in_frag;
        DLIST_ADD_END(state->conn->calls.list, state->call, NULL);
-
-       tevent_req_set_cleanup_fn(req, dcerpc_do_bind_cleanup);
        tevent_req_defer_callback(req, ev);
+       tevent_req_set_cleanup_fn(req, dcerpc_do_bind_cleanup);
 
        if (state->sec && state->sec->auth_type != DCERPC_AUTH_TYPE_NONE) {
                subreq = gensec_update_send(state, ev,
@@ -1537,13 +1536,10 @@ static void dcerpc_do_bind_out_frag_trans_wait2(struct tevent_req *subreq)
        /* we need to wait for incoming pdus */
 }
 
-static NTSTATUS dcerpc_do_bind_handle_in_frag(void *private_data,
-                                                struct ncacn_packet *pkt,
-                                                DATA_BLOB frag)
+static NTSTATUS dcerpc_do_bind_handle_in_frag(struct tevent_req *req,
+                                             struct ncacn_packet *pkt,
+                                             DATA_BLOB frag)
 {
-       struct tevent_req *req =
-               talloc_get_type_abort(private_data,
-               struct tevent_req);
        struct dcerpc_do_bind_state *state =
                tevent_req_data(req,
                struct dcerpc_do_bind_state);
@@ -1852,7 +1848,7 @@ static void dcerpc_do_request_verification_trailer(struct tevent_req *req);
 static void dcerpc_do_request_out_frag_next(struct tevent_req *req,
                                            void *private_data);
 
-static NTSTATUS dcerpc_do_request_handle_in_frag(void *private_data,
+static NTSTATUS dcerpc_do_request_handle_in_frag(struct tevent_req *req,
                                                 struct ncacn_packet *pkt,
                                                 DATA_BLOB frag);
 
@@ -1887,12 +1883,11 @@ struct tevent_req *dcerpc_do_request_send(TALLOC_CTX *mem_ctx,
                return tevent_req_post(req, ev);
        }
 
-       state->call->incoming.private_data = req;
+       state->call->incoming.req = req;
        state->call->incoming.handler = dcerpc_do_request_handle_in_frag;
        DLIST_ADD_END(state->conn->calls.list, state->call, NULL);
-
-       tevent_req_set_cleanup_fn(req, dcerpc_do_request_cleanup);
        tevent_req_defer_callback(req, ev);
+       tevent_req_set_cleanup_fn(req, dcerpc_do_request_cleanup);
 
        ok = tevent_queue_add(state->conn->calls.out_queue,
                              state->ev,
@@ -2459,13 +2454,10 @@ static void dcerpc_do_request_out_frag_trans_wait2(struct tevent_req *subreq)
        /* we need to wait for incoming pdus */
 }
 
-static NTSTATUS dcerpc_do_request_handle_in_frag(void *private_data,
+static NTSTATUS dcerpc_do_request_handle_in_frag(struct tevent_req *req,
                                                 struct ncacn_packet *pkt,
                                                 DATA_BLOB frag)
 {
-       struct tevent_req *req =
-               talloc_get_type_abort(private_data,
-               struct tevent_req);
        struct dcerpc_do_request_state *state =
                tevent_req_data(req,
                struct dcerpc_do_request_state);