* Copyright (c) 2015, Patrick Monnerat, D+H * All rights reserved. * * Redistribution and use in source and binary forms, * with or without modification, are permitted provided * that the following conditions are met: * * Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name of the copyright holder nor the names * of any other contributors may be used to endorse or * promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY * OF SUCH DAMAGE. /if not defined(LIBSSH2_SFTP_H_) /define LIBSSH2_SFTP_H_ /include "libssh2rpg/libssh2" * Note: Version 6 was documented at the time of writing * However it was marked as "DO NOT IMPLEMENT" due to pending changes * * Let's start with Version 3 (The version found in OpenSSH) and go from * there. d LIBSSH2_SFTP_VERSION... d c 3 * Flags for open_ex(). d LIBSSH2_SFTP_OPENFILE... d c 0 d LIBSSH2_SFTP_OPENDIR... d c 1 * Flags for rename_ex(). d LIBSSH2_SFTP_RENAME_OVERWRITE... d c X'00000001' d LIBSSH2_SFTP_RENAME_ATOMIC... d c X'00000002' d LIBSSH2_SFTP_RENAME_NATIVE... d c X'00000004' * Flags for stat_ex(). d LIBSSH2_SFTP_STAT... d c 0 d LIBSSH2_SFTP_LSTAT... d c 1 d LIBSSH2_SFTP_SETSTAT... d c 2 * Flags for symlink_ex(). d LIBSSH2_SFTP_SYMLINK... d c 0 d LIBSSH2_SFTP_READLINK... d c 1 d LIBSSH2_SFTP_REALPATH... d c 2 * SFTP attribute flag bits. d LIBSSH2_SFTP_ATTR_SIZE... d c X'00000001' d LIBSSH2_SFTP_ATTR_UIDGID... d c X'00000002' d LIBSSH2_SFTP_ATTR_PERMISSIONS... d c X'00000004' d LIBSSH2_SFTP_ATTR_ACMODTIME... d c X'00000008' d LIBSSH2_SFTP_ATTR_EXTENDED... d c X'80000000' * SFTP statvfs flag bits. d LIBSSH2_SFTP_ST_RDONLY... d c X'00000001' d LIBSSH2_SFTP_ST_NOSUID... d c X'00000002' d #LIBSSH2_SFTP_ATTRIBUTES... d ds based(######typedef######) d align qualified * If flags & ATTR_* bit is set, then the value in this struct will be * meaningful Otherwise it should be ignored. d flags like(libssh2_Culong) d filesize like(libssh2_uint64_t) d uid like(libssh2_Culong) d gid like(libssh2_Culong) d permissions like(libssh2_Culong) d atime like(libssh2_Culong) d mtime like(libssh2_Culong) d #LIBSSH2_SFTP_STATVFS... d ds based(######typedef######) d align qualified d f_bsize like(libssh2_uint64_t) Filesys block size d f_frsize like(libssh2_uint64_t) Fragment size d f_blocks like(libssh2_uint64_t) FS size in f_frsize d f_bfree like(libssh2_uint64_t) Free blocks d f_bavail like(libssh2_uint64_t) Free blks f. nonroot d f_files like(libssh2_uint64_t) Inodes d f_ffree like(libssh2_uint64_t) Free inodes d f_favail like(libssh2_uint64_t) Free inds f. nonroot d f_fsid like(libssh2_uint64_t) File system ID d f_flag like(libssh2_uint64_t) Mount flags d f_namemax like(libssh2_uint64_t) Max filename length * SFTP filetypes. d LIBSSH2_SFTP_TYPE_REGULAR... d c 1 d LIBSSH2_SFTP_TYPE_DIRECTORY... d c 2 d LIBSSH2_SFTP_TYPE_SYMLINK... d c 3 d LIBSSH2_SFTP_TYPE_SPECIAL... d c 4 d LIBSSH2_SFTP_TYPE_UNKNOWN... d c 5 d LIBSSH2_SFTP_TYPE_SOCKET... d c 6 d LIBSSH2_SFTP_TYPE_CHAR_DEVICE... d c 7 d LIBSSH2_SFTP_TYPE_BLOCK_DEVICE... d c 8 d LIBSSH2_SFTP_TYPE_FIFO... d c 9 * Reproduce the POSIX file modes here for systems that are not POSIX * compliant. * * These is used in "permissions" of "struct _LIBSSH2_SFTP_ATTRIBUTES" * File type. d LIBSSH2_SFTP_S_IFMT... type of file mask d c X'F000' d LIBSSH2_SFTP_S_IFIFO... named pipe (fifo) d c X'1000' d LIBSSH2_SFTP_S_IFCHR... character special d c X'2000' d LIBSSH2_SFTP_S_IFDIR... directory d c X'4000' d LIBSSH2_SFTP_S_IFBLK... block special d c X'6000' d LIBSSH2_SFTP_S_IFREG... regular d c X'8000' d LIBSSH2_SFTP_S_IFLNK... symbolic link d c X'A000' d LIBSSH2_SFTP_S_IFSOCK... socket d c X'C000' * File mode. * Read, write, execute/search by owner. d LIBSSH2_SFTP_S_IRWXU... RWX mask for owner d c X'01C0' d LIBSSH2_SFTP_S_IRUSR... R for owner d c X'0100' d LIBSSH2_SFTP_S_IWUSR... W for owner d c X'0080' d LIBSSH2_SFTP_S_IXUSR... X for owner d c X'0040' * Read, write, execute/search by group. d LIBSSH2_SFTP_S_IRWXG... RWX mask for group d c X'0038' d LIBSSH2_SFTP_S_IRGRP... R for group d c X'0020' d LIBSSH2_SFTP_S_IWGRP... W for group d c X'0010' d LIBSSH2_SFTP_S_IXGRP... X for group d c X'0008' * Read, write, execute/search by others. d LIBSSH2_SFTP_S_IRWXO... RWX mask for other d c X'0007' d LIBSSH2_SFTP_S_IROTH... R for other d c X'0004' d LIBSSH2_SFTP_S_IWOTH... W for other d c X'0002' d LIBSSH2_SFTP_S_IXOTH... X for other d c X'0001' * C macro implementation. d LIBSSH2_SFTP_S_ISLNK... d pr extproc('LIBSSH2_SFTP_S_ISLNK') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * C macro implementation. d LIBSSH2_SFTP_S_ISREG... d pr extproc('LIBSSH2_SFTP_S_ISREG') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * C macro implementation. d LIBSSH2_SFTP_S_ISDIR... d pr extproc('LIBSSH2_SFTP_S_ISDIR') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * C macro implementation. d LIBSSH2_SFTP_S_ISCHR... d pr extproc('LIBSSH2_SFTP_S_ISCHR') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * C macro implementation. d LIBSSH2_SFTP_S_ISBLK... d pr extproc('LIBSSH2_SFTP_S_ISBLK') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * C macro implementation. d LIBSSH2_SFTP_S_ISFIFO... d pr extproc('LIBSSH2_SFTP_S_ISFIFO') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * C macro implementation. d LIBSSH2_SFTP_S_ISSOCK... d pr extproc('LIBSSH2_SFTP_S_ISSOCK') d like(libssh2_Cint) d permissions value like(libssh2_Culong) * SFTP File Transfer Flags -- (e.g. flags parameter to sftp_open()) * Danger will robinson... APPEND doesn't have any effect on OpenSSH * servers. d LIBSSH2_FXF_READ... d c X'00000001' d LIBSSH2_FXF_WRITE... d c X'00000002' d LIBSSH2_FXF_APPEND... d c X'00000004' d LIBSSH2_FXF_CREAT... d c X'00000008' d LIBSSH2_FXF_TRUNC... d c X'00000010' d LIBSSH2_FXF_EXCL... d c X'00000020' * SFTP Status Codes (returned by libssh2_sftp_last_error()). d LIBSSH2_FX_OK... d c 0 d LIBSSH2_FX_EOF... d c 1 d LIBSSH2_FX_NO_SUCH_FILE... d c 2 d LIBSSH2_FX_PERMISSION_DENIED... d c 3 d LIBSSH2_FX_FAILURE... d c 4 d LIBSSH2_FX_BAD_MESSAGE... d c 5 d LIBSSH2_FX_NO_CONNECTION... d c 6 d LIBSSH2_FX_CONNECTION_LOST... d c 7 d LIBSSH2_FX_OP_UNSUPPORTED... d c 8 d LIBSSH2_FX_INVALID_HANDLE... d c 9 d LIBSSH2_FX_NO_SUCH_PATH... d c 10 d LIBSSH2_FX_FILE_ALREADY_EXISTS... d c 11 d LIBSSH2_FX_WRITE_PROTECT... d c 12 d LIBSSH2_FX_NO_MEDIA... d c 13 d LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM... d c 14 d LIBSSH2_FX_QUOTA_EXCEEDED... d c 15 d LIBSSH2_FX_UNKNOWN_PRINCIPAL... d c 16 d LIBSSH2_FX_LOCK_CONFLICT... d c 17 d LIBSSH2_FX_DIR_NOT_EMPTY... d c 18 d LIBSSH2_FX_NOT_A_DIRECTORY... d c 19 d LIBSSH2_FX_INVALID_FILENAME... d c 20 d LIBSSH2_FX_LINK_LOOP... d c 21 * Returned by any function that would block during a read/write operation. d LIBSSH2SFTP_EAGAIN... d c -37 * SFTP API. d libssh2_sftp_init... d pr * extproc('libssh2_sftp_init') LIBSSH2_SFTP * d session * value LIBSSH2_SESSION * d libssh2_sftp_shutdown... d pr extproc('libssh2_sftp_shutdown') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d libssh2_sftp_last_error... d pr extproc('libssh2_sftp_last_error') d like(libssh2_Culong) d sftp * value LIBSSH2_SFTP * d libssh2_sftp_get_channel... d pr * extproc('libssh2_sftp_get_channel') LIBSSH2_CHANNEL * d sftp * value LIBSSH2_SFTP * * File / Directory Ops. d libssh2_sftp_open_ex... d pr * extproc('libssh2_sftp_open_ex') LIBSSH2_SFTP_HANDLE* d sftp * value LIBSSH2_SFTP * d filename * value options(*string) const char * d filename_len value like(libssh2_Cuint) d flags value like(libssh2_Culong) d mode value like(libssh2_Clong) d open_type value like(libssh2_Cint) * C macro implementation. d libssh2_sftp_open... d pr * extproc('libssh2_sftp_open') LIBSSH2_SFTP_HANDLE d * d sftp * value LIBSSH2_SFTP * d filename * value options(*string) const char * d flags value like(libssh2_Culong) d mode value like(libssh2_Clong) * C macro libssh2_sftp_opendir implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_open_dir... d pr * extproc('libssh2_sftp_opendir') LIBSSH2_SFTP_HANDLE d * d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d libssh2_sftp_read... d pr extproc('libssh2_sftp_read') d like(libssh2_Cssize_t) d handle * value LIBSSH2_SFTP_HANDLE* d buffer * value options(*string) char * d buffer_maxlen value like(libssh2_Csize_t) d libssh2_sftp_readdir_ex... d pr extproc('libssh2_sftp_readdir_ex') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d buffer * value char * d buffer_maxlen value like(libssh2_Csize_t) d longentry * value char * d longentry_maxlen... d value like(libssh2_Csize_t) d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * * C macro implementation. d libssh2_sftp_readdir... d pr extproc('libssh2_sftp_readdir') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d buffer * value char * d buffer_maxlen value like(libssh2_Csize_t) d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * d libssh2_sftp_write... d pr extproc('libssh2_sftp_write') d like(libssh2_Cssize_t) d handle * value LIBSSH2_SFTP_HANDLE* d buffer * value options(*string) const char * d count value like(libssh2_Csize_t) d libssh2_sftp_fsync... d pr extproc('libssh2_sftp_fsync') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d libssh2_sftp_close_handle... d pr extproc('libssh2_sftp_close_handle') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* * C macro implementation. d libssh2_sftp_close... d pr extproc('libssh2_sftp_close_handle') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* * C macro implementation. d libssh2_sftp_closedir... d pr extproc('libssh2_sftp_close_handle') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d libssh2_sftp_seek... d pr extproc('libssh2_sftp_seek') d handle * value LIBSSH2_SFTP_HANDLE* d offset value like(libssh2_Csize_t) d libssh2_sftp_seek64... d pr extproc('libssh2_sftp_seek64') d handle * value LIBSSH2_SFTP_HANDLE* d offset value like(libssh2_uint64_t) * C macro implementation. d libssh2_sftp_rewind... d pr extproc('libssh2_sftp_rewind') d handle * value LIBSSH2_SFTP_HANDLE* d libssh2_sftp_tell... d pr extproc('libssh2_sftp_tell') d like(libssh2_Csize_t) d handle * value LIBSSH2_SFTP_HANDLE* d libssh2_sftp_tell64... d pr extproc('libssh2_sftp_tell64') d like(libssh2_uint64_t) d handle * value LIBSSH2_SFTP_HANDLE* d libssh2_sftp_fstat_ex... d pr extproc('libssh2_sftp_fstat_ex') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * d setstat value like(libssh2_Cint) * C macro implementation. d libssh2_sftp_fstat... d pr extproc('libssh2_sftp_fstat') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * * C macro implementation. d libssh2_sftp_fsetstat... d pr extproc('libssh2_sftp_fsetstat') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * * Miscellaneous Ops. d libssh2_sftp_rename_ex... d pr extproc('libssh2_sftp_rename_ex') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d source_filename... d * value options(*string) const char * d source_filename_len... d value like(libssh2_Cuint) d dest_filename * value options(*string) const char * d dest_filename_len... d value like(libssh2_Cuint) d flags value like(libssh2_Clong) * C macro implementation. d libssh2_sftp_rename... d pr extproc('libssh2_sftp_rename') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d source_filename... d * value options(*string) const char * d dest_filename * value options(*string) const char * d libssh2_sftp_unlink_ex... d pr extproc('libssh2_sftp_unlink_ex') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d filename * value options(*string) const char * d filename_len value like(libssh2_Cuint) * C macro implementation. d libssh2_sftp_unlink... d pr extproc('libssh2_sftp_unlink') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d filename * value options(*string) const char * d libssh2_sftp_fstatvfs... d pr extproc('libssh2_sftp_fstatvfs') d like(libssh2_Cint) d handle * value LIBSSH2_SFTP_HANDLE* d st * value LIBSSH2_SFTP_STATVFS d * d libssh2_sftp_statvfs... d pr extproc('libssh2_sftp_statvfs') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d path_len value like(libssh2_Csize_t) d st * value LIBSSH2_SFTP_STATVFS d * d libssh2_sftp_mkdir_ex... d pr extproc('libssh2_sftp_mkdir_ex') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d path_len value like(libssh2_Cuint) d mode value like(libssh2_Clong) * C macro implementation. d libssh2_sftp_mkdir... d pr extproc('libssh2_sftp_mkdir') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d mode value like(libssh2_Clong) d libssh2_sftp_rmdir_ex... d pr extproc('libssh2_sftp_rmdir_ex') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d path_len value like(libssh2_Cuint) * C macro implementation. d libssh2_sftp_rmdir... d pr extproc('libssh2_sftp_rmdir') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d libssh2_sftp_stat_ex... d pr extproc('libssh2_sftp_stat_ex') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d path_len value like(libssh2_Cuint) d stat_type value like(libssh2_Cint) d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * * C macro libssh2_sftp_stat implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_get_stat... d pr extproc('libssh2_sftp_stat') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * * C macro libssh2_sftp_lstat implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_get_lstat... d pr extproc('libssh2_sftp_lstat') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * * C macro libssh2_sftp_setstat implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_set_stat... d pr extproc('libssh2_sftp_setstat') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d attrs * value LIBSSH2_SFTP_... d ATTRIBUTES * d libssh2_sftp_symlink_ex... d pr extproc('libssh2_sftp_symlink_ex') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d path_len value like(libssh2_Cuint) d target * value options(*string) char * d target_len value like(libssh2_Cuint) d link_type value like(libssh2_Cint) * C macro libssh2_sftp_symlink implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_sym_link... d pr extproc('libssh2_sftp_symlink') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d orig * value options(*string) const char * d linkpath * value options(*string) char * * C macro libssh2_sftp_readlink implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_read_link... d pr extproc('libssh2_sftp_readlink') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d target * value char * d maxlen value like(libssh2_Cuint) * C macro libssh2_sftp_realpath implementation. * Renamed to avoid upper/lower case name clash. d libssh2_sftp_real_path... d pr extproc('libssh2_sftp_realpath') d like(libssh2_Cint) d sftp * value LIBSSH2_SFTP * d path * value options(*string) const char * d target * value char * d maxlen value like(libssh2_Cuint) /endif LIBSSH2_SFTP_H_