mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 03:52:49 -05:00
First cut at speeding up SFTP. Generic download-management code in
sftp.c, and psftp.c now uses that instead of going it alone. Should in principle be easily installed in PSCP as well, but I haven't done it yet; also it only handles downloads, not uploads, and finally it doesn't yet properly calculate the correct number of parallel requests to queue. Still, it's a start, and in my own tests it seemed to perform as expected (download speed suddenly became roughly what you'd expect from the available bandwidth, and decreased by roughly the expected number of round-trip times). [originally from svn r3468]
This commit is contained in:
22
sftp.h
22
sftp.h
@ -206,6 +206,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);
|
||||
|
||||
/*
|
||||
* Store user data in an sftp_request structure.
|
||||
*/
|
||||
void *fxp_get_userdata(struct sftp_request *req);
|
||||
void fxp_set_userdata(struct sftp_request *req, void *data);
|
||||
|
||||
/*
|
||||
* These functions might well be temporary placeholders to be
|
||||
* replaced with more useful similar functions later. They form the
|
||||
@ -214,3 +220,19 @@ void fxp_free_name(struct fxp_name *name);
|
||||
void sftp_register(struct sftp_request *req);
|
||||
struct sftp_request *sftp_find_request(struct sftp_packet *pktin);
|
||||
struct sftp_packet *sftp_recv(void);
|
||||
|
||||
/*
|
||||
* A wrapper to go round fxp_read_* and fxp_write_*, which manages
|
||||
* the queueing of multiple read/write requests.
|
||||
*/
|
||||
|
||||
struct fxp_xfer;
|
||||
|
||||
struct fxp_xfer *xfer_download_init(struct fxp_handle *fh, uint64 offset);
|
||||
int xfer_download_done(struct fxp_xfer *xfer);
|
||||
void xfer_download_queue(struct fxp_xfer *xfer);
|
||||
int xfer_download_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin);
|
||||
int xfer_download_data(struct fxp_xfer *xfer, void **buf, int *len);
|
||||
|
||||
void xfer_set_error(struct fxp_xfer *xfer);
|
||||
void xfer_cleanup(struct fxp_xfer *xfer);
|
||||
|
Reference in New Issue
Block a user