irclibs/C/irc.h
2024-02-21 20:11:23 +03:00

79 lines
1.5 KiB
C

/*
LICENSE: WTFPL
Simple library for working with ipv4 irc servers
Dont support:
ddc
ipv6
motd
*/
#ifndef _IRCC_H
#define _IRCC_H
#define IRCC_MSG_MAX 512
#define IRCC_PING_TIMEOUT 600
#ifdef ENABLE_SSL
#include <openssl/ssl.h>
#endif
enum {
IRCC_NICK = 1,
IRCC_PRIVMSG,
IRCC_JOIN,
IRCC_PART,
IRCC_PING,
IRCC_TOPIC,
IRCC_MODE,
IRCC_CONNECTED,
IRCC_DISCONNECTED,
IRCC_ERROR,
IRCC_SUCCESS
};
enum {
IRCC_SSL_INIT = 1,
IRCC_SSL_METHOD,
IRCC_SSL_SESSION
};
static const char *IRCC_errno[] = {
"",
"Could not initialize the SSL library",
"Unable to create a new SSL context struct",
"Could not build a SSL session"
};
typedef struct {
int irc_socket;
char irc_raw[IRCC_MSG_MAX + 1];
char *irc_msg;
char *irc_channel;
char *irc_nick;
#ifdef ENABLE_SSL
int irc_usingssl;
SSL_METHOD *irc_sslmethod;
SSL_CTX *irc_sslctx;
SSL *irc_ssl;
#endif
} IRCC_client;
int IRCC_connect(IRCC_client *irc, const char *ip, const unsigned int port);
int IRCC_recv(IRCC_client *irc);
int IRCC_parse(IRCC_client *irc);
int IRCC_join(IRCC_client *irc, const char *channel, const char *key);
int IRCC_send(IRCC_client *irc, const char *msg, const char *channel);
int IRCC_register(IRCC_client *irc, const char *nickname);
int IRCC_initssl(IRCC_client *irc, int *ircc_errno);
void IRCC_close(IRCC_client *irc);
//u - mean universal. Functions uses internal fields in structure
int IRCC_usend(IRCC_client *irc, off_t bytes);
int IRCC_urecv(IRCC_client *irc);
#endif