Upload files to "C"

This commit is contained in:
8nl 2025-06-06 08:41:36 +00:00
parent 8d36d6a974
commit ee7b7cd779
2 changed files with 61 additions and 55 deletions

88
C/irc.c
View file

@ -10,24 +10,24 @@
#include "irc.h" #include "irc.h"
int IRCC_urecv(IRCC_client *irc) { int IRCC_urecv(IRCC_client *irc) {
#ifdef ENABLE_SSL #if defined(ENABLE_SSL) || defined(ENABLE_TLS)
if (irc->irc_usingssl) if (irc->irc_usingssl)
return SSL_read(irc->irc_ssl, irc->irc_raw, sizeof(irc->irc_raw)); return SSL_read(irc->irc_ssl, irc->irc_raw, sizeof(irc->irc_raw));
#endif #endif
return recv(irc->irc_socket, irc->irc_raw, sizeof(irc->irc_raw), 0); return recv(irc->irc_socket, irc->irc_raw, sizeof(irc->irc_raw), 0);
} }
int IRCC_usend(IRCC_client *irc, const char *msg, off_t bytes) { int IRCC_usend(IRCC_client *irc, const char *msg, const int bytes) {
#ifdef ENABLE_SSL #if defined(ENABLE_SSL) || defined(ENABLE_TLS)
if (irc->irc_usingssl) if (irc->irc_usingssl)
return SSL_write(irc->irc_ssl, msg, bytes); return SSL_write(irc->irc_ssl, msg, bytes);
#endif #endif
return send(irc->irc_socket, msg, bytes, 0); return send(irc->irc_socket, msg, bytes, 0);
} }
int IRCC_connect(IRCC_client *irc, const char *ip, const unsigned int port) { int IRCC_connect(IRCC_client *irc, const char *ip, const int port) {
struct hostent *hp = gethostbyname(ip); struct hostent *hp = gethostbyname(ip);
if (!hp) if (!hp)
return IRCC_ERROR; return IRCC_ERROR;
@ -145,7 +145,7 @@ int IRCC_parse(IRCC_client *irc) {
} }
int IRCC_register(IRCC_client *irc, const char *nickname) { int IRCC_register(IRCC_client *irc, const char *nickname) {
off_t bytes = snprintf(irc->irc_raw, sizeof(irc->irc_raw), "NICK %s\r\n", nickname); int bytes = snprintf(irc->irc_raw, sizeof(irc->irc_raw), "NICK %s\r\n", nickname);
if (IRCC_usend(irc, irc->irc_raw, bytes) == -1) if (IRCC_usend(irc, irc->irc_raw, bytes) == -1)
return IRCC_ERROR; return IRCC_ERROR;
@ -168,7 +168,7 @@ int IRCC_register(IRCC_client *irc, const char *nickname) {
} }
int IRCC_join(IRCC_client *irc, const char *channel, const char *key) { int IRCC_join(IRCC_client *irc, const char *channel, const char *key) {
off_t bytes = snprintf(irc->irc_raw, sizeof(irc->irc_raw), "JOIN %s %s\r\n", channel, (key) ? key : ""); ssize_t bytes = snprintf(irc->irc_raw, sizeof(irc->irc_raw), "JOIN %s %s\r\n", channel, (key) ? key : "");
if (IRCC_usend(irc, irc->irc_raw, bytes) == -1) if (IRCC_usend(irc, irc->irc_raw, bytes) == -1)
return IRCC_ERROR; return IRCC_ERROR;
@ -176,7 +176,7 @@ int IRCC_join(IRCC_client *irc, const char *channel, const char *key) {
} }
int IRCC_send(IRCC_client *irc, const char *channel, const char *msg) { int IRCC_send(IRCC_client *irc, const char *channel, const char *msg) {
off_t bytes = snprintf(irc->irc_raw, sizeof(irc->irc_raw), "PRIVMSG %s :%s\r\n", channel, msg); ssize_t bytes = snprintf(irc->irc_raw, sizeof(irc->irc_raw), "PRIVMSG %s :%s\r\n", channel, msg);
if (IRCC_usend(irc, irc->irc_raw, bytes) == -1) if (IRCC_usend(irc, irc->irc_raw, bytes) == -1)
return IRCC_ERROR; return IRCC_ERROR;
@ -185,33 +185,34 @@ int IRCC_send(IRCC_client *irc, const char *channel, const char *msg) {
} }
int IRCC_initssl(IRCC_client *irc) { int IRCC_initssl(IRCC_client *irc) {
#ifdef ENABLE_SSL #if defined(ENABLE_SSL) || defined(ENABLE_TLS)
irc->irc_ssl = NULL; irc->irc_ssl = NULL;
irc->irc_sslctx = NULL; irc->irc_sslctx = NULL;
irc->irc_sslmethod = NULL; irc->irc_sslmethod = NULL;
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
if (SSL_library_init() < 0) if (SSL_library_init() < 0)
return IRCC_ERROR; return IRCC_ERROR;
irc->irc_sslmethod = (SSL_METHOD *)SSLv23_client_method(); irc->irc_sslmethod = (SSL_METHOD *)SSLv23_client_method();
irc->irc_sslctx = SSL_CTX_new(irc->irc_sslmethod); irc->irc_sslctx = SSL_CTX_new(irc->irc_sslmethod);
if (irc->irc_sslctx == NULL) if (irc->irc_sslctx == NULL)
return IRCC_ERROR; return IRCC_ERROR;
SSL_CTX_set_options(irc->irc_sslctx, SSL_OP_NO_SSLv2); SSL_CTX_set_options(irc->irc_sslctx, SSL_OP_NO_SSLv2);
irc->irc_ssl = SSL_new(irc->irc_sslctx); irc->irc_ssl = SSL_new(irc->irc_sslctx);
SSL_set_fd(irc->irc_ssl, irc->irc_socket); SSL_set_fd(irc->irc_ssl, irc->irc_socket);
if (SSL_connect(irc->irc_ssl) != 1) if (SSL_connect(irc->irc_ssl) != 1)
return IRCC_ERROR; return IRCC_ERROR;
irc->irc_usingssl = 1; irc->irc_usingssl = 1;
#else #else
(void)irc; (void)irc;
#endif
#endif
return IRCC_SUCCESS; return IRCC_SUCCESS;
} }
@ -220,17 +221,16 @@ void IRCC_close(IRCC_client *irc) {
close(irc->irc_socket); close(irc->irc_socket);
irc->irc_msg = irc->irc_nick = irc->irc_channel = NULL; irc->irc_msg = irc->irc_nick = irc->irc_channel = NULL;
#ifdef ENABLE_SSL #if defined(ENABLE_SSL) || defined(ENABLE_TLS)
if (!irc->irc_usingssl) if (!irc->irc_usingssl)
return; return;
if (irc->irc_ssl != NULL) { if (irc->irc_ssl != NULL) {
SSL_shutdown(irc->irc_ssl); SSL_shutdown(irc->irc_ssl);
SSL_free(irc->irc_ssl); SSL_free(irc->irc_ssl);
} }
if (irc->irc_sslctx != NULL) if (irc->irc_sslctx != NULL)
SSL_CTX_free(irc->irc_sslctx); SSL_CTX_free(irc->irc_sslctx);
#endif #endif
} }

28
C/irc.h
View file

@ -12,9 +12,10 @@
#define IRCC_MSG_MAX 512 #define IRCC_MSG_MAX 512
#define IRCC_PING_TIMEOUT 600 #define IRCC_PING_TIMEOUT 600
#define IRCC_VERSION "2.0"
#ifdef ENABLE_SSL #if defined(ENABLE_SSL) || defined(ENABLE_TLS)
#include <openssl/ssl.h> #include <openssl/ssl.h>
#endif #endif
enum { enum {
@ -33,23 +34,28 @@ enum {
}; };
typedef struct { typedef struct {
/* RW */
int irc_socket; int irc_socket;
char irc_raw[IRCC_MSG_MAX + 1]; char irc_raw[IRCC_MSG_MAX + 1];
/* RONLY */
char *irc_msg; char *irc_msg;
char *irc_channel; char *irc_channel;
char *irc_nick; char *irc_nick;
#ifdef ENABLE_SSL #if defined(ENABLE_SSL) || defined(ENABLE_TLS)
int irc_usingssl; /* RONLY */
int irc_usingssl;
SSL_METHOD *irc_sslmethod;
SSL_CTX *irc_sslctx;
SSL *irc_ssl;
#endif
SSL_METHOD *irc_sslmethod;
SSL_CTX *irc_sslctx;
SSL *irc_ssl;
#endif
} IRCC_client; } IRCC_client;
int IRCC_connect(IRCC_client *irc, const char *ip, const unsigned int port); int IRCC_connect(IRCC_client *irc, const char *ip, const int port);
int IRCC_recv(IRCC_client *irc); int IRCC_recv(IRCC_client *irc);
int IRCC_parse(IRCC_client *irc); int IRCC_parse(IRCC_client *irc);
int IRCC_join(IRCC_client *irc, const char *channel, const char *key); int IRCC_join(IRCC_client *irc, const char *channel, const char *key);
@ -58,8 +64,8 @@ int IRCC_register(IRCC_client *irc, const char *nickname);
int IRCC_initssl(IRCC_client *irc); int IRCC_initssl(IRCC_client *irc);
void IRCC_close(IRCC_client *irc); void IRCC_close(IRCC_client *irc);
//u - mean universal. Functions uses internal fields in structure /* Raw data operations. Uses tls when possible */
int IRCC_usend(IRCC_client *irc, const char *msg, off_t bytes); int IRCC_usend(IRCC_client *irc, const char *msg, const int bytes);
int IRCC_urecv(IRCC_client *irc); int IRCC_urecv(IRCC_client *irc);
#endif #endif