#include <stdint.h>
#include <fcntl.h>
+#ifndef _WIN32
+#define netread(fd, ptr, len) read(fd, ptr, len)
+#define netwrite(fd, ptr, len) write(fd, ptr, len)
+#define netclose(fd) close(fd)
+#else
+#include <winsock2.h>
+#define netread(fd, ptr, len) recv(fd, ptr, len, 0)
+#define netwrite(fd, ptr, len) send(fd, ptr, len, 0)
+#define netclose(fd) closesocket(fd)
+#endif
+
// FIXME: currently I/O is unbuffered
#define KNF_TYPE_LOCAL 1
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;
+ char *response, *retr, *size_cmd;
int64_t seek_offset; // for lazy seek
+ int64_t file_size;
// the following are for HTTP only
- char *path;
+ char *path, *http_host;
} knetFile;
#define knet_tell(fp) ((fp)->offset)
extern "C" {
#endif
+#ifdef _WIN32
+ int knet_win32_init();
+ void knet_win32_destroy();
+#endif
+
knetFile *knet_open(const char *fn, const char *mode);
/*
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);
+ off_t knet_seek(knetFile *fp, int64_t off, int whence);
int knet_close(knetFile *fp);
#ifdef __cplusplus