src/server/util/io.h

changeset 110
43a746e905f6
parent 106
b122f34ddc80
child 112
b962d83124bc
equal deleted inserted replaced
109:8a0a7754f123 110:43a746e905f6
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

mercurial