112 lines
2 KiB
C
112 lines
2 KiB
C
/*
|
|
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 <stdarg.h>
|
|
#if defined(ENABLE_SSL) || defined(ENABLE_TLS)
|
|
#include <openssl/ssl.h>
|
|
#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
|