Mercurial > irccd
view lib/irccd/conn.h @ 1148:323d6d34ec1b
irccdctl: remove ketopt, closes #2530
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 04 Feb 2022 09:56:43 +0100 |
parents | f06e9761cc90 |
children | 1845a0509a93 |
line wrap: on
line source
/* * conn.h -- an IRC server channel * * Copyright (c) 2013-2022 David Demelier <markand@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef IRCCD_CONN_H #define IRCCD_CONN_H #include "config.h" #if defined(IRCCD_WITH_SSL) # include <openssl/ssl.h> #endif #include <time.h> #include "limits.h" #if defined(__cplusplus) extern "C" { #endif struct addrinfo; struct pollfd; struct irc_server; enum irc_conn_state { IRC_CONN_STATE_NONE, /* Nothing, default. */ IRC_CONN_STATE_CONNECTING, /* Pending connect(2) call. */ IRC_CONN_STATE_HANDSHAKING, /* SSL connect+handshake. */ IRC_CONN_STATE_READY /* Ready for I/O. */ }; enum irc_conn_flags { IRC_CONN_SSL = (1 << 0) }; #if defined(IRCCD_WITH_SSL) enum irc_conn_ssl_act { IRC_CONN_SSL_ACT_NONE, IRC_CONN_SSL_ACT_READ, IRC_CONN_SSL_ACT_WRITE, }; #endif struct irc_conn { char hostname[IRC_HOST_LEN]; unsigned short port; int fd; struct addrinfo *ai; struct addrinfo *aip; char in[IRC_BUF_LEN]; char out[IRC_BUF_LEN]; enum irc_conn_state state; enum irc_conn_flags flags; struct irc_server *sv; time_t statetime; #if defined(IRCCD_WITH_SSL) SSL_CTX *ctx; SSL *ssl; enum irc_conn_ssl_act ssl_cond; enum irc_conn_ssl_act ssl_step; #endif }; struct irc_conn_msg { char *prefix; char *cmd; char *args[IRC_ARGS_MAX]; char buf[IRC_MESSAGE_LEN]; }; int irc_conn_connect(struct irc_conn *); void irc_conn_disconnect(struct irc_conn *); void irc_conn_prepare(const struct irc_conn *, struct pollfd *); int irc_conn_flush(struct irc_conn *, const struct pollfd *); int irc_conn_poll(struct irc_conn *, struct irc_conn_msg *); int irc_conn_send(struct irc_conn *, const char *); void irc_conn_finish(struct irc_conn *); #if defined(__cplusplus) } #endif #endif /* !IRCCD_CONN_H */