X-Git-Url: http://git.pk910.de/?p=ChatPrototype.git;a=blobdiff_plain;f=src%2FIOHandler.h;fp=src%2FIOHandler.h;h=0000000000000000000000000000000000000000;hp=eb32cdc71ab345ca8961e4e411b72acfa8064cef;hb=b7b97486eb000081305e86486197351682386c06;hpb=5ad65e65d2234b02151ea7ca17e3fa9893a9b165 diff --git a/src/IOHandler.h b/src/IOHandler.h deleted file mode 100644 index eb32cdc..0000000 --- a/src/IOHandler.h +++ /dev/null @@ -1,141 +0,0 @@ -/* IOHandler.h - IOMultiplexer - * Copyright (C) 2012 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 - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef _IOHandler_h -#define _IOHandler_h -#include -#include /* struct timeval */ - -#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_SSLACCEPT, /* SSL server socket accepted new connection (accept_iofd 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; - int constant_timeout; - iohandler_callback *callback; - struct IOBuffer readbuf; - struct IOBuffer writebuf; - void *data; - int read_lines : 1; - int ssl : 1; - int ssl_server_hs : 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; - struct IODescriptor *accept_iofd; - } data; -}; - -#define IOHANDLER_LISTEN_IPV4 0x01 -#define IOHANDLER_LISTEN_IPV6 0x02 /* overrides IOHANDLER_LISTEN_IPV4 */ - -#define IOHANDLER_CONNECT_IPV4 0x01 -#define IOHANDLER_CONNECT_IPV6 0x02 /* overrides IOHANDLER_CONNECT_IPV4 */ - -#define IOHANDLER_SETTING_HIGH_PRECISION_TIMER 0x01 - -void iohandler_set(int setting, int value); - -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_constant_timer(int msec, iohandler_callback *callback); -struct IODescriptor *iohandler_connect(const char *hostname, unsigned int port, int ssl, const char *bind, iohandler_callback *callback); -struct IODescriptor *iohandler_connect_flags(const char *hostname, unsigned int port, int ssl, const char *bindhost, iohandler_callback *callback, int flags); -struct IODescriptor *iohandler_listen(const char *hostname, unsigned int port, iohandler_callback *callback); -struct IODescriptor *iohandler_listen_flags(const char *hostname, unsigned int port, iohandler_callback *callback, int flags); -struct IODescriptor *iohandler_listen_ssl(const char *hostname, unsigned int port, const char *certfile, const char *keyfile, iohandler_callback *callback); -struct IODescriptor *iohandler_listen_ssl_flags(const char *hostname, unsigned int port, const char *certfile, const char *keyfile, iohandler_callback *callback, int flags); -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_poll(); -void iohandler_poll_timeout(struct timeval timeout); - -#endif