2 Unix SMB/CIFS implementation.
4 composite request interfaces
6 Copyright (C) Andrew Tridgell 2005
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 this defines the structures associated with "composite"
25 requests. Composite requests are libcli requests that are internally
26 implemented as multiple async calls, but can be treated as a
27 single call via these composite calls. The composite calls are
28 particularly designed to be used in async applications.
29 you can also stack multiple level of composite call
33 a composite call moves between the following 3 states.
35 enum composite_state { COMPOSITE_STATE_INIT, /* we are creating the request */
36 COMPOSITE_STATE_IN_PROGRESS, /* the request is in the outgoing socket Q */
37 COMPOSITE_STATE_DONE, /* the request is received by the caller finished */
38 COMPOSITE_STATE_ERROR }; /* a packet or transport level error has occurred */
40 /* the context of one "composite" call */
41 struct composite_context {
42 /* the external state - will be queried by the caller */
43 enum composite_state state;
45 /* a private pointer for use by the composite function
49 /* status code when finished */
52 /* the event context we are using */
53 struct event_context *event_ctx;
55 /* information on what to do on completion */
57 void (*fn)(struct composite_context *);
65 struct smbcli_request;
67 struct nbt_name_request;
69 #include "libcli/composite/proto.h"