|  | 
| #define | LIBSFTP_VERSION   3 | 
|  | 
| #define | SFTP_HANDLES   256 | 
|  | 
| #define | SSH_FXP_INIT   1 | 
|  | 
| #define | SSH_FXP_VERSION   2 | 
|  | 
| #define | SSH_FXP_OPEN   3 | 
|  | 
| #define | SSH_FXP_CLOSE   4 | 
|  | 
| #define | SSH_FXP_READ   5 | 
|  | 
| #define | SSH_FXP_WRITE   6 | 
|  | 
| #define | SSH_FXP_LSTAT   7 | 
|  | 
| #define | SSH_FXP_FSTAT   8 | 
|  | 
| #define | SSH_FXP_SETSTAT   9 | 
|  | 
| #define | SSH_FXP_FSETSTAT   10 | 
|  | 
| #define | SSH_FXP_OPENDIR   11 | 
|  | 
| #define | SSH_FXP_READDIR   12 | 
|  | 
| #define | SSH_FXP_REMOVE   13 | 
|  | 
| #define | SSH_FXP_MKDIR   14 | 
|  | 
| #define | SSH_FXP_RMDIR   15 | 
|  | 
| #define | SSH_FXP_REALPATH   16 | 
|  | 
| #define | SSH_FXP_STAT   17 | 
|  | 
| #define | SSH_FXP_RENAME   18 | 
|  | 
| #define | SSH_FXP_READLINK   19 | 
|  | 
| #define | SSH_FXP_SYMLINK   20 | 
|  | 
| #define | SSH_FXP_STATUS   101 | 
|  | 
| #define | SSH_FXP_HANDLE   102 | 
|  | 
| #define | SSH_FXP_DATA   103 | 
|  | 
| #define | SSH_FXP_NAME   104 | 
|  | 
| #define | SSH_FXP_ATTRS   105 | 
|  | 
| #define | SSH_FXP_EXTENDED   200 | 
|  | 
| #define | SSH_FXP_EXTENDED_REPLY   201 | 
|  | 
| #define | SSH_FILEXFER_ATTR_SIZE   0x00000001 | 
|  | 
| #define | SSH_FILEXFER_ATTR_PERMISSIONS   0x00000004 | 
|  | 
| #define | SSH_FILEXFER_ATTR_ACCESSTIME   0x00000008 | 
|  | 
| #define | SSH_FILEXFER_ATTR_ACMODTIME   0x00000008 | 
|  | 
| #define | SSH_FILEXFER_ATTR_CREATETIME   0x00000010 | 
|  | 
| #define | SSH_FILEXFER_ATTR_MODIFYTIME   0x00000020 | 
|  | 
| #define | SSH_FILEXFER_ATTR_ACL   0x00000040 | 
|  | 
| #define | SSH_FILEXFER_ATTR_OWNERGROUP   0x00000080 | 
|  | 
| #define | SSH_FILEXFER_ATTR_SUBSECOND_TIMES   0x00000100 | 
|  | 
| #define | SSH_FILEXFER_ATTR_EXTENDED   0x80000000 | 
|  | 
| #define | SSH_FILEXFER_ATTR_UIDGID   0x00000002 | 
|  | 
| #define | SSH_FILEXFER_TYPE_REGULAR   1 | 
|  | 
| #define | SSH_FILEXFER_TYPE_DIRECTORY   2 | 
|  | 
| #define | SSH_FILEXFER_TYPE_SYMLINK   3 | 
|  | 
| #define | SSH_FILEXFER_TYPE_SPECIAL   4 | 
|  | 
| #define | SSH_FILEXFER_TYPE_UNKNOWN   5 | 
|  | 
| #define | SSH_FXF_READ   0x01 | 
|  | 
| #define | SSH_FXF_WRITE   0x02 | 
|  | 
| #define | SSH_FXF_APPEND   0x04 | 
|  | 
| #define | SSH_FXF_CREAT   0x08 | 
|  | 
| #define | SSH_FXF_TRUNC   0x10 | 
|  | 
| #define | SSH_FXF_EXCL   0x20 | 
|  | 
| #define | SSH_FXF_TEXT   0x40 | 
|  | 
| #define | SSH_S_IFMT   00170000 | 
|  | 
| #define | SSH_S_IFSOCK   0140000 | 
|  | 
| #define | SSH_S_IFLNK   0120000 | 
|  | 
| #define | SSH_S_IFREG   0100000 | 
|  | 
| #define | SSH_S_IFBLK   0060000 | 
|  | 
| #define | SSH_S_IFDIR   0040000 | 
|  | 
| #define | SSH_S_IFCHR   0020000 | 
|  | 
| #define | SSH_S_IFIFO   0010000 | 
|  | 
| #define | SSH_FXF_RENAME_OVERWRITE   0x00000001 | 
|  | 
| #define | SSH_FXF_RENAME_ATOMIC   0x00000002 | 
|  | 
| #define | SSH_FXF_RENAME_NATIVE   0x00000004 | 
|  | 
| #define | SFTP_OPEN   SSH_FXP_OPEN | 
|  | 
| #define | SFTP_CLOSE   SSH_FXP_CLOSE | 
|  | 
| #define | SFTP_READ   SSH_FXP_READ | 
|  | 
| #define | SFTP_WRITE   SSH_FXP_WRITE | 
|  | 
| #define | SFTP_LSTAT   SSH_FXP_LSTAT | 
|  | 
| #define | SFTP_FSTAT   SSH_FXP_FSTAT | 
|  | 
| #define | SFTP_SETSTAT   SSH_FXP_SETSTAT | 
|  | 
| #define | SFTP_FSETSTAT   SSH_FXP_FSETSTAT | 
|  | 
| #define | SFTP_OPENDIR   SSH_FXP_OPENDIR | 
|  | 
| #define | SFTP_READDIR   SSH_FXP_READDIR | 
|  | 
| #define | SFTP_REMOVE   SSH_FXP_REMOVE | 
|  | 
| #define | SFTP_MKDIR   SSH_FXP_MKDIR | 
|  | 
| #define | SFTP_RMDIR   SSH_FXP_RMDIR | 
|  | 
| #define | SFTP_REALPATH   SSH_FXP_REALPATH | 
|  | 
| #define | SFTP_STAT   SSH_FXP_STAT | 
|  | 
| #define | SFTP_RENAME   SSH_FXP_RENAME | 
|  | 
| #define | SFTP_READLINK   SSH_FXP_READLINK | 
|  | 
| #define | SFTP_SYMLINK   SSH_FXP_SYMLINK | 
|  | 
| #define | SFTP_EXTENDED   SSH_FXP_EXTENDED | 
|  | 
| #define | SSH_FXE_STATVFS_ST_RDONLY   0x1 /* read-only */ | 
|  | 
| #define | SSH_FXE_STATVFS_ST_NOSUID   0x2 /* no setuid */ | 
|  | 
|  | 
| LIBSSH_API sftp_session | sftp_new (ssh_session session) | 
|  | Start a new sftp session.  More... 
 | 
|  | 
| LIBSSH_API sftp_session | sftp_new_channel (ssh_session session, ssh_channel channel) | 
|  | Start a new sftp session with an existing channel.  More... 
 | 
|  | 
| LIBSSH_API void | sftp_free (sftp_session sftp) | 
|  | Close and deallocate a sftp session.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_init (sftp_session sftp) | 
|  | Initialize the sftp session with the server.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_get_error (sftp_session sftp) | 
|  | Get the last sftp error.  More... 
 | 
|  | 
| LIBSSH_API unsigned int | sftp_extensions_get_count (sftp_session sftp) | 
|  | Get the count of extensions provided by the server.  More... 
 | 
|  | 
| LIBSSH_API const char * | sftp_extensions_get_name (sftp_session sftp, unsigned int indexn) | 
|  | Get the name of the extension provided by the server.  More... 
 | 
|  | 
| LIBSSH_API const char * | sftp_extensions_get_data (sftp_session sftp, unsigned int indexn) | 
|  | Get the data of the extension provided by the server.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_extension_supported (sftp_session sftp, const char *name, const char *data) | 
|  | Check if the given extension is supported.  More... 
 | 
|  | 
| LIBSSH_API sftp_dir | sftp_opendir (sftp_session session, const char *path) | 
|  | Open a directory used to obtain directory entries.  More... 
 | 
|  | 
| LIBSSH_API sftp_attributes | sftp_readdir (sftp_session session, sftp_dir dir) | 
|  | Get a single file attributes structure of a directory.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_dir_eof (sftp_dir dir) | 
|  | Tell if the directory has reached EOF (End Of File).  More... 
 | 
|  | 
| LIBSSH_API sftp_attributes | sftp_stat (sftp_session session, const char *path) | 
|  | Get information about a file or directory.  More... 
 | 
|  | 
| LIBSSH_API sftp_attributes | sftp_lstat (sftp_session session, const char *path) | 
|  | Get information about a file or directory.  More... 
 | 
|  | 
| LIBSSH_API sftp_attributes | sftp_fstat (sftp_file file) | 
|  | Get information about a file or directory from a file handle.  More... 
 | 
|  | 
| LIBSSH_API void | sftp_attributes_free (sftp_attributes file) | 
|  | Free a sftp attribute structure.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_closedir (sftp_dir dir) | 
|  | Close a directory handle opened by sftp_opendir().  More... 
 | 
|  | 
| LIBSSH_API int | sftp_close (sftp_file file) | 
|  | Close an open file handle.  More... 
 | 
|  | 
| LIBSSH_API sftp_file | sftp_open (sftp_session session, const char *file, int accesstype, mode_t mode) | 
|  | Open a file on the server.  More... 
 | 
|  | 
| LIBSSH_API void | sftp_file_set_nonblocking (sftp_file handle) | 
|  | Make the sftp communication for this file handle non blocking.  More... 
 | 
|  | 
| LIBSSH_API void | sftp_file_set_blocking (sftp_file handle) | 
|  | Make the sftp communication for this file handle blocking.  More... 
 | 
|  | 
| LIBSSH_API ssize_t | sftp_read (sftp_file file, void *buf, size_t count) | 
|  | Read from a file using an opened sftp file handle.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_async_read_begin (sftp_file file, uint32_t len) | 
|  | Start an asynchronous read from a file using an opened sftp file handle.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_async_read (sftp_file file, void *data, uint32_t len, uint32_t id) | 
|  | Wait for an asynchronous read to complete and save the data.  More... 
 | 
|  | 
| LIBSSH_API ssize_t | sftp_write (sftp_file file, const void *buf, size_t count) | 
|  | Write to a file using an opened sftp file handle.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_seek (sftp_file file, uint32_t new_offset) | 
|  | Seek to a specific location in a file.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_seek64 (sftp_file file, uint64_t new_offset) | 
|  | Seek to a specific location in a file. This is the 64bit version.  More... 
 | 
|  | 
| LIBSSH_API unsigned long | sftp_tell (sftp_file file) | 
|  | Report current byte position in file.  More... 
 | 
|  | 
| LIBSSH_API uint64_t | sftp_tell64 (sftp_file file) | 
|  | Report current byte position in file.  More... 
 | 
|  | 
| LIBSSH_API void | sftp_rewind (sftp_file file) | 
|  | Rewinds the position of the file pointer to the beginning of the file.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_unlink (sftp_session sftp, const char *file) | 
|  | Unlink (delete) a file.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_rmdir (sftp_session sftp, const char *directory) | 
|  | Remove a directoy.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_mkdir (sftp_session sftp, const char *directory, mode_t mode) | 
|  | Create a directory.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_rename (sftp_session sftp, const char *original, const char *newname) | 
|  | Rename or move a file or directory.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_setstat (sftp_session sftp, const char *file, sftp_attributes attr) | 
|  | Set file attributes on a file, directory or symbolic link.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_chown (sftp_session sftp, const char *file, uid_t owner, gid_t group) | 
|  | Change the file owner and group.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_chmod (sftp_session sftp, const char *file, mode_t mode) | 
|  | Change permissions of a file.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_utimes (sftp_session sftp, const char *file, const struct timeval *times) | 
|  | Change the last modification and access time of a file.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_symlink (sftp_session sftp, const char *target, const char *dest) | 
|  | Create a symbolic link.  More... 
 | 
|  | 
| LIBSSH_API char * | sftp_readlink (sftp_session sftp, const char *path) | 
|  | Read the value of a symbolic link.  More... 
 | 
|  | 
| LIBSSH_API sftp_statvfs_t | sftp_statvfs (sftp_session sftp, const char *path) | 
|  | Get information about a mounted file system.  More... 
 | 
|  | 
| LIBSSH_API sftp_statvfs_t | sftp_fstatvfs (sftp_file file) | 
|  | Get information about a mounted file system.  More... 
 | 
|  | 
| LIBSSH_API void | sftp_statvfs_free (sftp_statvfs_t statvfs_o) | 
|  | Free the memory of an allocated statvfs.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_fsync (sftp_file file) | 
|  | Synchronize a file's in-core state with storage device.  More... 
 | 
|  | 
| LIBSSH_API char * | sftp_canonicalize_path (sftp_session sftp, const char *path) | 
|  | Canonicalize a sftp path.  More... 
 | 
|  | 
| LIBSSH_API int | sftp_server_version (sftp_session sftp) | 
|  | Get the version of the SFTP protocol supported by the server.  More... 
 | 
|  | 
| sftp_packet | sftp_packet_read (sftp_session sftp) | 
|  | 
| int | sftp_packet_write (sftp_session sftp, uint8_t type, ssh_buffer payload) | 
|  | 
| void | sftp_packet_free (sftp_packet packet) | 
|  | 
| int | buffer_add_attributes (ssh_buffer buffer, sftp_attributes attr) | 
|  | 
| sftp_attributes | sftp_parse_attr (sftp_session session, ssh_buffer buf, int expectname) | 
|  | 
| LIBSSH_API sftp_client_message | sftp_get_client_message (sftp_session sftp) | 
|  | 
| LIBSSH_API void | sftp_client_message_free (sftp_client_message msg) | 
|  | 
| LIBSSH_API uint8_t | sftp_client_message_get_type (sftp_client_message msg) | 
|  | 
| LIBSSH_API const char * | sftp_client_message_get_filename (sftp_client_message msg) | 
|  | 
| LIBSSH_API void | sftp_client_message_set_filename (sftp_client_message msg, const char *newname) | 
|  | 
| LIBSSH_API const char * | sftp_client_message_get_data (sftp_client_message msg) | 
|  | 
| LIBSSH_API uint32_t | sftp_client_message_get_flags (sftp_client_message msg) | 
|  | 
| LIBSSH_API const char * | sftp_client_message_get_submessage (sftp_client_message msg) | 
|  | 
| LIBSSH_API int | sftp_send_client_message (sftp_session sftp, sftp_client_message msg) | 
|  | 
| LIBSSH_API int | sftp_reply_name (sftp_client_message msg, const char *name, sftp_attributes attr) | 
|  | 
| LIBSSH_API int | sftp_reply_handle (sftp_client_message msg, ssh_string handle) | 
|  | 
| LIBSSH_API ssh_string | sftp_handle_alloc (sftp_session sftp, void *info) | 
|  | 
| LIBSSH_API int | sftp_reply_attr (sftp_client_message msg, sftp_attributes attr) | 
|  | 
| LIBSSH_API void * | sftp_handle (sftp_session sftp, ssh_string handle) | 
|  | 
| LIBSSH_API int | sftp_reply_status (sftp_client_message msg, uint32_t status, const char *message) | 
|  | 
| LIBSSH_API int | sftp_reply_names_add (sftp_client_message msg, const char *file, const char *longname, sftp_attributes attr) | 
|  | 
| LIBSSH_API int | sftp_reply_names (sftp_client_message msg) | 
|  | 
| LIBSSH_API int | sftp_reply_data (sftp_client_message msg, const void *data, int len) | 
|  | 
| LIBSSH_API void | sftp_handle_remove (sftp_session sftp, void *handle) | 
|  | 
SFTP handling functions. 
SFTP commands are channeled by the ssh sftp subsystem. Every packet is sent/read using a sftp_packet type structure. Related to these packets, most of the server answers are messages having an ID and a message specific part. It is described by sftp_message when reading a message, the sftp system puts it into the queue, so the process having asked for it can fetch it, while continuing to read for other messages (it is unspecified in which order messages may be sent back to the client