46 #define SYS_SOCKET int |
46 #define SYS_SOCKET int |
47 #elif defined(XP_WIN32) |
47 #elif defined(XP_WIN32) |
48 #define SYS_SOCKET SOCKET |
48 #define SYS_SOCKET SOCKET |
49 #endif |
49 #endif |
50 |
50 |
|
51 #define IO_MODE_BLOCKING 0 |
|
52 #define IO_MODE_NONBLOCKING 1 |
|
53 |
|
54 #define IO_POLL_NONE 0 |
|
55 #define IO_POLL_IN 1 |
|
56 #define IO_POLL_OUT 2 |
|
57 |
51 typedef struct IOStream IOStream; |
58 typedef struct IOStream IOStream; |
52 typedef struct SysStream SysStream; |
59 typedef struct SysStream SysStream; |
53 typedef struct HttpStream HttpStream; |
60 typedef struct HttpStream HttpStream; |
54 |
61 |
55 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); |
62 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); |
56 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); |
63 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); |
57 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t); |
64 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t); |
58 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); |
65 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); |
59 typedef void(*io_close_f)(IOStream *); |
66 typedef void(*io_close_f)(IOStream *); |
60 typedef void(*io_finish_f)(IOStream *); |
67 typedef void(*io_finish_f)(IOStream *); |
|
68 typedef void(*io_setmode_f)(IOStream *, int); |
|
69 typedef int(*io_poll_f)(IOStream *, EventHandler *, int, Event *); |
61 |
70 |
62 struct IOStream { |
71 struct IOStream { |
63 io_write_f write; |
72 io_write_f write; |
64 io_writev_f writev; |
73 io_writev_f writev; |
65 io_read_f read; |
74 io_read_f read; |
66 io_sendfile_f sendfile; |
75 io_sendfile_f sendfile; |
67 io_close_f close; |
76 io_close_f close; |
68 io_finish_f finish; |
77 io_finish_f finish; |
|
78 io_setmode_f setmode; |
|
79 io_poll_f poll; |
|
80 int io_errno; |
69 }; |
81 }; |
70 |
82 |
71 struct SysStream { |
83 struct SysStream { |
72 IOStream st; |
84 IOStream st; |
73 #ifdef XP_UNIX |
85 #ifdef XP_UNIX |
100 ssize_t net_sys_write(SysStream *st, void *buf, size_t nbytes); |
112 ssize_t net_sys_write(SysStream *st, void *buf, size_t nbytes); |
101 ssize_t net_sys_writev(SysStream *st, struct iovec *iovec, int iovcnt); |
113 ssize_t net_sys_writev(SysStream *st, struct iovec *iovec, int iovcnt); |
102 ssize_t net_sys_read(SysStream *st, void *buf, size_t nbytes); |
114 ssize_t net_sys_read(SysStream *st, void *buf, size_t nbytes); |
103 ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd); |
115 ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd); |
104 void net_sys_close(SysStream *st); |
116 void net_sys_close(SysStream *st); |
|
117 void net_sys_setmode(SysStream *st, int mode); |
|
118 int net_sys_poll(SysStream *st, EventHandler *ev, int events, Event *cb); |
105 |
119 |
106 /* http stream */ |
120 /* http stream */ |
107 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd); |
121 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd); |
108 |
122 |
109 ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes); |
123 ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes); |
110 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); |
124 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); |
111 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); |
125 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); |
112 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); |
126 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); |
113 void net_http_close(HttpStream *st); |
127 void net_http_close(HttpStream *st); |
114 void net_http_finish(HttpStream *st); |
128 void net_http_finish(HttpStream *st); |
|
129 void net_http_setmode(HttpStream *st, int mode); |
|
130 int net_http_poll(HttpStream *st, EventHandler *ev, int events, Event *cb); |
115 |
131 |
116 /* ssl stream */ |
132 /* ssl stream */ |
117 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); |
133 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); |
118 |
134 |
119 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); |
135 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); |
120 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); |
136 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); |
121 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); |
137 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); |
122 void net_ssl_close(SSLStream *st); |
138 void net_ssl_close(SSLStream *st); |
123 void net_ssl_finish(SSLStream *st); |
139 void net_ssl_finish(SSLStream *st); |
|
140 void net_ssl_setmode(SSLStream *st, int mode); |
|
141 int net_ssl_poll(SSLStream *st, EventHandler *ev, int events, Event *cb); |
124 |
142 |
125 /* net_ functions */ |
143 /* net_ functions */ |
126 ssize_t net_fallback_sendfile(IOStream *fd, sendfiledata *sfd); |
144 ssize_t net_fallback_sendfile(IOStream *fd, sendfiledata *sfd); |
127 void net_finish(SYS_NETFD fd); |
145 void net_finish(SYS_NETFD fd); |
128 |
146 |