#ifndef FTP_H_
#define FTP_H_
+#include <stdio.h>
+
enum {FTP_DIR, FTP_FILE}; /* ftp_dirent type */
enum {
+ FTP_TYPE,
FTP_PWD,
FTP_CHDIR,
FTP_CDUP,
FTP_DEL,
FTP_LIST,
FTP_RETR,
- FTP_STORE
+ FTP_STORE,
+ FTP_XFER
};
enum {
struct ftp_op {
int op;
char *arg;
+ void *data;
struct ftp_op *next;
};
int modified;
};
+struct ftp_transfer {
+ int op;
+ char *rname;
+ FILE *fp; /* option: file */
+ char *mem; /* option: darray */
+ long total, count;
+
+ void (*done)(struct ftp*, struct ftp_transfer*);
+};
+
struct ftp *ftp_alloc(void);
void ftp_free(struct ftp *ftp);
int ftp_handle(struct ftp *ftp, int s);
int ftp_queue(struct ftp *ftp, int op, const char *arg);
+int ftp_queue_transfer(struct ftp *ftp, struct ftp_transfer *xfer);
int ftp_waitresp(struct ftp *ftp, long timeout);
int ftp_update(struct ftp *ftp);
+int ftp_type(struct ftp *ftp, const char *type);
int ftp_pwd(struct ftp *ftp);
int ftp_chdir(struct ftp *ftp, const char *dirname);
int ftp_mkdir(struct ftp *ftp, const char *dirname);
int ftp_list(struct ftp *ftp);
int ftp_retrieve(struct ftp *ftp, const char *fname);
int ftp_store(struct ftp *ftp, const char *fname);
+int ftp_transfer(struct ftp *ftp, struct ftp_transfer *xfer);
const char *ftp_curdir(struct ftp *ftp);
int ftp_num_dirent(struct ftp *ftp);