/* LICENSE: WTFPL Simple library for working with ipv4 irc servers Dont support: ddc ipv6 */ #ifndef _IRCC_H #define _IRCC_H #define IRCC_PING_TIMEOUT 600 #define IRCC_VERSION "2.1.0" #include #if defined(ENABLE_SSL) || defined(ENABLE_TLS) #include #endif enum { IRCC_ALLOC = -3, IRCC_DISCONNECTED, IRCC_ERROR, IRCC_CONNECTED, IRCC_SUCCESS, IRCC_NICK, IRCC_PRIVMSG, IRCC_JOIN, IRCC_QUIT, IRCC_PING, IRCC_TOPIC, IRCC_MODE }; #ifndef IRCC_FMT #define IRCC_FMT enum { IRCC_FMT_SEND, IRCC_FMT_TOPIC, IRCC_FMT_USER, IRCC_FMT_NICK, IRCC_FMT_PASS, IRCC_FMT_JOIN, IRCC_FMT_JOIN_PASS, _IRCC_FMT_MAX }; static const char *IRCC_FMTS[] = { "PRIVMSG %s :%s\r\n", "TOPIC %s :%s\r\n", "USER %s %s %s %s\r\n", "NICK %s\r\n", "PASS %s\r\n", "JOIN %s\r\n", "JOIN %s :%s\r\n", }; #define IRCC_GET_CMD(n) ((n >= _IRCC_FMT_MAX) ? "error" : IRCC_FMTS[n]) #endif #ifndef IRCC_ERR_STR #define IRCC_ERR_STR static const char *IRCC_ERROR_MSGS[] = { "IRCC_ALLOC", "IRCC_DISCONNECTED", "IRCC_ERROR", }; #define IRCC_GET_ERROR(n) ((n >= sizeof(IRCC_ERROR_MSGS) / sizeof(char *)) ? "error" : IRCC_ERROR_MSGS[n + 3]) #endif #ifndef IRCC_CLIENT #define IRCC_CLIENT typedef struct { int irc_connected; int irc_socket; int irc_alloc; char *irc_raw; /* RONLY */ char *irc_msg; char *irc_channel; char *irc_nick; #if defined(ENABLE_SSL) || defined(ENABLE_TLS) /* RONLY */ int irc_usingssl; SSL_METHOD *irc_sslmethod; SSL_CTX *irc_sslctx; SSL *irc_ssl; #endif } IRCC_client; #endif int IRCC_connect(IRCC_client *irc, const char *ip, const int port); int IRCC_recv(IRCC_client *irc); int IRCC_parse(IRCC_client *irc); int IRCC_send(IRCC_client *irc, const char *fmt, ...); int IRCC_initssl(IRCC_client *irc); void IRCC_close(IRCC_client *irc); /* Raw data operations. Uses tls when possible */ int IRCC_usend(IRCC_client *irc, const char *msg, const size_t size); int IRCC_urecv(IRCC_client *irc, char **buf, const size_t size); #endif