[IOMultiplexerV2] dev snapshot
[NextIRCd.git] / src / IOHandler.h
index 208b854b79e52567b22c786a6806eaca922098b4..3cba91d2b686f77773d22e39f5208879539b490d 100644 (file)
@@ -1,5 +1,5 @@
-/* IOHandler.h - IOMultiplexer
- * Copyright (C) 2012  Philipp Kreil (pk910)
+/* IOHandler.h - IOMultiplexer v2
+ * Copyright (C) 2014  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  */
 #ifndef _IOHandler_h
 #define _IOHandler_h
-#include <stddef.h>
-#include <sys/time.h> /* struct timeval */
+#ifdef _IOHandler_internals
 
-#define IO_READ_BUFLEN 1024
-#define IO_MAX_TIMEOUT 10
-#define IO_LINE_LEN    1024
-
-struct timeval;
-struct IODescriptor;
-struct IOEvent;
-struct IOSSLNode;
-
-enum IOLogType {
-    IOLOG_DEBUG,
-    IOLOG_WARNING,
-    IOLOG_ERROR,
-    IOLOG_FATAL
-};
-
-#define IOHANDLER_CALLBACK(NAME) void NAME(struct IOEvent *event)
-typedef IOHANDLER_CALLBACK(iohandler_callback);
-
-#define IOHANDLER_LOG_BACKEND(NAME) void NAME(enum IOLogType type, const char *line)
-typedef IOHANDLER_LOG_BACKEND(iohandler_log_callback);
-
-extern iohandler_log_callback *iolog_backend;
-
-enum IOType {
-    IOTYPE_UNKNOWN, /* ignore descriptor (uninitialized) */
-    IOTYPE_SERVER, /* server socket */
-    IOTYPE_CLIENT, /* client socket */
-    IOTYPE_STDIN, /* stdin */
-    IOTYPE_TIMER /* timer */
-};
-
-enum IOStatus { 
-    IO_CLOSED, /* descriptor is dead (socket waiting for removal or timer) */
-    IO_LISTENING, /* descriptor is waiting for connections (server socket) */
-    IO_CONNECTING, /* descriptor is waiting for connection approval (connecting client socket) */
-    IO_CONNECTED, /* descriptor is connected (connected client socket) */
-    IO_SSLWAIT /* waiting for SSL backend (e.g. handshake) */
-};
-
-enum IOEventType {
-    IOEVENT_IGNORE,
-    IOEVENT_READABLE, /* socket is readable - not read anything yet, could also be disconnect notification */
-    IOEVENT_RECV, /* client socket received something (recv_str valid) */
-    IOEVENT_CONNECTED, /* client socket connected successful */
-    IOEVENT_NOTCONNECTED, /* client socket could not connect (errid valid) */
-    IOEVENT_CLOSED, /* client socket lost connection (errid valid) */
-    IOEVENT_ACCEPT, /* server socket accepted new connection (accept_fd valid) */
-    IOEVENT_TIMEOUT, /* timer timed out */
-    IOEVENT_SSLFAILED /* failed to initialize SSL session */
-};
-
-struct IOBuffer {
-    char *buffer;
-    size_t bufpos, buflen;
-};
-
-struct IODescriptor {
-    int fd;
-    enum IOType type;
-    enum IOStatus state;
-    struct timeval timeout;
-    iohandler_callback *callback;
-    struct IOBuffer readbuf;
-    struct IOBuffer writebuf;
-    void *data;
-    int read_lines : 1;
-    int ssl : 1;
-    int ssl_active : 1;
-    int ssl_hs_read : 1;
-    int ssl_hs_write : 1;
-    struct IOSSLNode *sslnode;
-    
-    struct IODescriptor *next, *prev;
-};
-
-struct IOEvent {
-    enum IOEventType type;
-    struct IODescriptor *iofd;
-    union {
-        char *recv_str;
-        int accept_fd;
-        int errid;
-    } data;
-};
+#endif
 
-struct IODescriptor *iohandler_add(int sockfd, enum IOType type, struct timeval *timeout, iohandler_callback *callback);
-struct IODescriptor *iohandler_timer(struct timeval timeout, iohandler_callback *callback);
-struct IODescriptor *iohandler_connect(const char *hostname, unsigned int port, int ssl, const char *bind, iohandler_callback *callback);
-struct IODescriptor *iohandler_listen(const char *hostname, unsigned int port, iohandler_callback *callback);
-void iohandler_write(struct IODescriptor *iofd, const char *line);
-void iohandler_send(struct IODescriptor *iofd, const char *data, size_t datalen);
-void iohandler_printf(struct IODescriptor *iofd, const char *text, ...);
-void iohandler_close(struct IODescriptor *iofd);
-void iohandler_update(struct IODescriptor *iofd);
-void iohandler_set_timeout(struct IODescriptor *iofd, struct timeval *timeout);
+void iohandler_init();
+void iohandler_run();
+void iohandler_stop();
 
-void iohandler_poll();
+void iohandler_set_threads(int threads); /* default: 1 */
+void iohandler_set_gc(int enabled); /* default: enabled */
 
 #endif