modified: makefile
[GalaxyCodeBases.git] / BGI / SOAPdenovo2 / standardPregraph / inc / knetfile.h
blobef705274308cc45820cca3e35b87952d309a4325
1 #ifndef KNETFILE_H
2 #define KNETFILE_H
4 #include <stdint.h>
5 #include <fcntl.h>
7 #ifndef _WIN32
8 #define netread(fd, ptr, len) read(fd, ptr, len)
9 #define netwrite(fd, ptr, len) write(fd, ptr, len)
10 #define netclose(fd) close(fd)
11 #else
12 #include <winsock2.h>
13 #define netread(fd, ptr, len) recv(fd, ptr, len, 0)
14 #define netwrite(fd, ptr, len) send(fd, ptr, len, 0)
15 #define netclose(fd) closesocket(fd)
16 #endif
18 // FIXME: currently I/O is unbuffered
20 #define KNF_TYPE_LOCAL 1
21 #define KNF_TYPE_FTP 2
22 #define KNF_TYPE_HTTP 3
24 typedef struct knetFile_s
26 int type, fd;
27 int64_t offset;
28 char * host, *port;
30 // the following are for FTP only
31 int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready;
32 char * response, *retr, *size_cmd;
33 int64_t seek_offset; // for lazy seek
34 int64_t file_size;
36 // the following are for HTTP only
37 char * path, *http_host;
38 } knetFile;
40 #define knet_tell(fp) ((fp)->offset)
41 #define knet_fileno(fp) ((fp)->fd)
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
47 #ifdef _WIN32
48 int knet_win32_init();
49 void knet_win32_destroy();
50 #endif
52 knetFile * knet_open ( const char * fn, const char * mode );
55 This only works with local files.
57 knetFile * knet_dopen ( int fd, const char * mode );
60 If ->is_ready==0, this routine updates ->fd; otherwise, it simply
61 reads from ->fd.
63 off_t knet_read ( knetFile * fp, void * buf, off_t len );
66 This routine only sets ->offset and ->is_ready=0. It does not
67 communicate with the FTP server.
69 off_t knet_seek ( knetFile * fp, int64_t off, int whence );
70 int knet_close ( knetFile * fp );
72 #ifdef __cplusplus
74 #endif
76 #endif