1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-02 03:52:49 -05:00

First phase of SFTP re-engineering. Each base-level fxp_* function

has been split into a send half and a receive half, so that callers
can set several requests in motion at a time and deal with the
responses in whatever order they arrive.

[originally from svn r3318]
This commit is contained in:
Simon Tatham
2003-06-29 14:26:09 +00:00
parent 61648131fb
commit 3e44064f32
4 changed files with 594 additions and 303 deletions

62
sftp.h
View File

@ -92,6 +92,9 @@ struct fxp_names {
struct fxp_name *names;
};
struct sftp_request;
struct sftp_packet;
const char *fxp_error(void);
int fxp_error_type(void);
@ -104,71 +107,87 @@ int fxp_init(void);
* Canonify a pathname. Concatenate the two given path elements
* with a separating slash, unless the second is NULL.
*/
char *fxp_realpath(char *path);
struct sftp_request *fxp_realpath_send(char *path);
char *fxp_realpath_recv(struct sftp_packet *pktin);
/*
* Open a file.
*/
struct fxp_handle *fxp_open(char *path, int type);
struct sftp_request *fxp_open_send(char *path, int type);
struct fxp_handle *fxp_open_recv(struct sftp_packet *pktin);
/*
* Open a directory.
*/
struct fxp_handle *fxp_opendir(char *path);
struct sftp_request *fxp_opendir_send(char *path);
struct fxp_handle *fxp_opendir_recv(struct sftp_packet *pktin);
/*
* Close a file/dir.
*/
void fxp_close(struct fxp_handle *handle);
struct sftp_request *fxp_close_send(struct fxp_handle *handle);
void fxp_close_recv(struct sftp_packet *pktin);
/*
* Make a directory.
*/
int fxp_mkdir(char *path);
struct sftp_request *fxp_mkdir_send(char *path);
int fxp_mkdir_recv(struct sftp_packet *pktin);
/*
* Remove a directory.
*/
int fxp_rmdir(char *path);
struct sftp_request *fxp_rmdir_send(char *path);
int fxp_rmdir_recv(struct sftp_packet *pktin);
/*
* Remove a file.
*/
int fxp_remove(char *fname);
struct sftp_request *fxp_remove_send(char *fname);
int fxp_remove_recv(struct sftp_packet *pktin);
/*
* Rename a file.
*/
int fxp_rename(char *srcfname, char *dstfname);
struct sftp_request *fxp_rename_send(char *srcfname, char *dstfname);
int fxp_rename_recv(struct sftp_packet *pktin);
/*
* Return file attributes.
*/
int fxp_stat(char *fname, struct fxp_attrs *attrs);
int fxp_fstat(struct fxp_handle *handle, struct fxp_attrs *attrs);
struct sftp_request *fxp_stat_send(char *fname);
int fxp_stat_recv(struct sftp_packet *pktin, struct fxp_attrs *attrs);
struct sftp_request *fxp_fstat_send(struct fxp_handle *handle);
int fxp_fstat_recv(struct sftp_packet *pktin, struct fxp_attrs *attrs);
/*
* Set file attributes.
*/
int fxp_setstat(char *fname, struct fxp_attrs attrs);
int fxp_fsetstat(struct fxp_handle *handle, struct fxp_attrs attrs);
struct sftp_request *fxp_setstat_send(char *fname, struct fxp_attrs attrs);
int fxp_setstat_recv(struct sftp_packet *pktin);
struct sftp_request *fxp_fsetstat_send(struct fxp_handle *handle,
struct fxp_attrs attrs);
int fxp_fsetstat_recv(struct sftp_packet *pktin);
/*
* Read from a file.
*/
int fxp_read(struct fxp_handle *handle, char *buffer, uint64 offset,
int len);
struct sftp_request *fxp_read_send(struct fxp_handle *handle,
uint64 offset, int len);
int fxp_read_recv(struct sftp_packet *pktin, char *buffer, int len);
/*
* Write to a file. Returns 0 on error, 1 on OK.
*/
int fxp_write(struct fxp_handle *handle, char *buffer, uint64 offset,
int len);
struct sftp_request *fxp_write_send(struct fxp_handle *handle,
char *buffer, uint64 offset, int len);
int fxp_write_recv(struct sftp_packet *pktin);
/*
* Read from a directory.
*/
struct fxp_names *fxp_readdir(struct fxp_handle *handle);
struct sftp_request *fxp_readdir_send(struct fxp_handle *handle);
struct fxp_names *fxp_readdir_recv(struct sftp_packet *pktin);
/*
* Free up an fxp_names structure.
@ -180,3 +199,12 @@ void fxp_free_names(struct fxp_names *names);
*/
struct fxp_name *fxp_dup_name(struct fxp_name *name);
void fxp_free_name(struct fxp_name *name);
/*
* These functions might well be temporary placeholders to be
* replaced with more useful similar functions later. They form the
* main dispatch loop for processing incoming SFTP responses.
*/
void sftp_register(struct sftp_request *req);
struct sftp_request *sftp_find_request(struct sftp_packet *pktin);
struct sftp_packet *sftp_recv(void);