typedef struct knetFile_s {
int type, fd;
int64_t offset;
- char *host;
+ char *host, *port;
// the following are for FTP only
int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready;
char *response, *retr;
int64_t seek_offset; // for lazy seek
+
+ // the following are for HTTP only
+ char *path, *http_host;
} knetFile;
#define knet_tell(fp) ((fp)->offset)
#endif
knetFile *knet_open(const char *fn, const char *mode);
+
+ /*
+ This only works with local files.
+ */
knetFile *knet_dopen(int fd, const char *mode);
+
+ /*
+ If ->is_ready==0, this routine updates ->fd; otherwise, it simply
+ reads from ->fd.
+ */
off_t knet_read(knetFile *fp, void *buf, off_t len);
+
+ /*
+ This routine only sets ->offset and ->is_ready=0. It does not
+ communicate with the FTP server.
+ */
int knet_seek(knetFile *fp, off_t off, int whence);
int knet_close(knetFile *fp);