diff options
Diffstat (limited to 'bitlbee.c')
-rw-r--r-- | bitlbee.c | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -29,6 +29,7 @@ #include "protocols/nogaim.h" #include "help.h" #include "ipc.h" +#include "lib/ssl_client.h" #include <signal.h> #include <stdio.h> #include <errno.h> @@ -175,6 +176,10 @@ int bitlbee_daemon_init() log_link(LOGLVL_WARNING, LOGOUTPUT_SYSLOG); } + if (global.conf->ssl) { + ssl_setup_server(); + } + return(0); } @@ -193,7 +198,11 @@ gboolean bitlbee_io_current_client_read(gpointer data, gint fd, b_input_conditio char line[513]; int st; - st = read(irc->fd, line, sizeof(line) - 1); + if (global.conf->ssl) { + st = ssl_server_read(irc, line, sizeof(line) - 1); + } else { + st = read(irc->fd, line, sizeof(line) - 1); + } if (st == 0) { irc_abort(irc, 1, "Connection reset by peer"); return FALSE; @@ -242,7 +251,11 @@ gboolean bitlbee_io_current_client_write(gpointer data, gint fd, b_input_conditi } size = strlen(irc->sendbuffer); - st = write(irc->fd, irc->sendbuffer, size); + if (global.conf->ssl) { + st = ssl_server_write(irc, irc->sendbuffer, size); + } else { + st = write(irc->fd, irc->sendbuffer, size); + } if (st == 0 || (st < 0 && !sockerr_again())) { irc_abort(irc, 1, "Write error: %s", strerror(errno)); @@ -322,6 +335,10 @@ static gboolean bitlbee_io_new_client(gpointer data, gint fd, b_input_condition /* Make the connection. */ irc = irc_new(new_socket); + if (global.conf->ssl) { + ssl_accept(irc); + } + /* We can store the IPC fd there now. */ global.listen_socket = fds[1]; global.listen_watch_source_id = b_input_add(fds[1], B_EV_IO_READ, ipc_child_read, irc); |