X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=sftp.h;h=d9fa6939293a07d94652cd11c1d246ab270e54f5;hb=51732faeb913527f3373e3c77bf66ca414e5bab6;hp=5f8b38b575bd8db18c011f011bb5f4063629d93f;hpb=bc83c59aa7678b5c0f3140798259d69d172c48ab;p=PuTTY.git diff --git a/sftp.h b/sftp.h index 5f8b38b5..d9fa6939 100644 --- a/sftp.h +++ b/sftp.h @@ -63,10 +63,19 @@ * until len is available, or it returns failure. * * Both functions return 1 on success, 0 on failure. + * + * sftp_sendbuffer returns the size of the backlog of data in the + * transmit queue. */ int sftp_senddata(char *data, int len); +int sftp_sendbuffer(void); int sftp_recvdata(char *data, int len); +/* + * Free sftp_requests + */ +void sftp_cleanup_request(void); + struct fxp_attrs { unsigned long flags; uint64 size; @@ -77,6 +86,19 @@ struct fxp_attrs { unsigned long mtime; }; +/* + * Copy between the possibly-unused permissions field in an fxp_attrs + * and a possibly-negative integer containing the same permissions. + */ +#define PUT_PERMISSIONS(attrs, perms) \ + ((perms) >= 0 ? \ + ((attrs).flags |= SSH_FILEXFER_ATTR_PERMISSIONS, \ + (attrs).permissions = (perms)) : \ + ((attrs).flags &= ~SSH_FILEXFER_ATTR_PERMISSIONS)) +#define GET_PERMISSIONS(attrs) \ + ((attrs).flags & SSH_FILEXFER_ATTR_PERMISSIONS ? \ + (attrs).permissions : -1) + struct fxp_handle { char *hstring; int hlen; @@ -107,57 +129,60 @@ int fxp_init(void); * Canonify a pathname. Concatenate the two given path elements * with a separating slash, unless the second is NULL. */ -struct sftp_request *fxp_realpath_send(char *path); +struct sftp_request *fxp_realpath_send(const char *path); char *fxp_realpath_recv(struct sftp_packet *pktin, struct sftp_request *req); /* - * Open a file. + * Open a file. 'attrs' contains attributes to be applied to the file + * if it's being created. */ -struct sftp_request *fxp_open_send(char *path, int type); +struct sftp_request *fxp_open_send(const char *path, int type, + struct fxp_attrs *attrs); struct fxp_handle *fxp_open_recv(struct sftp_packet *pktin, struct sftp_request *req); /* * Open a directory. */ -struct sftp_request *fxp_opendir_send(char *path); +struct sftp_request *fxp_opendir_send(const char *path); struct fxp_handle *fxp_opendir_recv(struct sftp_packet *pktin, struct sftp_request *req); /* - * Close a file/dir. + * Close a file/dir. Returns 1 on success, 0 on error. */ struct sftp_request *fxp_close_send(struct fxp_handle *handle); -void fxp_close_recv(struct sftp_packet *pktin, struct sftp_request *req); +int fxp_close_recv(struct sftp_packet *pktin, struct sftp_request *req); /* * Make a directory. */ -struct sftp_request *fxp_mkdir_send(char *path); +struct sftp_request *fxp_mkdir_send(const char *path); int fxp_mkdir_recv(struct sftp_packet *pktin, struct sftp_request *req); /* * Remove a directory. */ -struct sftp_request *fxp_rmdir_send(char *path); +struct sftp_request *fxp_rmdir_send(const char *path); int fxp_rmdir_recv(struct sftp_packet *pktin, struct sftp_request *req); /* * Remove a file. */ -struct sftp_request *fxp_remove_send(char *fname); +struct sftp_request *fxp_remove_send(const char *fname); int fxp_remove_recv(struct sftp_packet *pktin, struct sftp_request *req); /* * Rename a file. */ -struct sftp_request *fxp_rename_send(char *srcfname, char *dstfname); +struct sftp_request *fxp_rename_send(const char *srcfname, + const char *dstfname); int fxp_rename_recv(struct sftp_packet *pktin, struct sftp_request *req); /* * Return file attributes. */ -struct sftp_request *fxp_stat_send(char *fname); +struct sftp_request *fxp_stat_send(const char *fname); int fxp_stat_recv(struct sftp_packet *pktin, struct sftp_request *req, struct fxp_attrs *attrs); struct sftp_request *fxp_fstat_send(struct fxp_handle *handle); @@ -167,7 +192,8 @@ int fxp_fstat_recv(struct sftp_packet *pktin, struct sftp_request *req, /* * Set file attributes. */ -struct sftp_request *fxp_setstat_send(char *fname, struct fxp_attrs attrs); +struct sftp_request *fxp_setstat_send(const char *fname, + struct fxp_attrs attrs); int fxp_setstat_recv(struct sftp_packet *pktin, struct sftp_request *req); struct sftp_request *fxp_fsetstat_send(struct fxp_handle *handle, struct fxp_attrs attrs); @@ -229,10 +255,15 @@ struct sftp_packet *sftp_recv(void); 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); +struct fxp_xfer *xfer_upload_init(struct fxp_handle *fh, uint64 offset); +int xfer_upload_ready(struct fxp_xfer *xfer); +void xfer_upload_data(struct fxp_xfer *xfer, char *buffer, int len); +int xfer_upload_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin); + +int xfer_done(struct fxp_xfer *xfer); void xfer_set_error(struct fxp_xfer *xfer); void xfer_cleanup(struct fxp_xfer *xfer);