X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=knetfile.h;h=0a0e66f7a0aaeb65eac7068b687a5af945419e70;hb=3a1bd4d97b4d58148b5a7fd845a3b6a023eecbed;hp=cadc447726ecbec250f9d7465e36f2ea8ff4b42f;hpb=7d55edb8b7264c4e97a19cfd7eb88d129dc48713;p=samtools.git diff --git a/knetfile.h b/knetfile.h index cadc447..0a0e66f 100644 --- a/knetfile.h +++ b/knetfile.h @@ -4,6 +4,17 @@ #include #include +#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 +#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 @@ -13,22 +24,48 @@ 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; - char *response, *retr; + int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready; + char *response, *retr, *size_cmd; + int64_t seek_offset; // for lazy seek + int64_t file_size; + + // the following are for HTTP only + char *path, *http_host; } knetFile; #define knet_tell(fp) ((fp)->offset) +#define knet_fileno(fp) ((fp)->fd) #ifdef __cplusplus extern "C" { #endif +#ifdef _WIN32 + int knet_win32_init(); + void knet_win32_destroy(); +#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); - off_t knet_seek(knetFile *fp, off_t off, int whence); + + /* + This routine only sets ->offset and ->is_ready=0. It does not + communicate with the FTP server. + */ + off_t knet_seek(knetFile *fp, int64_t off, int whence); int knet_close(knetFile *fp); #ifdef __cplusplus