src/server/util/io.h

changeset 498
0d80f8a2b29f
parent 430
83560f32e7d5
child 513
9a49c245a49c
equal deleted inserted replaced
497:8827517054ec 498:0d80f8a2b29f
57 57
58 typedef struct IOStream IOStream; 58 typedef struct IOStream IOStream;
59 typedef struct Sysstream Sysstream; 59 typedef struct Sysstream Sysstream;
60 typedef struct HttpStream HttpStream; 60 typedef struct HttpStream HttpStream;
61 61
62 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); 62 typedef ssize_t(*io_write_f)(IOStream *, const void *, size_t);
63 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); 63 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int);
64 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t); 64 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t);
65 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); 65 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *);
66 typedef void(*io_close_f)(IOStream *); 66 typedef void(*io_close_f)(IOStream *);
67 typedef void(*io_finish_f)(IOStream *); 67 typedef void(*io_finish_f)(IOStream *);
134 /* 134 /*
135 * chunked transfer encoding for write enabled? 135 * chunked transfer encoding for write enabled?
136 */ 136 */
137 WSBool chunked_enc; 137 WSBool chunked_enc;
138 /* 138 /*
139 * current chunk size (set after the header is sent)
140 */
141 size_t current_chunk_length;
142 /*
143 * current chunk position
144 */
145 size_t current_chunk_pos;
146 /*
147 * missing trailer before new data
148 * 0: no trailer
149 * 2: crlf
150 * 1: lf
151 */
152 int current_trailer;
153 /*
154 * write chunk header buffer
155 */
156 char write_chunk_buf[HTTP_STREAM_CBUF_SIZE];
157 /*
158 * chunk header buffer length
159 * only used when the chunk header was completely sent
160 * must be 0 before payload data is sent
161 */
162 int write_chunk_buf_len;
163 /*
164 * current write_chunk_buf position (if remaining != 0)
165 */
166 int write_chunk_buf_pos;
167 /*
139 * end of file indicator (read) 168 * end of file indicator (read)
140 */ 169 */
141 WSBool read_eof; 170 WSBool read_eof;
142 /* 171 /*
143 * end of file indicator (write) 172 * end of file indicator (write)
154 183
155 184
156 /* system stream */ 185 /* system stream */
157 IOStream* Sysstream_new(pool_handle_t *pool, SYS_SOCKET fd); 186 IOStream* Sysstream_new(pool_handle_t *pool, SYS_SOCKET fd);
158 187
159 ssize_t net_sys_write(Sysstream *st, void *buf, size_t nbytes); 188 ssize_t net_sys_write(Sysstream *st, const void *buf, size_t nbytes);
160 ssize_t net_sys_writev(Sysstream *st, struct iovec *iovec, int iovcnt); 189 ssize_t net_sys_writev(Sysstream *st, struct iovec *iovec, int iovcnt);
161 ssize_t net_sys_read(Sysstream *st, void *buf, size_t nbytes); 190 ssize_t net_sys_read(Sysstream *st, void *buf, size_t nbytes);
162 ssize_t net_sys_sendfile(Sysstream *st, sendfiledata *sfd); 191 ssize_t net_sys_sendfile(Sysstream *st, sendfiledata *sfd);
163 void net_sys_close(Sysstream *st); 192 void net_sys_close(Sysstream *st);
164 void net_sys_setmode(Sysstream *st, int mode); 193 void net_sys_setmode(Sysstream *st, int mode);
171 int httpstream_enable_chunked_write(IOStream *st); 200 int httpstream_enable_chunked_write(IOStream *st);
172 int httpstream_set_max_read(IOStream *st, int64_t maxread); 201 int httpstream_set_max_read(IOStream *st, int64_t maxread);
173 WSBool httpstream_eof(IOStream *st); 202 WSBool httpstream_eof(IOStream *st);
174 int64_t httpstream_written(IOStream *st); 203 int64_t httpstream_written(IOStream *st);
175 204
176 ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes); 205 ssize_t net_http_write(HttpStream *st, const void *buf, size_t nbytes);
177 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); 206 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt);
178 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); 207 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes);
179 ssize_t net_http_read_chunked(HttpStream *st, void *buf, size_t nbytes); 208 ssize_t net_http_read_chunked(HttpStream *st, void *buf, size_t nbytes);
180 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); 209 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd);
181 void net_http_close(HttpStream *st); 210 void net_http_close(HttpStream *st);
182 void net_http_finish(HttpStream *st); 211 void net_http_finish(HttpStream *st);
183 void net_http_setmode(HttpStream *st, int mode); 212 void net_http_setmode(HttpStream *st, int mode);
184 int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb); 213 int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb);
185 214
215 int http_stream_parse_chunk_header(char *str, int len, WSBool first, int64_t *chunklen);
216
186 /* ssl stream */ 217 /* ssl stream */
187 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); 218 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl);
188 219
189 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); 220 ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes);
190 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); 221 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt);
191 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); 222 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes);
192 void net_ssl_close(SSLStream *st); 223 void net_ssl_close(SSLStream *st);
193 void net_ssl_finish(SSLStream *st); 224 void net_ssl_finish(SSLStream *st);
194 void net_ssl_setmode(SSLStream *st, int mode); 225 void net_ssl_setmode(SSLStream *st, int mode);

mercurial