Mercurial > repos > lsong10 > psiclass
comparison PsiCLASS-1.0.2/samtools-0.1.19/knetfile.h @ 0:903fc43d6227 draft default tip
Uploaded
author | lsong10 |
---|---|
date | Fri, 26 Mar 2021 16:52:45 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:903fc43d6227 |
---|---|
1 #ifndef KNETFILE_H | |
2 #define KNETFILE_H | |
3 | |
4 #include <stdint.h> | |
5 #include <fcntl.h> | |
6 | |
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 | |
17 | |
18 // FIXME: currently I/O is unbuffered | |
19 | |
20 #define KNF_TYPE_LOCAL 1 | |
21 #define KNF_TYPE_FTP 2 | |
22 #define KNF_TYPE_HTTP 3 | |
23 | |
24 typedef struct knetFile_s { | |
25 int type, fd; | |
26 int64_t offset; | |
27 char *host, *port; | |
28 | |
29 // the following are for FTP only | |
30 int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready; | |
31 char *response, *retr, *size_cmd; | |
32 int64_t seek_offset; // for lazy seek | |
33 int64_t file_size; | |
34 | |
35 // the following are for HTTP only | |
36 char *path, *http_host; | |
37 } knetFile; | |
38 | |
39 #define knet_tell(fp) ((fp)->offset) | |
40 #define knet_fileno(fp) ((fp)->fd) | |
41 | |
42 #ifdef __cplusplus | |
43 extern "C" { | |
44 #endif | |
45 | |
46 #ifdef _WIN32 | |
47 int knet_win32_init(); | |
48 void knet_win32_destroy(); | |
49 #endif | |
50 | |
51 knetFile *knet_open(const char *fn, const char *mode); | |
52 | |
53 /* | |
54 This only works with local files. | |
55 */ | |
56 knetFile *knet_dopen(int fd, const char *mode); | |
57 | |
58 /* | |
59 If ->is_ready==0, this routine updates ->fd; otherwise, it simply | |
60 reads from ->fd. | |
61 */ | |
62 off_t knet_read(knetFile *fp, void *buf, off_t len); | |
63 | |
64 /* | |
65 This routine only sets ->offset and ->is_ready=0. It does not | |
66 communicate with the FTP server. | |
67 */ | |
68 off_t knet_seek(knetFile *fp, int64_t off, int whence); | |
69 int knet_close(knetFile *fp); | |
70 | |
71 #ifdef __cplusplus | |
72 } | |
73 #endif | |
74 | |
75 #endif |