c20589ef835dd7aed61cfc490822246abf11574b
[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 cli_state *cli,
146                                       uint32_t length,
147                                       uint64_t offset,
148                                       uint64_t fid_persistent,
149                                       uint64_t fid_volatile,
150                                       uint32_t remaining_bytes,
151                                       uint32_t flags,
152                                       const uint8_t *data);
153 NTSTATUS smb2cli_write_recv(struct tevent_req *req);
154 NTSTATUS smb2cli_write(struct cli_state *cli,
155                        uint32_t length,
156                        uint64_t offset,
157                        uint64_t fid_persistent,
158                        uint64_t fid_volatile,
159                        uint32_t remaining_bytes,
160                        uint32_t flags,
161                        const uint8_t *data);
162
163 struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
164                                                 struct tevent_context *ev,
165                                                 struct cli_state *cli,
166                                                 uint8_t level,
167                                                 uint8_t flags,
168                                                 uint32_t file_index,
169                                                 uint64_t fid_persistent,
170                                                 uint64_t fid_volatile,
171                                                 const char *mask,
172                                                 uint32_t outbuf_len);
173 NTSTATUS smb2cli_query_directory_recv(struct tevent_req *req,
174                                       TALLOC_CTX *mem_ctx,
175                                       uint8_t **data,
176                                       uint32_t *data_length);
177 NTSTATUS smb2cli_query_directory(struct cli_state *cli,
178                                  uint8_t level,
179                                  uint8_t flags,
180                                  uint32_t file_index,
181                                  uint64_t fid_persistent,
182                                  uint64_t fid_volatile,
183                                  const char *mask,
184                                  uint32_t outbuf_len,
185                                  TALLOC_CTX *mem_ctx,
186                                  uint8_t **data,
187                                  uint32_t *data_length);
188
189 struct tevent_req *smb2cli_ioctl_send(TALLOC_CTX *mem_ctx,
190                                       struct tevent_context *ev,
191                                       struct cli_state *cli,
192                                       uint64_t in_fid_persistent,
193                                       uint64_t in_fid_volatile,
194                                       uint32_t in_ctl_code,
195                                       uint32_t in_max_input_length,
196                                       const DATA_BLOB *in_input_buffer,
197                                       uint32_t in_max_output_length,
198                                       const DATA_BLOB *in_output_buffer,
199                                       uint32_t in_flags);
200 NTSTATUS smb2cli_ioctl_recv(struct tevent_req *req,
201                             TALLOC_CTX *mem_ctx,
202                             DATA_BLOB *out_input_buffer,
203                             DATA_BLOB *out_output_buffer);
204 NTSTATUS smb2cli_ioctl(struct cli_state *cli,
205                        uint64_t in_fid_persistent,
206                        uint64_t in_fid_volatile,
207                        uint32_t in_ctl_code,
208                        uint32_t in_max_input_length,
209                        const DATA_BLOB *in_input_buffer,
210                        uint32_t in_max_output_length,
211                        const DATA_BLOB *in_output_buffer,
212                        uint32_t in_flags,
213                        TALLOC_CTX *mem_ctx,
214                        DATA_BLOB *out_input_buffer,
215                        DATA_BLOB *out_output_buffer);
216
217 struct tevent_req *smb2cli_query_info_send(TALLOC_CTX *mem_ctx,
218                                            struct tevent_context *ev,
219                                            struct smbXcli_conn *conn,
220                                            uint32_t timeout_msec,
221                                            struct smbXcli_session *session,
222                                            uint32_t tcon_id,
223                                            uint8_t in_info_type,
224                                            uint8_t in_file_info_class,
225                                            uint32_t in_max_output_length,
226                                            const DATA_BLOB *in_input_buffer,
227                                            uint32_t in_additional_info,
228                                            uint32_t in_flags,
229                                            uint64_t in_fid_persistent,
230                                            uint64_t in_fid_volatile);
231 NTSTATUS smb2cli_query_info_recv(struct tevent_req *req,
232                                  TALLOC_CTX *mem_ctx,
233                                  DATA_BLOB *out_output_buffer);
234 NTSTATUS smb2cli_query_info(struct smbXcli_conn *conn,
235                             uint32_t timeout_msec,
236                             struct smbXcli_session *session,
237                             uint32_t tcon_id,
238                             uint8_t in_info_type,
239                             uint8_t in_file_info_class,
240                             uint32_t in_max_output_length,
241                             const DATA_BLOB *in_input_buffer,
242                             uint32_t in_additional_info,
243                             uint32_t in_flags,
244                             uint64_t in_fid_persistent,
245                             uint64_t in_fid_volatile,
246                             TALLOC_CTX *mem_ctx,
247                             DATA_BLOB *out_output_buffer);
248
249 struct tevent_req *smb2cli_set_info_send(TALLOC_CTX *mem_ctx,
250                                          struct tevent_context *ev,
251                                          struct smbXcli_conn *conn,
252                                          uint32_t timeout_msec,
253                                          struct smbXcli_session *session,
254                                          uint32_t tcon_id,
255                                          uint8_t in_info_type,
256                                          uint8_t in_file_info_class,
257                                          const DATA_BLOB *in_input_buffer,
258                                          uint32_t in_additional_info,
259                                          uint64_t in_fid_persistent,
260                                          uint64_t in_fid_volatile);
261 NTSTATUS smb2cli_set_info_recv(struct tevent_req *req);
262 NTSTATUS smb2cli_set_info(struct smbXcli_conn *conn,
263                             uint32_t timeout_msec,
264                             struct smbXcli_session *session,
265                             uint32_t tcon_id,
266                             uint8_t in_info_type,
267                             uint8_t in_file_info_class,
268                             const DATA_BLOB *in_input_buffer,
269                             uint32_t in_additional_info,
270                             uint64_t in_fid_persistent,
271                             uint64_t in_fid_volatile);
272
273 #endif /* __SMB2CLI_H__ */