| 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 |
| 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); |