s3-libsmb: Generalise cli_state in smb2 read calls
[obnox/samba/samba-obnox.git] / source3 / libsmb / smb2cli.h
1 /*
2    Unix SMB/CIFS implementation.
3    smb2 client routines
4    Copyright (C) Volker Lendecke 2011
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef __SMB2CLI_H__
21 #define __SMB2CLI_H__
22
23 struct smbXcli_conn;
24 struct smbXcli_session;
25 struct cli_state;
26
27 struct tevent_req *smb2cli_logoff_send(TALLOC_CTX *mem_ctx,
28                                        struct tevent_context *ev,
29                                        struct cli_state *cli);
30 NTSTATUS smb2cli_logoff_recv(struct tevent_req *req);
31 NTSTATUS smb2cli_logoff(struct cli_state *cli);
32
33 struct tevent_req *smb2cli_tcon_send(TALLOC_CTX *mem_ctx,
34                                      struct tevent_context *ev,
35                                      struct cli_state *cli,
36                                      const char *share);
37 NTSTATUS smb2cli_tcon_recv(struct tevent_req *req);
38 NTSTATUS smb2cli_tcon(struct cli_state *cli, const char *share);
39
40 struct tevent_req *smb2cli_tdis_send(TALLOC_CTX *mem_ctx,
41                                      struct tevent_context *ev,
42                                      struct cli_state *cli);
43 NTSTATUS smb2cli_tdis_recv(struct tevent_req *req);
44 NTSTATUS smb2cli_tdis(struct cli_state *cli);
45
46 struct tevent_req *smb2cli_create_send(
47         TALLOC_CTX *mem_ctx,
48         struct tevent_context *ev,
49         struct cli_state *cli,
50         const char *filename,
51         uint8_t  oplock_level,          /* SMB2_OPLOCK_LEVEL_* */
52         uint32_t impersonation_level,   /* SMB2_IMPERSONATION_* */
53         uint32_t desired_access,
54         uint32_t file_attributes,
55         uint32_t share_access,
56         uint32_t create_disposition,
57         uint32_t create_options,
58         struct smb2_create_blobs *blobs);
59 NTSTATUS smb2cli_create_recv(struct tevent_req *req,
60                              uint64_t *fid_persistent,
61                              uint64_t *fid_volatile);
62 NTSTATUS smb2cli_create(struct cli_state *cli,
63                         const char *filename,
64                         uint8_t  oplock_level,       /* SMB2_OPLOCK_LEVEL_* */
65                         uint32_t impersonation_level, /* SMB2_IMPERSONATION_* */
66                         uint32_t desired_access,
67                         uint32_t file_attributes,
68                         uint32_t share_access,
69                         uint32_t create_disposition,
70                         uint32_t create_options,
71                         struct smb2_create_blobs *blobs,
72                         uint64_t *fid_persistent,
73                         uint64_t *fid_volatile);
74
75 struct tevent_req *smb2cli_close_send(TALLOC_CTX *mem_ctx,
76                                       struct tevent_context *ev,
77                                       struct cli_state *cli,
78                                       uint16_t flags,
79                                       uint64_t fid_persistent,
80                                       uint64_t fid_volatile);
81 NTSTATUS smb2cli_close_recv(struct tevent_req *req);
82 NTSTATUS smb2cli_close(struct cli_state *cli, uint16_t flags,
83                         uint64_t fid_persistent, uint64_t fid_volatile);
84
85 struct tevent_req *smb2cli_flush_send(TALLOC_CTX *mem_ctx,
86                                       struct tevent_context *ev,
87                                       struct cli_state *cli,
88                                       uint64_t fid_persistent,
89                                       uint64_t fid_volatile);
90 NTSTATUS smb2cli_flush_recv(struct tevent_req *req);
91 NTSTATUS smb2cli_flush(struct cli_state *cli,
92                        uint64_t fid_persistent,
93                        uint64_t fid_volatile);
94
95 struct tevent_req *smb2cli_read_send(TALLOC_CTX *mem_ctx,
96                                      struct tevent_context *ev,
97                                      struct smbXcli_conn *conn,
98                                      uint32_t timeout_msec,
99                                      struct smbXcli_session *session,
100                                      uint32_t tcon_id,
101                                      uint32_t length,
102                                      uint64_t offset,
103                                      uint64_t fid_persistent,
104                                      uint64_t fid_volatile,
105                                      uint64_t minimum_count,
106                                      uint64_t remaining_bytes);
107 NTSTATUS smb2cli_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
108                            uint8_t **data, uint32_t *data_length);
109 NTSTATUS smb2cli_read(struct smbXcli_conn *conn,
110                       uint32_t timeout_msec,
111                       struct smbXcli_session *session,
112                       uint32_t tcon_id,
113                       uint32_t length,
114                       uint64_t offset,
115                       uint64_t fid_persistent,
116                       uint64_t fid_volatile,
117                       uint64_t minimum_count,
118                       uint64_t remaining_bytes,
119                       TALLOC_CTX *mem_ctx,
120                       uint8_t **data,
121                       uint32_t *data_length);
122
123 struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
124                                       struct tevent_context *ev,
125                                       struct cli_state *cli,
126                                       uint32_t length,
127                                       uint64_t offset,
128                                       uint64_t fid_persistent,
129                                       uint64_t fid_volatile,
130                                       uint32_t remaining_bytes,
131                                       uint32_t flags,
132                                       const uint8_t *data);
133 NTSTATUS smb2cli_write_recv(struct tevent_req *req);
134 NTSTATUS smb2cli_write(struct cli_state *cli,
135                        uint32_t length,
136                        uint64_t offset,
137                        uint64_t fid_persistent,
138                        uint64_t fid_volatile,
139                        uint32_t remaining_bytes,
140                        uint32_t flags,
141                        const uint8_t *data);
142
143 struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
144                                                 struct tevent_context *ev,
145                                                 struct cli_state *cli,
146                                                 uint8_t level,
147                                                 uint8_t flags,
148                                                 uint32_t file_index,
149                                                 uint64_t fid_persistent,
150                                                 uint64_t fid_volatile,
151                                                 const char *mask,
152                                                 uint32_t outbuf_len);
153 NTSTATUS smb2cli_query_directory_recv(struct tevent_req *req,
154                                       TALLOC_CTX *mem_ctx,
155                                       uint8_t **data,
156                                       uint32_t *data_length);
157 NTSTATUS smb2cli_query_directory(struct cli_state *cli,
158                                  uint8_t level,
159                                  uint8_t flags,
160                                  uint32_t file_index,
161                                  uint64_t fid_persistent,
162                                  uint64_t fid_volatile,
163                                  const char *mask,
164                                  uint32_t outbuf_len,
165                                  TALLOC_CTX *mem_ctx,
166                                  uint8_t **data,
167                                  uint32_t *data_length);
168
169 struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
170                                       struct tevent_context *ev,
171                                       struct cli_state *cli,
172                                       uint64_t in_fid_persistent,
173                                       uint64_t in_fid_volatile,
174                                       uint32_t in_ctl_code,
175                                       uint32_t in_max_input_length,
176                                       const DATA_BLOB *in_input_buffer,
177                                       uint32_t in_max_output_length,
178                                       const DATA_BLOB *in_output_buffer,
179                                       uint32_t in_flags);
180 NTSTATUS smb2cli_ioctl_recv(struct tevent_req *req,
181                             TALLOC_CTX *mem_ctx,
182                             DATA_BLOB *out_input_buffer,
183                             DATA_BLOB *out_output_buffer);
184 NTSTATUS smb2cli_ioctl(struct cli_state *cli,
185                        uint64_t in_fid_persistent,
186                        uint64_t in_fid_volatile,
187                        uint32_t in_ctl_code,
188                        uint32_t in_max_input_length,
189                        const DATA_BLOB *in_input_buffer,
190                        uint32_t in_max_output_length,
191                        const DATA_BLOB *in_output_buffer,
192                        uint32_t in_flags,
193                        TALLOC_CTX *mem_ctx,
194                        DATA_BLOB *out_input_buffer,
195                        DATA_BLOB *out_output_buffer);
196
197 struct tevent_req *smb2cli_query_info_send(TALLOC_CTX *mem_ctx,
198                                            struct tevent_context *ev,
199                                            struct smbXcli_conn *conn,
200                                            uint32_t timeout_msec,
201                                            struct smbXcli_session *session,
202                                            uint32_t tcon_id,
203                                            uint8_t in_info_type,
204                                            uint8_t in_file_info_class,
205                                            uint32_t in_max_output_length,
206                                            const DATA_BLOB *in_input_buffer,
207                                            uint32_t in_additional_info,
208                                            uint32_t in_flags,
209                                            uint64_t in_fid_persistent,
210                                            uint64_t in_fid_volatile);
211 NTSTATUS smb2cli_query_info_recv(struct tevent_req *req,
212                                  TALLOC_CTX *mem_ctx,
213                                  DATA_BLOB *out_output_buffer);
214 NTSTATUS smb2cli_query_info(struct smbXcli_conn *conn,
215                             uint32_t timeout_msec,
216                             struct smbXcli_session *session,
217                             uint32_t tcon_id,
218                             uint8_t in_info_type,
219                             uint8_t in_file_info_class,
220                             uint32_t in_max_output_length,
221                             const DATA_BLOB *in_input_buffer,
222                             uint32_t in_additional_info,
223                             uint32_t in_flags,
224                             uint64_t in_fid_persistent,
225                             uint64_t in_fid_volatile,
226                             TALLOC_CTX *mem_ctx,
227                             DATA_BLOB *out_output_buffer);
228
229 struct tevent_req *smb2cli_set_info_send(TALLOC_CTX *mem_ctx,
230                                          struct tevent_context *ev,
231                                          struct smbXcli_conn *conn,
232                                          uint32_t timeout_msec,
233                                          struct smbXcli_session *session,
234                                          uint32_t tcon_id,
235                                          uint8_t in_info_type,
236                                          uint8_t in_file_info_class,
237                                          const DATA_BLOB *in_input_buffer,
238                                          uint32_t in_additional_info,
239                                          uint64_t in_fid_persistent,
240                                          uint64_t in_fid_volatile);
241 NTSTATUS smb2cli_set_info_recv(struct tevent_req *req);
242 NTSTATUS smb2cli_set_info(struct smbXcli_conn *conn,
243                             uint32_t timeout_msec,
244                             struct smbXcli_session *session,
245                             uint32_t tcon_id,
246                             uint8_t in_info_type,
247                             uint8_t in_file_info_class,
248                             const DATA_BLOB *in_input_buffer,
249                             uint32_t in_additional_info,
250                             uint64_t in_fid_persistent,
251                             uint64_t in_fid_volatile);
252
253 #endif /* __SMB2CLI_H__ */