X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;ds=sidebyside;f=src%2FClientSocket.c;h=6b32b17e33b2393f31ebcb9b2557bbffa28b4ae3;hb=003f6906aeb911cce26ee25b48a818d0d1c4aea5;hp=a46a4bf82d1bbc2e4d1b4ab8c64436c99e0a0f52;hpb=ce8592c1645f9657c5bc5fb2d0b2d6fca261b9e7;p=NeonServV5.git diff --git a/src/ClientSocket.c b/src/ClientSocket.c index a46a4bf..6b32b17 100644 --- a/src/ClientSocket.c +++ b/src/ClientSocket.c @@ -21,6 +21,7 @@ #include "IRCQueue.h" #include "WHOHandler.h" #include "HandleInfoHandler.h" +#include "ssl.h" struct socket_list { struct ClientSocket *data; @@ -110,6 +111,12 @@ int connect_socket(struct ClientSocket *client) { client->flags |= SOCKET_FLAG_CONNECTED | SOCKET_FLAG_RECONNECT; client->connection_time = time(0); + + if(client->flags & SOCKET_FLAG_SSL) { + ssl_connect(client); + } + + //send the IRC Headers char sendBuf[512]; int len; @@ -163,6 +170,10 @@ int connect_socket(struct ClientSocket *client) { client->flags |= SOCKET_FLAG_CONNECTED | SOCKET_FLAG_RECONNECT; client->connection_time = time(0); + if(client->flags & SOCKET_FLAG_SSL) { + ssl_connect(client); + } + //send the IRC Headers char sendBuf[512]; int len; @@ -185,6 +196,8 @@ int close_socket(struct ClientSocket *client) { if(client == NULL) return 0; if((client->flags & SOCKET_FLAG_CONNECTED)) close(client->sock); + if(client->flags & SOCKET_FLAG_SSL) + ssl_disconnect(client); struct ClientSocket *sock, *last_sock = NULL; for (sock = sockets->data; sock; sock = sock->next) { if(sock == client) { @@ -210,11 +223,13 @@ int close_socket(struct ClientSocket *client) { int write_socket_force(struct ClientSocket *client, char* msg, int len) { printf("[send %d] %s", len, msg); - #ifdef WIN32 - send(client->sock, msg, len, 0); - #else - write(client->sock, msg, len); - #endif + if(!(client->flags & SOCKET_FLAG_SSL) || ssl_write(client, msg, len) == -2) { + #ifdef WIN32 + send(client->sock, msg, len, 0); + #else + write(client->sock, msg, len); + #endif + } client->traffic_out += len; return 1; } @@ -248,11 +263,13 @@ void socket_loop(int timeout_seconds) { for (sock = sockets->data; sock; sock = sock->next) { if((sock->flags & SOCKET_FLAG_CONNECTED) && FD_ISSET(sock->sock, &fds)) { if(sock->bufferpos != 0) { - #ifdef WIN32 - bytes = recv(sock->sock, buffer, sizeof(buffer), 0); - #else - bytes = read(sock->sock, buffer, sizeof(buffer)); - #endif + if(!(sock->flags & SOCKET_FLAG_SSL) || (bytes = ssl_read(sock, buffer, sizeof(buffer))) == -2) { + #ifdef WIN32 + bytes = recv(sock->sock, buffer, sizeof(buffer), 0); + #else + bytes = read(sock->sock, buffer, sizeof(buffer)); + #endif + } if(bytes > 0) { for(i = 0; i < bytes; i++) { if(sock->bufferpos + i == BUF_SIZ*2) break; //buffer overflow @@ -261,11 +278,13 @@ void socket_loop(int timeout_seconds) { sock->bufferpos += i; } } else { - #ifdef WIN32 - bytes = recv(sock->sock, sock->buffer, sizeof(sock->buffer), 0); - #else - bytes = read(sock->sock, sock->buffer, sizeof(sock->buffer)); - #endif + if(!(sock->flags & SOCKET_FLAG_SSL) || (bytes = ssl_read(sock, buffer, sizeof(buffer))) == -2) { + #ifdef WIN32 + bytes = recv(sock->sock, sock->buffer, sizeof(sock->buffer), 0); + #else + bytes = read(sock->sock, sock->buffer, sizeof(sock->buffer)); + #endif + } if(bytes > 0) sock->bufferpos = bytes; } @@ -275,6 +294,9 @@ void socket_loop(int timeout_seconds) { bot_disconnect(sock); if(sock->queue) queue_destroy(sock); + close(sock->sock); + if(sock->flags & SOCKET_FLAG_SSL) + ssl_disconnect(sock); } else { sock->traffic_in += bytes; int used = parse_lines(sock, sock->buffer, sock->bufferpos); @@ -330,6 +352,8 @@ void free_sockets() { next = client->next; if((client->flags & SOCKET_FLAG_CONNECTED)) close(client->sock); + if(client->flags & SOCKET_FLAG_SSL) + ssl_disconnect(client); if(client->queue) queue_destroy(client); free(client->host);