28 |
28 |
29 #ifndef IOSTREAM_H |
29 #ifndef IOSTREAM_H |
30 #define IOSTREAM_H |
30 #define IOSTREAM_H |
31 |
31 |
32 #include <openssl/ssl.h> |
32 #include <openssl/ssl.h> |
|
33 #include "../public/nsapi.h" |
|
34 #include "systems.h" |
33 |
35 |
34 #include "../public/nsapi.h" |
36 #ifdef _WIN32 |
|
37 #include <windows.h> |
|
38 #include <winsock2.h> |
|
39 #endif |
35 |
40 |
36 #ifdef __cplusplus |
41 #ifdef __cplusplus |
37 extern "C" { |
42 extern "C" { |
38 #endif |
43 #endif |
39 |
44 |
40 typedef struct io_stream IOStream; |
45 typedef struct IOStream IOStream; |
|
46 typedef struct SysStream SysStream; |
|
47 typedef struct HttpStream HttpStream; |
41 |
48 |
42 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); |
49 typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); |
43 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); |
50 typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); |
44 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t); |
51 typedef ssize_t(*io_read_f)(IOStream *, void *, size_t); |
45 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); |
52 typedef ssize_t(*io_sendfile_f)(IOStream *, sendfiledata *); |
46 typedef void(*io_close_f)(IOStream *); |
53 typedef void(*io_close_f)(IOStream *); |
47 typedef void(*io_finish_f)(IOStream *); |
54 typedef void(*io_finish_f)(IOStream *); |
48 |
55 |
49 struct io_stream { |
56 struct IOStream { |
50 io_write_f write; |
57 io_write_f write; |
51 io_writev_f writev; |
58 io_writev_f writev; |
52 io_read_f read; |
59 io_read_f read; |
53 io_sendfile_f sendfile; |
60 io_sendfile_f sendfile; |
54 io_close_f close; |
61 io_close_f close; |
55 io_finish_f finish; |
62 io_finish_f finish; |
56 }; |
63 }; |
57 |
64 |
58 typedef struct SystemIOStream { |
65 struct SysStream { |
59 IOStream st; |
66 IOStream st; |
|
67 #ifdef XP_UNIX |
60 int fd; |
68 int fd; |
61 } SystemIOStream; |
69 #elif defined(XP_WIN32) |
|
70 SOCKET socket; |
|
71 #endif |
|
72 }; |
62 |
73 |
63 typedef struct NetIOStream { |
74 struct HttpStream { |
64 IOStream st; |
75 IOStream st; |
65 int fd; |
76 IOStream *fd; |
66 size_t max_read; |
77 uint64_t max_read; |
67 size_t read; |
78 uint64_t read; |
68 int chunked_enc; |
79 WSBool chunked_enc; |
69 int buffered; |
80 WSBool buffered; |
70 } NetIOStream; |
81 }; |
71 |
82 |
72 typedef struct SSLStream { |
83 typedef struct SSLStream { |
73 IOStream st; |
84 IOStream st; |
74 SSL *ssl; |
85 SSL *ssl; |
75 } SSLStream; |
86 } SSLStream; |
76 |
87 |
77 |
88 |
78 /* net_ functions */ |
|
79 ssize_t net_read(SYS_NETFD fd, void *buf, size_t nbytes); |
|
80 ssize_t net_write(SYS_NETFD fd, void *buf, size_t nbytes); |
|
81 ssize_t net_printf(SYS_NETFD fd, char *format, ...); |
|
82 ssize_t net_sendfile(SYS_NETFD fd, sendfiledata *sfd); |
|
83 void net_close(SYS_NETFD fd); |
|
84 void net_finish(SYS_NETFD fd); |
|
85 |
|
86 /* iovec buffer */ |
|
87 typedef struct iovec_buf{ |
|
88 struct iovec *iov; |
|
89 int iovctn; |
|
90 int maxiovec; |
|
91 pool_handle_t *pool; |
|
92 } iovec_buf_t; |
|
93 |
|
94 |
89 |
95 /* system stream */ |
90 /* system stream */ |
96 IOStream* stream_new_from_fd(pool_handle_t *pool, int fd); |
91 IOStream* sysstream_new(pool_handle_t *pool, int fd); |
97 |
92 |
98 ssize_t system_write(IOStream *st, void *buf, size_t nbytes); |
93 ssize_t net_sys_write(SysStream *st, void *buf, size_t nbytes); |
99 ssize_t system_writev(IOStream *st, struct iovec *iovec, int iovcnt); |
94 ssize_t net_sys_writev(SysStream *st, struct iovec *iovec, int iovcnt); |
100 ssize_t system_read(IOStream *st, void *buf, size_t nbytes); |
95 ssize_t net_sys_read(SysStream *st, void *buf, size_t nbytes); |
|
96 ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd); |
|
97 void net_sys_close(SysStream *st); |
101 |
98 |
102 /* net stream */ |
99 /* http stream */ |
103 IOStream* net_stream_from_fd(pool_handle_t *pool, int fd); |
100 IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd); |
104 |
101 |
105 ssize_t net_stream_write(NetIOStream *st, void *buf, size_t nbytes); |
102 ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes); |
106 ssize_t net_stream_writev(NetIOStream *st, struct iovec *iovec, int iovcnt); |
103 ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); |
107 ssize_t net_stream_read(NetIOStream *st, void *buf, size_t nbytes); |
104 ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); |
108 ssize_t net_stream_sendfile(NetIOStream *st, sendfiledata *sfd); |
105 ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); |
109 void net_stream_close(NetIOStream *st); |
106 void net_http_close(HttpStream *st); |
110 void net_stream_finish(NetIOStream *st); |
107 void net_http_finish(HttpStream *st); |
111 |
108 |
112 /* ssl stream */ |
109 /* ssl stream */ |
113 IOStream* net_ssl_stream(pool_handle_t *pool, SSL *ssl); |
110 IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); |
114 |
111 |
115 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); |
112 ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); |
116 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); |
113 ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); |
117 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); |
114 ssize_t net_ssl_read(SSLStream *st, void *buf, size_t nbytes); |
118 void net_ssl_close(SSLStream *st); |
115 void net_ssl_close(SSLStream *st); |
119 void net_ssl_finish(SSLStream *st); |
116 void net_ssl_finish(SSLStream *st); |
120 |
117 |
121 /* iovec buffer */ |
118 /* net_ functions */ |
122 iovec_buf_t *iovec_buf_create(pool_handle_t *pool); |
119 ssize_t net_copy_file(IOStream *fd, sendfiledata *sfd); |
123 void iovec_buf_write(iovec_buf_t *io, void *buf, size_t nbyte); |
120 void net_finish(SYS_NETFD fd); |
124 ssize_t iovec_buf_flush(iovec_buf_t *io, int fd); |
|
125 |
|
126 |
|
127 |
|
128 #ifdef __SunOS_5_10 |
|
129 |
|
130 int vasprintf(char **str, const char *format, va_list ap); |
|
131 int asprintf(char **str, const char *format, ...); |
|
132 |
|
133 #endif |
|
134 |
121 |
135 #ifdef __cplusplus |
122 #ifdef __cplusplus |
136 } |
123 } |
137 #endif |
124 #endif |
138 |
125 |