src/server/util/io.h

changeset 14
b8bf95b39952
parent 9
30e51941a673
child 32
ebba53de8b18
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/server/util/io.h	Sat Jan 14 13:53:44 2012 +0100
@@ -0,0 +1,98 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2011 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef IOSTREAM_H
+#define	IOSTREAM_H
+
+#include "../public/nsapi.h"
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+typedef struct io_stream IOStream;
+
+typedef ssize_t(*io_write_f)(IOStream *, void *, size_t);
+typedef ssize_t(*io_read_f)(IOStream *, void *, size_t);
+
+struct io_stream {
+    io_write_f write;
+    io_read_f  read;
+};
+
+typedef struct SystemIOStream {
+    IOStream st;
+    int      fd;
+} SystemIOStream;
+
+typedef struct NetIOStream {
+    IOStream st;
+    int      fd;
+    size_t   max_read;
+    size_t   rd;
+} NetIOStream;
+
+
+/* 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);
+
+
+/* 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(int fd);
+
+ssize_t system_write(IOStream *st, void *buf, size_t nbytes);
+ssize_t system_read(IOStream *st, void *buf, size_t nbytes);
+
+/* net stream */
+IOStream* net_stream_from_fd(int fd);
+
+ssize_t net_stream_write(IOStream *st, void *buf, size_t nbytes);
+ssize_t net_stream_read(IOStream *st, void *buf, size_t nbytes);
+
+/* 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	__cplusplus
+}
+#endif
+
+#endif	/* IOSTREAM_H */
+

mercurial