src/server/util/io.h

changeset 684
48da20bde908
parent 683
db37761a8494
equal deleted inserted replaced
683:db37761a8494 684:48da20bde908
68 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); 68 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *);
69 typedef void(*io_close_f)(IOStream *); 69 typedef void(*io_close_f)(IOStream *);
70 typedef void(*io_finish_f)(IOStream *); 70 typedef void(*io_finish_f)(IOStream *);
71 typedef void(*io_setmode_f)(IOStream *, int); 71 typedef void(*io_setmode_f)(IOStream *, int);
72 typedef int(*io_poll_f)(IOStream *, EventHandler *, int, Event *); 72 typedef int(*io_poll_f)(IOStream *, EventHandler *, int, Event *);
73 typedef void (*io_free_f)(IOStream *);
73 74
74 struct IOStream { 75 struct IOStream {
75 io_write_f write; 76 io_write_f write;
76 io_writev_f writev; 77 io_writev_f writev;
77 io_read_f read; 78 io_read_f read;
78 io_sendfile_f sendfile; 79 io_sendfile_f sendfile;
79 io_close_f close; 80 io_close_f close;
80 io_finish_f finish; 81 io_finish_f finish;
81 io_setmode_f setmode; 82 io_setmode_f setmode;
82 io_poll_f poll; 83 io_poll_f poll;
84 io_free_f free;
83 int io_errno; 85 int io_errno;
84 unsigned int type; 86 unsigned int type;
85 }; 87 };
86 88
87 struct Sysstream { 89 struct Sysstream {
88 IOStream st; 90 IOStream st;
91 pool_handle_t *pool;
89 #ifdef XP_UNIX 92 #ifdef XP_UNIX
90 int fd; 93 int fd;
91 #elif defined(XP_WIN32) 94 #elif defined(XP_WIN32)
92 SOCKET fd; 95 SOCKET fd;
93 #endif 96 #endif
95 98
96 #define HTTP_STREAM_CBUF_SIZE 16 99 #define HTTP_STREAM_CBUF_SIZE 16
97 struct HttpStream { 100 struct HttpStream {
98 IOStream st; 101 IOStream st;
99 IOStream *fd; 102 IOStream *fd;
103 pool_handle_t *pool;
100 104
101 uint64_t written; 105 uint64_t written;
102 /* 106 /*
103 * content-length or current chunk size 107 * content-length or current chunk size
104 */ 108 */
179 }; 183 };
180 184
181 typedef struct SSLStream { 185 typedef struct SSLStream {
182 IOStream st; 186 IOStream st;
183 SSL *ssl; 187 SSL *ssl;
188 pool_handle_t *pool;
184 int error; 189 int error;
185 } SSLStream; 190 } SSLStream;
186 191
187 void io_set_max_writes(int n); 192 void io_set_max_writes(int n);
188 193
189 /* system stream */ 194 /* system stream */
190 IOStream* Sysstream_new(pool_handle_t *pool, SYS_SOCKET fd); 195 IOStream* Sysstream_new(pool_handle_t *pool, SYS_SOCKET fd);
196 void sysstream_free(IOStream *st);
191 197
192 ssize_t net_sys_write(Sysstream *st, const void *buf, size_t nbytes); 198 ssize_t net_sys_write(Sysstream *st, const void *buf, size_t nbytes);
193 ssize_t net_sys_writev(Sysstream *st, struct iovec *iovec, int iovcnt); 199 ssize_t net_sys_writev(Sysstream *st, struct iovec *iovec, int iovcnt);
194 ssize_t net_sys_read(Sysstream *st, void *buf, size_t nbytes); 200 ssize_t net_sys_read(Sysstream *st, void *buf, size_t nbytes);
195 ssize_t net_sys_sendfile(Sysstream *st, sendfiledata *sfd); 201 ssize_t net_sys_sendfile(Sysstream *st, sendfiledata *sfd);
197 void net_sys_setmode(Sysstream *st, int mode); 203 void net_sys_setmode(Sysstream *st, int mode);
198 int net_sys_poll(Sysstream *st, EventHandler *ev, int events, Event *cb); 204 int net_sys_poll(Sysstream *st, EventHandler *ev, int events, Event *cb);
199 205
200 /* http stream */ 206 /* http stream */
201 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd); 207 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd);
208 void httpstream_free(IOStream *st);
202 209
203 int httpstream_enable_chunked_read(IOStream *st, char *buffer, size_t bufsize, int *cursize, int *pos); 210 int httpstream_enable_chunked_read(IOStream *st, char *buffer, size_t bufsize, int *cursize, int *pos);
204 int httpstream_enable_buffered_read(IOStream *st, char *buffer, size_t bufsize, int *cursize, int *pos); 211 int httpstream_enable_buffered_read(IOStream *st, char *buffer, size_t bufsize, int *cursize, int *pos);
205 int httpstream_enable_chunked_write(IOStream *st); 212 int httpstream_enable_chunked_write(IOStream *st);
206 int httpstream_set_max_read(IOStream *st, int64_t maxread); 213 int httpstream_set_max_read(IOStream *st, int64_t maxread);
220 227
221 int http_stream_parse_chunk_header(char *str, int len, WSBool first, int64_t *chunklen); 228 int http_stream_parse_chunk_header(char *str, int len, WSBool first, int64_t *chunklen);
222 229
223 /* ssl stream */ 230 /* ssl stream */
224 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); 231 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl);
232 void sslstream_free(IOStream *st);
225 233
226 ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes); 234 ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes);
227 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); 235 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt);
228 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); 236 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes);
229 void net_ssl_close(SSLStream *st); 237 void net_ssl_close(SSLStream *st);

mercurial