--- a/src/server/util/io.h Sat Oct 31 20:10:21 2015 +0100 +++ b/src/server/util/io.h Tue Nov 10 21:11:06 2015 +0100 @@ -30,14 +30,21 @@ #define IOSTREAM_H #include <openssl/ssl.h> +#include "../public/nsapi.h" +#include "systems.h" -#include "../public/nsapi.h" +#ifdef _WIN32 +#include <windows.h> +#include <winsock2.h> +#endif #ifdef __cplusplus extern "C" { #endif -typedef struct io_stream IOStream; +typedef struct IOStream IOStream; +typedef struct SysStream SysStream; +typedef struct HttpStream HttpStream; typedef ssize_t(*io_write_f)(IOStream *, void *, size_t); typedef ssize_t(*io_writev_f)(IOStream *, struct iovec *, int); @@ -46,7 +53,7 @@ typedef void(*io_close_f)(IOStream *); typedef void(*io_finish_f)(IOStream *); -struct io_stream { +struct IOStream { io_write_f write; io_writev_f writev; io_read_f read; @@ -55,19 +62,23 @@ io_finish_f finish; }; -typedef struct SystemIOStream { - IOStream st; - int fd; -} SystemIOStream; - -typedef struct NetIOStream { +struct SysStream { IOStream st; +#ifdef XP_UNIX int fd; - size_t max_read; - size_t read; - int chunked_enc; - int buffered; -} NetIOStream; +#elif defined(XP_WIN32) + SOCKET socket; +#endif +}; + +struct HttpStream { + IOStream st; + IOStream *fd; + uint64_t max_read; + uint64_t read; + WSBool chunked_enc; + WSBool buffered; +}; typedef struct SSLStream { IOStream st; @@ -75,42 +86,28 @@ } SSLStream; -/* net_ functions */ -ssize_t net_read(SYS_NETFD fd, void *buf, size_t nbytes); -ssize_t net_write(SYS_NETFD fd, void *buf, size_t nbytes); -ssize_t net_printf(SYS_NETFD fd, char *format, ...); -ssize_t net_sendfile(SYS_NETFD fd, sendfiledata *sfd); -void net_close(SYS_NETFD fd); -void net_finish(SYS_NETFD fd); - -/* iovec buffer */ -typedef struct iovec_buf{ - struct iovec *iov; - int iovctn; - int maxiovec; - pool_handle_t *pool; -} iovec_buf_t; - /* system stream */ -IOStream* stream_new_from_fd(pool_handle_t *pool, int fd); +IOStream* sysstream_new(pool_handle_t *pool, int fd); -ssize_t system_write(IOStream *st, void *buf, size_t nbytes); -ssize_t system_writev(IOStream *st, struct iovec *iovec, int iovcnt); -ssize_t system_read(IOStream *st, void *buf, size_t nbytes); +ssize_t net_sys_write(SysStream *st, void *buf, size_t nbytes); +ssize_t net_sys_writev(SysStream *st, struct iovec *iovec, int iovcnt); +ssize_t net_sys_read(SysStream *st, void *buf, size_t nbytes); +ssize_t net_sys_sendfile(SysStream *st, sendfiledata *sfd); +void net_sys_close(SysStream *st); -/* net stream */ -IOStream* net_stream_from_fd(pool_handle_t *pool, int fd); +/* http stream */ +IOStream* httpstream_new(pool_handle_t *pool, IOStream *fd); -ssize_t net_stream_write(NetIOStream *st, void *buf, size_t nbytes); -ssize_t net_stream_writev(NetIOStream *st, struct iovec *iovec, int iovcnt); -ssize_t net_stream_read(NetIOStream *st, void *buf, size_t nbytes); -ssize_t net_stream_sendfile(NetIOStream *st, sendfiledata *sfd); -void net_stream_close(NetIOStream *st); -void net_stream_finish(NetIOStream *st); +ssize_t net_http_write(HttpStream *st, void *buf, size_t nbytes); +ssize_t net_http_writev(HttpStream *st, struct iovec *iovec, int iovcnt); +ssize_t net_http_read(HttpStream *st, void *buf, size_t nbytes); +ssize_t net_http_sendfile(HttpStream *st, sendfiledata *sfd); +void net_http_close(HttpStream *st); +void net_http_finish(HttpStream *st); /* ssl stream */ -IOStream* net_ssl_stream(pool_handle_t *pool, SSL *ssl); +IOStream* sslstream_new(pool_handle_t *pool, SSL *ssl); ssize_t net_ssl_write(SSLStream *st, void *buf, size_t nbytes); ssize_t net_ssl_writev(SSLStream *st, struct iovec *iovec, int iovcnt); @@ -118,19 +115,9 @@ void net_ssl_close(SSLStream *st); void net_ssl_finish(SSLStream *st); -/* iovec buffer */ -iovec_buf_t *iovec_buf_create(pool_handle_t *pool); -void iovec_buf_write(iovec_buf_t *io, void *buf, size_t nbyte); -ssize_t iovec_buf_flush(iovec_buf_t *io, int fd); - - - -#ifdef __SunOS_5_10 - -int vasprintf(char **str, const char *format, va_list ap); -int asprintf(char **str, const char *format, ...); - -#endif +/* net_ functions */ +ssize_t net_copy_file(IOStream *fd, sendfiledata *sfd); +void net_finish(SYS_NETFD fd); #ifdef __cplusplus }