s3/libsmb: Generalise cli_state in smb2 write calls
[mat/samba.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 smbXcli_conn *conn,
50         uint32_t timeout_msec,
51         struct smbXcli_session *session,
52         uint32_t tcon_id,
53         const char *filename,
54         uint8_t  oplock_level,          /* SMB2_OPLOCK_LEVEL_* */
55         uint32_t impersonation_level,   /* SMB2_IMPERSONATION_* */
56         uint32_t desired_access,
57         uint32_t file_attributes,
58         uint32_t share_access,
59         uint32_t create_disposition,
60         uint32_t create_options,
61         struct smb2_create_blobs *blobs);
62 NTSTATUS smb2cli_create_recv(struct tevent_req *req,
63                              uint64_t *fid_persistent,
64                              uint64_t *fid_volatile);
65 NTSTATUS smb2cli_create(struct smbXcli_conn *conn,
66                         uint32_t timeout_msec,
67                         struct smbXcli_session *session,
68                         uint32_t tcon_id,
69                         const char *filename,
70                         uint8_t  oplock_level,       /* SMB2_OPLOCK_LEVEL_* */
71                         uint32_t impersonation_level, /* SMB2_IMPERSONATION_* */
72                         uint32_t desired_access,
73                         uint32_t file_attributes,
74                         uint32_t share_access,
75                         uint32_t create_disposition,
76                         uint32_t create_options,
77                         struct smb2_create_blobs *blobs,
78                         uint64_t *fid_persistent,
79                         uint64_t *fid_volatile);
80
81 struct tevent_req *smb2cli_close_send(TALLOC_CTX *mem_ctx,
82                                       struct tevent_context *ev,
83                                       struct smbXcli_conn *conn,
84                                       uint32_t timeout_msec,
85                                       struct smbXcli_session *session,
86                                       uint32_t tcon_id,
87                                       uint16_t flags,
88                                       uint64_t fid_persistent,
89                                       uint64_t fid_volatile);
90 NTSTATUS smb2cli_close_recv(struct tevent_req *req);
91 NTSTATUS smb2cli_close(struct smbXcli_conn *conn,
92                        uint32_t timeout_msec,
93                        struct smbXcli_session *session,
94                        uint32_t tcon_id,
95                        uint16_t flags,
96                        uint64_t fid_persistent,
97                        uint64_t fid_volatile);
98
99 struct tevent_req *smb2cli_flush_send(TALLOC_CTX *mem_ctx,
100                                       struct tevent_context *ev,
101                                       struct smbXcli_conn *conn,
102                                       uint32_t timeout_msec,
103                                       struct smbXcli_session *session,
104                                       uint32_t tcon_id,
105                                       uint64_t fid_persistent,
106                                       uint64_t fid_volatile);
107 NTSTATUS smb2cli_flush_recv(struct tevent_req *req);
108 NTSTATUS smb2cli_flush(struct smbXcli_conn *conn,
109                        uint32_t timeout_msec,
110                        struct smbXcli_session *session,
111                        uint32_t tcon_id,
112                        uint64_t fid_persistent,
113                        uint64_t fid_volatile);
114
115 struct tevent_req *smb2cli_read_send(TALLOC_CTX *mem_ctx,
116                                      struct tevent_context *ev,
117                                      struct smbXcli_conn *conn,
118                                      uint32_t timeout_msec,
119                                      struct smbXcli_session *session,
120                                      uint32_t tcon_id,
121                                      uint32_t length,
122                                      uint64_t offset,
123                                      uint64_t fid_persistent,
124                                      uint64_t fid_volatile,
125                                      uint64_t minimum_count,
126                                      uint64_t remaining_bytes);
127 NTSTATUS smb2cli_read_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
128                            uint8_t **data, uint32_t *data_length);
129 NTSTATUS smb2cli_read(struct smbXcli_conn *conn,
130                       uint32_t timeout_msec,
131                       struct smbXcli_session *session,
132                       uint32_t tcon_id,
133                       uint32_t length,
134                       uint64_t offset,
135                       uint64_t fid_persistent,
136                       uint64_t fid_volatile,
137                       uint64_t minimum_count,
138                       uint64_t remaining_bytes,
139                       TALLOC_CTX *mem_ctx,
140                       uint8_t **data,
141                       uint32_t *data_length);
142
143 struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
144                                       struct tevent_context *ev,
145                                       struct smbXcli_conn *conn,
146                                       uint32_t timeout_msec,
147                                       struct smbXcli_session *session,
148                                       uint32_t tcon_id,
149                                       uint32_t length,
150                                       uint64_t offset,
151                                       uint64_t fid_persistent,
152                                       uint64_t fid_volatile,
153                                       uint32_t remaining_bytes,
154                                       uint32_t flags,
155                                       const uint8_t *data);
156 NTSTATUS smb2cli_write_recv(struct tevent_req *req);
157 NTSTATUS smb2cli_write(struct smbXcli_conn *conn,
158                        uint32_t timeout_msec,
159                        struct smbXcli_session *session,
160                        uint32_t tcon_id,
161                        uint32_t length,
162                        uint64_t offset,
163                        uint64_t fid_persistent,
164                        uint64_t fid_volatile,
165                        uint32_t remaining_bytes,
166                        uint32_t flags,
167                        const uint8_t *data);
168
169 struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
170                                                 struct tevent_context *ev,
171                                                 struct smbXcli_conn *conn,
172                                                 uint32_t timeout_msec,
173                                                 struct smbXcli_session *session,
174                                                 uint32_t tcon_id,
175                                                 uint8_t level,
176                                                 uint8_t flags,
177                                                 uint32_t file_index,
178                                                 uint64_t fid_persistent,
179                                                 uint64_t fid_volatile,
180                                                 const char *mask,
181                                                 uint32_t outbuf_len);
182 NTSTATUS smb2cli_query_directory_recv(struct tevent_req *req,
183                                       TALLOC_CTX *mem_ctx,
184                                       uint8_t **data,
185                                       uint32_t *data_length);
186 NTSTATUS smb2cli_query_directory(struct smbXcli_conn *conn,
187                                  uint32_t timeout_msec,
188                                  struct smbXcli_session *session,
189                                  uint32_t tcon_id,
190                                  uint8_t level,
191                                  uint8_t flags,
192                                  uint32_t file_index,
193                                  uint64_t fid_persistent,
194                                  uint64_t fid_volatile,
195                                  const char *mask,
196                                  uint32_t outbuf_len,
197                                  TALLOC_CTX *mem_ctx,
198                                  uint8_t **data,
199                                  uint32_t *data_length);
200
201 struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
202                                       struct tevent_context *ev,
203                                       struct smbXcli_conn *conn,
204                                       uint32_t timeout_msec,
205                                       struct smbXcli_session *session,
206                                       uint32_t tcon_id,
207                                       uint64_t in_fid_persistent,
208                                       uint64_t in_fid_volatile,
209                                       uint32_t in_ctl_code,
210                                       uint32_t in_max_input_length,
211                                       const DATA_BLOB *in_input_buffer,
212                                       uint32_t in_max_output_length,
213                                       const DATA_BLOB *in_output_buffer,
214                                       uint32_t in_flags);
215 NTSTATUS smb2cli_ioctl_recv(struct tevent_req *req,
216                             TALLOC_CTX *mem_ctx,
217                             DATA_BLOB *out_input_buffer,
218                             DATA_BLOB *out_output_buffer);
219 NTSTATUS smb2cli_ioctl(struct smbXcli_conn *conn,
220                        uint32_t timeout_msec,
221                        struct smbXcli_session *session,
222                        uint32_t tcon_id,
223                        uint64_t in_fid_persistent,
224                        uint64_t in_fid_volatile,
225                        uint32_t in_ctl_code,
226                        uint32_t in_max_input_length,
227                        const DATA_BLOB *in_input_buffer,
228                        uint32_t in_max_output_length,
229                        const DATA_BLOB *in_output_buffer,
230                        uint32_t in_flags,
231                        TALLOC_CTX *mem_ctx,
232                        DATA_BLOB *out_input_buffer,
233                        DATA_BLOB *out_output_buffer);
234
235 struct tevent_req *smb2cli_query_info_send(TALLOC_CTX *mem_ctx,
236                                            struct tevent_context *ev,
237                                            struct smbXcli_conn *conn,
238                                            uint32_t timeout_msec,
239                                            struct smbXcli_session *session,
240                                            uint32_t tcon_id,
241                                            uint8_t in_info_type,
242                                            uint8_t in_file_info_class,
243                                            uint32_t in_max_output_length,
244                                            const DATA_BLOB *in_input_buffer,
245                                            uint32_t in_additional_info,
246                                            uint32_t in_flags,
247                                            uint64_t in_fid_persistent,
248                                            uint64_t in_fid_volatile);
249 NTSTATUS smb2cli_query_info_recv(struct tevent_req *req,
250                                  TALLOC_CTX *mem_ctx,
251                                  DATA_BLOB *out_output_buffer);
252 NTSTATUS smb2cli_query_info(struct smbXcli_conn *conn,
253                             uint32_t timeout_msec,
254                             struct smbXcli_session *session,
255                             uint32_t tcon_id,
256                             uint8_t in_info_type,
257                             uint8_t in_file_info_class,
258                             uint32_t in_max_output_length,
259                             const DATA_BLOB *in_input_buffer,
260                             uint32_t in_additional_info,
261                             uint32_t in_flags,
262                             uint64_t in_fid_persistent,
263                             uint64_t in_fid_volatile,
264                             TALLOC_CTX *mem_ctx,
265                             DATA_BLOB *out_output_buffer);
266
267 struct tevent_req *smb2cli_set_info_send(TALLOC_CTX *mem_ctx,
268                                          struct tevent_context *ev,
269                                          struct smbXcli_conn *conn,
270                                          uint32_t timeout_msec,
271                                          struct smbXcli_session *session,
272                                          uint32_t tcon_id,
273                                          uint8_t in_info_type,
274                                          uint8_t in_file_info_class,
275                                          const DATA_BLOB *in_input_buffer,
276                                          uint32_t in_additional_info,
277                                          uint64_t in_fid_persistent,
278                                          uint64_t in_fid_volatile);
279 NTSTATUS smb2cli_set_info_recv(struct tevent_req *req);
280 NTSTATUS smb2cli_set_info(struct smbXcli_conn *conn,
281                             uint32_t timeout_msec,
282                             struct smbXcli_session *session,
283                             uint32_t tcon_id,
284                             uint8_t in_info_type,
285                             uint8_t in_file_info_class,
286                             const DATA_BLOB *in_input_buffer,
287                             uint32_t in_additional_info,
288                             uint64_t in_fid_persistent,
289                             uint64_t in_fid_volatile);
290
291 #endif /* __SMB2CLI_H__ */