Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/libssh2_sftp.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /* Copyright (c) 2004-2008, Sara Golemon <sarag@libssh2.org> | |
2 * All rights reserved. | |
3 * | |
4 * Redistribution and use in source and binary forms, | |
5 * with or without modification, are permitted provided | |
6 * that the following conditions are met: | |
7 * | |
8 * Redistributions of source code must retain the above | |
9 * copyright notice, this list of conditions and the | |
10 * following disclaimer. | |
11 * | |
12 * Redistributions in binary form must reproduce the above | |
13 * copyright notice, this list of conditions and the following | |
14 * disclaimer in the documentation and/or other materials | |
15 * provided with the distribution. | |
16 * | |
17 * Neither the name of the copyright holder nor the names | |
18 * of any other contributors may be used to endorse or | |
19 * promote products derived from this software without | |
20 * specific prior written permission. | |
21 * | |
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND | |
23 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | |
24 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
25 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |
30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | |
32 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
33 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | |
34 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY | |
35 * OF SUCH DAMAGE. | |
36 */ | |
37 | |
38 #ifndef LIBSSH2_SFTP_H | |
39 #define LIBSSH2_SFTP_H 1 | |
40 | |
41 #include "libssh2.h" | |
42 | |
43 #ifndef WIN32 | |
44 #include <unistd.h> | |
45 #endif | |
46 | |
47 #ifdef __cplusplus | |
48 extern "C" { | |
49 #endif | |
50 | |
51 /* Note: Version 6 was documented at the time of writing | |
52 * However it was marked as "DO NOT IMPLEMENT" due to pending changes | |
53 * | |
54 * Let's start with Version 3 (The version found in OpenSSH) and go from there | |
55 */ | |
56 #define LIBSSH2_SFTP_VERSION 3 | |
57 | |
58 typedef struct _LIBSSH2_SFTP LIBSSH2_SFTP; | |
59 typedef struct _LIBSSH2_SFTP_HANDLE LIBSSH2_SFTP_HANDLE; | |
60 typedef struct _LIBSSH2_SFTP_ATTRIBUTES LIBSSH2_SFTP_ATTRIBUTES; | |
61 typedef struct _LIBSSH2_SFTP_STATVFS LIBSSH2_SFTP_STATVFS; | |
62 | |
63 /* Flags for open_ex() */ | |
64 #define LIBSSH2_SFTP_OPENFILE 0 | |
65 #define LIBSSH2_SFTP_OPENDIR 1 | |
66 | |
67 /* Flags for rename_ex() */ | |
68 #define LIBSSH2_SFTP_RENAME_OVERWRITE 0x00000001 | |
69 #define LIBSSH2_SFTP_RENAME_ATOMIC 0x00000002 | |
70 #define LIBSSH2_SFTP_RENAME_NATIVE 0x00000004 | |
71 | |
72 /* Flags for stat_ex() */ | |
73 #define LIBSSH2_SFTP_STAT 0 | |
74 #define LIBSSH2_SFTP_LSTAT 1 | |
75 #define LIBSSH2_SFTP_SETSTAT 2 | |
76 | |
77 /* Flags for symlink_ex() */ | |
78 #define LIBSSH2_SFTP_SYMLINK 0 | |
79 #define LIBSSH2_SFTP_READLINK 1 | |
80 #define LIBSSH2_SFTP_REALPATH 2 | |
81 | |
82 /* Flags for sftp_mkdir() */ | |
83 #define LIBSSH2_SFTP_DEFAULT_MODE -1 | |
84 | |
85 /* SFTP attribute flag bits */ | |
86 #define LIBSSH2_SFTP_ATTR_SIZE 0x00000001 | |
87 #define LIBSSH2_SFTP_ATTR_UIDGID 0x00000002 | |
88 #define LIBSSH2_SFTP_ATTR_PERMISSIONS 0x00000004 | |
89 #define LIBSSH2_SFTP_ATTR_ACMODTIME 0x00000008 | |
90 #define LIBSSH2_SFTP_ATTR_EXTENDED 0x80000000 | |
91 | |
92 /* SFTP statvfs flag bits */ | |
93 #define LIBSSH2_SFTP_ST_RDONLY 0x00000001 | |
94 #define LIBSSH2_SFTP_ST_NOSUID 0x00000002 | |
95 | |
96 struct _LIBSSH2_SFTP_ATTRIBUTES { | |
97 /* If flags & ATTR_* bit is set, then the value in this struct will be | |
98 * meaningful Otherwise it should be ignored | |
99 */ | |
100 unsigned long flags; | |
101 | |
102 libssh2_uint64_t filesize; | |
103 unsigned long uid, gid; | |
104 unsigned long permissions; | |
105 unsigned long atime, mtime; | |
106 }; | |
107 | |
108 struct _LIBSSH2_SFTP_STATVFS { | |
109 libssh2_uint64_t f_bsize; /* file system block size */ | |
110 libssh2_uint64_t f_frsize; /* fragment size */ | |
111 libssh2_uint64_t f_blocks; /* size of fs in f_frsize units */ | |
112 libssh2_uint64_t f_bfree; /* # free blocks */ | |
113 libssh2_uint64_t f_bavail; /* # free blocks for non-root */ | |
114 libssh2_uint64_t f_files; /* # inodes */ | |
115 libssh2_uint64_t f_ffree; /* # free inodes */ | |
116 libssh2_uint64_t f_favail; /* # free inodes for non-root */ | |
117 libssh2_uint64_t f_fsid; /* file system ID */ | |
118 libssh2_uint64_t f_flag; /* mount flags */ | |
119 libssh2_uint64_t f_namemax; /* maximum filename length */ | |
120 }; | |
121 | |
122 /* SFTP filetypes */ | |
123 #define LIBSSH2_SFTP_TYPE_REGULAR 1 | |
124 #define LIBSSH2_SFTP_TYPE_DIRECTORY 2 | |
125 #define LIBSSH2_SFTP_TYPE_SYMLINK 3 | |
126 #define LIBSSH2_SFTP_TYPE_SPECIAL 4 | |
127 #define LIBSSH2_SFTP_TYPE_UNKNOWN 5 | |
128 #define LIBSSH2_SFTP_TYPE_SOCKET 6 | |
129 #define LIBSSH2_SFTP_TYPE_CHAR_DEVICE 7 | |
130 #define LIBSSH2_SFTP_TYPE_BLOCK_DEVICE 8 | |
131 #define LIBSSH2_SFTP_TYPE_FIFO 9 | |
132 | |
133 /* | |
134 * Reproduce the POSIX file modes here for systems that are not POSIX | |
135 * compliant. | |
136 * | |
137 * These is used in "permissions" of "struct _LIBSSH2_SFTP_ATTRIBUTES" | |
138 */ | |
139 /* File type */ | |
140 #define LIBSSH2_SFTP_S_IFMT 0170000 /* type of file mask */ | |
141 #define LIBSSH2_SFTP_S_IFIFO 0010000 /* named pipe (fifo) */ | |
142 #define LIBSSH2_SFTP_S_IFCHR 0020000 /* character special */ | |
143 #define LIBSSH2_SFTP_S_IFDIR 0040000 /* directory */ | |
144 #define LIBSSH2_SFTP_S_IFBLK 0060000 /* block special */ | |
145 #define LIBSSH2_SFTP_S_IFREG 0100000 /* regular */ | |
146 #define LIBSSH2_SFTP_S_IFLNK 0120000 /* symbolic link */ | |
147 #define LIBSSH2_SFTP_S_IFSOCK 0140000 /* socket */ | |
148 | |
149 /* File mode */ | |
150 /* Read, write, execute/search by owner */ | |
151 #define LIBSSH2_SFTP_S_IRWXU 0000700 /* RWX mask for owner */ | |
152 #define LIBSSH2_SFTP_S_IRUSR 0000400 /* R for owner */ | |
153 #define LIBSSH2_SFTP_S_IWUSR 0000200 /* W for owner */ | |
154 #define LIBSSH2_SFTP_S_IXUSR 0000100 /* X for owner */ | |
155 /* Read, write, execute/search by group */ | |
156 #define LIBSSH2_SFTP_S_IRWXG 0000070 /* RWX mask for group */ | |
157 #define LIBSSH2_SFTP_S_IRGRP 0000040 /* R for group */ | |
158 #define LIBSSH2_SFTP_S_IWGRP 0000020 /* W for group */ | |
159 #define LIBSSH2_SFTP_S_IXGRP 0000010 /* X for group */ | |
160 /* Read, write, execute/search by others */ | |
161 #define LIBSSH2_SFTP_S_IRWXO 0000007 /* RWX mask for other */ | |
162 #define LIBSSH2_SFTP_S_IROTH 0000004 /* R for other */ | |
163 #define LIBSSH2_SFTP_S_IWOTH 0000002 /* W for other */ | |
164 #define LIBSSH2_SFTP_S_IXOTH 0000001 /* X for other */ | |
165 | |
166 /* macros to check for specific file types, added in 1.2.5 */ | |
167 #define LIBSSH2_SFTP_S_ISLNK(m) \ | |
168 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFLNK) | |
169 #define LIBSSH2_SFTP_S_ISREG(m) \ | |
170 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFREG) | |
171 #define LIBSSH2_SFTP_S_ISDIR(m) \ | |
172 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFDIR) | |
173 #define LIBSSH2_SFTP_S_ISCHR(m) \ | |
174 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFCHR) | |
175 #define LIBSSH2_SFTP_S_ISBLK(m) \ | |
176 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFBLK) | |
177 #define LIBSSH2_SFTP_S_ISFIFO(m) \ | |
178 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFIFO) | |
179 #define LIBSSH2_SFTP_S_ISSOCK(m) \ | |
180 (((m) & LIBSSH2_SFTP_S_IFMT) == LIBSSH2_SFTP_S_IFSOCK) | |
181 | |
182 /* SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) | |
183 * Danger will robinson... APPEND doesn't have any effect on OpenSSH servers */ | |
184 #define LIBSSH2_FXF_READ 0x00000001 | |
185 #define LIBSSH2_FXF_WRITE 0x00000002 | |
186 #define LIBSSH2_FXF_APPEND 0x00000004 | |
187 #define LIBSSH2_FXF_CREAT 0x00000008 | |
188 #define LIBSSH2_FXF_TRUNC 0x00000010 | |
189 #define LIBSSH2_FXF_EXCL 0x00000020 | |
190 | |
191 /* SFTP Status Codes (returned by libssh2_sftp_last_error() ) */ | |
192 #define LIBSSH2_FX_OK 0UL | |
193 #define LIBSSH2_FX_EOF 1UL | |
194 #define LIBSSH2_FX_NO_SUCH_FILE 2UL | |
195 #define LIBSSH2_FX_PERMISSION_DENIED 3UL | |
196 #define LIBSSH2_FX_FAILURE 4UL | |
197 #define LIBSSH2_FX_BAD_MESSAGE 5UL | |
198 #define LIBSSH2_FX_NO_CONNECTION 6UL | |
199 #define LIBSSH2_FX_CONNECTION_LOST 7UL | |
200 #define LIBSSH2_FX_OP_UNSUPPORTED 8UL | |
201 #define LIBSSH2_FX_INVALID_HANDLE 9UL | |
202 #define LIBSSH2_FX_NO_SUCH_PATH 10UL | |
203 #define LIBSSH2_FX_FILE_ALREADY_EXISTS 11UL | |
204 #define LIBSSH2_FX_WRITE_PROTECT 12UL | |
205 #define LIBSSH2_FX_NO_MEDIA 13UL | |
206 #define LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM 14UL | |
207 #define LIBSSH2_FX_QUOTA_EXCEEDED 15UL | |
208 #define LIBSSH2_FX_UNKNOWN_PRINCIPLE 16UL /* Initial mis-spelling */ | |
209 #define LIBSSH2_FX_UNKNOWN_PRINCIPAL 16UL | |
210 #define LIBSSH2_FX_LOCK_CONFlICT 17UL /* Initial mis-spelling */ | |
211 #define LIBSSH2_FX_LOCK_CONFLICT 17UL | |
212 #define LIBSSH2_FX_DIR_NOT_EMPTY 18UL | |
213 #define LIBSSH2_FX_NOT_A_DIRECTORY 19UL | |
214 #define LIBSSH2_FX_INVALID_FILENAME 20UL | |
215 #define LIBSSH2_FX_LINK_LOOP 21UL | |
216 | |
217 /* Returned by any function that would block during a read/write operation */ | |
218 #define LIBSSH2SFTP_EAGAIN LIBSSH2_ERROR_EAGAIN | |
219 | |
220 /* SFTP API */ | |
221 LIBSSH2_API LIBSSH2_SFTP *libssh2_sftp_init(LIBSSH2_SESSION *session); | |
222 LIBSSH2_API int libssh2_sftp_shutdown(LIBSSH2_SFTP *sftp); | |
223 LIBSSH2_API unsigned long libssh2_sftp_last_error(LIBSSH2_SFTP *sftp); | |
224 LIBSSH2_API LIBSSH2_CHANNEL *libssh2_sftp_get_channel(LIBSSH2_SFTP *sftp); | |
225 | |
226 /* File / Directory Ops */ | |
227 LIBSSH2_API LIBSSH2_SFTP_HANDLE * | |
228 libssh2_sftp_open_ex(LIBSSH2_SFTP *sftp, | |
229 const char *filename, | |
230 unsigned int filename_len, | |
231 unsigned long flags, | |
232 long mode, int open_type); | |
233 #define libssh2_sftp_open(sftp, filename, flags, mode) \ | |
234 libssh2_sftp_open_ex((sftp), (filename), strlen(filename), (flags), \ | |
235 (mode), LIBSSH2_SFTP_OPENFILE) | |
236 #define libssh2_sftp_opendir(sftp, path) \ | |
237 libssh2_sftp_open_ex((sftp), (path), strlen(path), 0, 0, \ | |
238 LIBSSH2_SFTP_OPENDIR) | |
239 | |
240 LIBSSH2_API ssize_t libssh2_sftp_read(LIBSSH2_SFTP_HANDLE *handle, | |
241 char *buffer, size_t buffer_maxlen); | |
242 | |
243 LIBSSH2_API int libssh2_sftp_readdir_ex(LIBSSH2_SFTP_HANDLE *handle, \ | |
244 char *buffer, size_t buffer_maxlen, | |
245 char *longentry, | |
246 size_t longentry_maxlen, | |
247 LIBSSH2_SFTP_ATTRIBUTES *attrs); | |
248 #define libssh2_sftp_readdir(handle, buffer, buffer_maxlen, attrs) \ | |
249 libssh2_sftp_readdir_ex((handle), (buffer), (buffer_maxlen), NULL, 0, \ | |
250 (attrs)) | |
251 | |
252 LIBSSH2_API ssize_t libssh2_sftp_write(LIBSSH2_SFTP_HANDLE *handle, | |
253 const char *buffer, size_t count); | |
254 LIBSSH2_API int libssh2_sftp_fsync(LIBSSH2_SFTP_HANDLE *handle); | |
255 | |
256 LIBSSH2_API int libssh2_sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle); | |
257 #define libssh2_sftp_close(handle) libssh2_sftp_close_handle(handle) | |
258 #define libssh2_sftp_closedir(handle) libssh2_sftp_close_handle(handle) | |
259 | |
260 LIBSSH2_API void libssh2_sftp_seek(LIBSSH2_SFTP_HANDLE *handle, size_t offset); | |
261 LIBSSH2_API void libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE *handle, | |
262 libssh2_uint64_t offset); | |
263 #define libssh2_sftp_rewind(handle) libssh2_sftp_seek64((handle), 0) | |
264 | |
265 LIBSSH2_API size_t libssh2_sftp_tell(LIBSSH2_SFTP_HANDLE *handle); | |
266 LIBSSH2_API libssh2_uint64_t libssh2_sftp_tell64(LIBSSH2_SFTP_HANDLE *handle); | |
267 | |
268 LIBSSH2_API int libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *handle, | |
269 LIBSSH2_SFTP_ATTRIBUTES *attrs, | |
270 int setstat); | |
271 #define libssh2_sftp_fstat(handle, attrs) \ | |
272 libssh2_sftp_fstat_ex((handle), (attrs), 0) | |
273 #define libssh2_sftp_fsetstat(handle, attrs) \ | |
274 libssh2_sftp_fstat_ex((handle), (attrs), 1) | |
275 | |
276 /* Miscellaneous Ops */ | |
277 LIBSSH2_API int libssh2_sftp_rename_ex(LIBSSH2_SFTP *sftp, | |
278 const char *source_filename, | |
279 unsigned int srouce_filename_len, | |
280 const char *dest_filename, | |
281 unsigned int dest_filename_len, | |
282 long flags); | |
283 #define libssh2_sftp_rename(sftp, sourcefile, destfile) \ | |
284 libssh2_sftp_rename_ex((sftp), (sourcefile), strlen(sourcefile), \ | |
285 (destfile), strlen(destfile), \ | |
286 LIBSSH2_SFTP_RENAME_OVERWRITE | \ | |
287 LIBSSH2_SFTP_RENAME_ATOMIC | \ | |
288 LIBSSH2_SFTP_RENAME_NATIVE) | |
289 | |
290 LIBSSH2_API int libssh2_sftp_unlink_ex(LIBSSH2_SFTP *sftp, | |
291 const char *filename, | |
292 unsigned int filename_len); | |
293 #define libssh2_sftp_unlink(sftp, filename) \ | |
294 libssh2_sftp_unlink_ex((sftp), (filename), strlen(filename)) | |
295 | |
296 LIBSSH2_API int libssh2_sftp_fstatvfs(LIBSSH2_SFTP_HANDLE *handle, | |
297 LIBSSH2_SFTP_STATVFS *st); | |
298 | |
299 LIBSSH2_API int libssh2_sftp_statvfs(LIBSSH2_SFTP *sftp, | |
300 const char *path, | |
301 size_t path_len, | |
302 LIBSSH2_SFTP_STATVFS *st); | |
303 | |
304 LIBSSH2_API int libssh2_sftp_mkdir_ex(LIBSSH2_SFTP *sftp, | |
305 const char *path, | |
306 unsigned int path_len, long mode); | |
307 #define libssh2_sftp_mkdir(sftp, path, mode) \ | |
308 libssh2_sftp_mkdir_ex((sftp), (path), strlen(path), (mode)) | |
309 | |
310 LIBSSH2_API int libssh2_sftp_rmdir_ex(LIBSSH2_SFTP *sftp, | |
311 const char *path, | |
312 unsigned int path_len); | |
313 #define libssh2_sftp_rmdir(sftp, path) \ | |
314 libssh2_sftp_rmdir_ex((sftp), (path), strlen(path)) | |
315 | |
316 LIBSSH2_API int libssh2_sftp_stat_ex(LIBSSH2_SFTP *sftp, | |
317 const char *path, | |
318 unsigned int path_len, | |
319 int stat_type, | |
320 LIBSSH2_SFTP_ATTRIBUTES *attrs); | |
321 #define libssh2_sftp_stat(sftp, path, attrs) \ | |
322 libssh2_sftp_stat_ex((sftp), (path), strlen(path), LIBSSH2_SFTP_STAT, \ | |
323 (attrs)) | |
324 #define libssh2_sftp_lstat(sftp, path, attrs) \ | |
325 libssh2_sftp_stat_ex((sftp), (path), strlen(path), LIBSSH2_SFTP_LSTAT, \ | |
326 (attrs)) | |
327 #define libssh2_sftp_setstat(sftp, path, attrs) \ | |
328 libssh2_sftp_stat_ex((sftp), (path), strlen(path), LIBSSH2_SFTP_SETSTAT, \ | |
329 (attrs)) | |
330 | |
331 LIBSSH2_API int libssh2_sftp_symlink_ex(LIBSSH2_SFTP *sftp, | |
332 const char *path, | |
333 unsigned int path_len, | |
334 char *target, | |
335 unsigned int target_len, | |
336 int link_type); | |
337 #define libssh2_sftp_symlink(sftp, orig, linkpath) \ | |
338 libssh2_sftp_symlink_ex((sftp), (orig), strlen(orig), (linkpath), \ | |
339 strlen(linkpath), LIBSSH2_SFTP_SYMLINK) | |
340 #define libssh2_sftp_readlink(sftp, path, target, maxlen) \ | |
341 libssh2_sftp_symlink_ex((sftp), (path), strlen(path), (target), (maxlen), \ | |
342 LIBSSH2_SFTP_READLINK) | |
343 #define libssh2_sftp_realpath(sftp, path, target, maxlen) \ | |
344 libssh2_sftp_symlink_ex((sftp), (path), strlen(path), (target), (maxlen), \ | |
345 LIBSSH2_SFTP_REALPATH) | |
346 | |
347 #ifdef __cplusplus | |
348 } /* extern "C" */ | |
349 #endif | |
350 | |
351 #endif /* LIBSSH2_SFTP_H */ |