+
+ send:
+ if (!srv_send_smb(
+ smbd_server_fd(), (char *)req->outbuf,
+ true, req->seqnum+1,
+ IS_CONN_ENCRYPTED(req->conn) || req->encrypted,
+ &req->pcd)) {
+ exit_server_cleanly("api_dcerpc_cmd_write_done: "
+ "srv_send_smb failed.");
+ }
+ TALLOC_FREE(req);
+}
+
+static void api_dcerpc_cmd_read_done(struct tevent_req *subreq)
+{
+ struct smb_request *req = tevent_req_callback_data(
+ subreq, struct smb_request);
+ struct dcerpc_cmd_state *state = talloc_get_type_abort(
+ req->async_priv, struct dcerpc_cmd_state);
+ NTSTATUS status;
+ ssize_t nread;
+ bool is_data_outstanding;
+
+ status = np_read_recv(subreq, &nread, &is_data_outstanding);
+ TALLOC_FREE(subreq);
+
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(10, ("Could not read from to pipe: %s\n",
+ nt_errstr(status)));
+ reply_nterror(req, status);
+
+ if (!srv_send_smb(smbd_server_fd(), (char *)req->outbuf,
+ true, req->seqnum+1,
+ IS_CONN_ENCRYPTED(req->conn)
+ ||req->encrypted, &req->pcd)) {
+ exit_server_cleanly("api_dcerpc_cmd_read_done: "
+ "srv_send_smb failed.");
+ }
+ TALLOC_FREE(req);
+ return;
+ }
+
+ send_trans_reply(req->conn, req, NULL, 0, (char *)state->data, nread,
+ is_data_outstanding);
+ TALLOC_FREE(req);