|
|
- From 19e810405789a35b92026b56ea49d01a3f544b07 Mon Sep 17 00:00:00 2001
- From: Pierre-Hugues Husson <phh@phh.me>
- Date: Tue, 17 Jan 2017 23:09:24 +0100
- Subject: [PATCH] Get compatible with potential irssi abi 8, and drop polling
-
- ---
- core/Makefile | 1 -
- core/quassel-net.c | 64 ++++++++++++++++++++++++++++++++++++++--------
- 2 files changed, 53 insertions(+), 10 deletions(-)
-
- --- a/core/Makefile
- +++ b/core/Makefile
- @@ -16,7 +16,6 @@ SSL_CFLAGS=$(shell pkg-config --cflags o
- SSL_LDLAGS=$(shell pkg-config --libs openssl)
- OBJECTS:=quasselc-connector.o quassel-core.o
- OBJECTS+=quassel-net.o quassel-msgs.o quassel-cmds.o
- -OBJECTS+=irssi/network-openssl.o
- OBJECTS+=quassel-fe-window.o quassel-fe-level.o quassel-cfg.o
-
- LDFLAGS ?=
- --- a/core/quassel-net.c
- +++ b/core/quassel-net.c
- @@ -132,10 +132,10 @@ static SERVER_REC* quassel_server_init_c
- ret->got = 0;
- server_connect_ref(SERVER_CONNECT(conn));
-
- - if(conn->use_ssl) {
- + if(conn->use_tls) {
- ret->ssl = 1;
- }
- - ret->connrec->use_ssl = 0;
- + ret->connrec->use_tls = 0;
-
- ret->channels_join = quassel_irssi_channels_join;
- ret->send_message = quassel_irssi_send_message;
- @@ -161,12 +161,59 @@ void quassel_net_init(CHAT_PROTOCOL_REC*
- signal_add_first("server connected", (SIGNAL_FUNC) sig_connected);
- }
-
- -GIOChannel *irssi_ssl_get_iochannel(GIOChannel *handle, int port, SERVER_REC *server);
- +static void quassel_net_final_setup(SERVER_REC* server, GIOChannel *handle) {
- + quassel_login(handle, server->connrec->nick, server->connrec->password);
- + server->handle->handle = handle;
- +
- + server->readtag =
- + g_input_add(handle,
- + G_INPUT_READ,
- + (GInputFunction) quassel_parse_incoming, server);
- +}
- +
- +static void quassel_net_ssl_callback(SERVER_REC *server, GIOChannel *handle) {
- + int error;
- +
- + g_return_if_fail(IS_SERVER(server));
- +
- + error = irssi_ssl_handshake(handle);
- + if (error == -1) {
- + server->connection_lost = TRUE;
- + server_connect_failed(server, NULL);
- + return;
- + }
- + if (error & 1) {
- + if (server->connect_tag != -1)
- + g_source_remove(server->connect_tag);
- + server->connect_tag = g_input_add(handle, error == 1 ? G_INPUT_READ : G_INPUT_WRITE,
- + (GInputFunction)
- + quassel_net_ssl_callback,
- + server);
- + return;
- + }
- +
- + if (server->connect_tag != -1) {
- + g_source_remove(server->connect_tag);
- + server->connect_tag = -1;
- + }
- +
- + quassel_net_final_setup(server, handle);
- +}
- +
- void quassel_irssi_init_ack(void *arg) {
- Quassel_SERVER_REC *server = (Quassel_SERVER_REC*)arg;
- - if(!server->ssl)
- - goto login;
- - GIOChannel* ssl_handle = irssi_ssl_get_iochannel(server->handle->handle, 1337, SERVER(server));
- + GIOChannel* ssl_handle = net_start_ssl((SERVER_REC*)server);
- +
- + if(server->readtag != -1) {
- + g_source_remove(server->readtag);
- + server->readtag = -1;
- + }
- +
- + if(!server->ssl) {
- + quassel_net_final_setup((SERVER_REC*)server, server->handle->handle);
- + return;
- + }
- +
- int error;
- //That's polling, and that's really bad...
- while( (error=irssi_ssl_handshake(ssl_handle)) & 1) {
- @@ -175,10 +222,7 @@ void quassel_irssi_init_ack(void *arg) {
- return;
- }
- }
- - server->handle->handle = ssl_handle;
- -
- -login:
- - quassel_login(server->handle->handle, server->connrec->nick, server->connrec->password);
- + quassel_net_ssl_callback((SERVER_REC*)server, ssl_handle);
- }
-
- void quassel_irssi_init_nack(void *arg) {
|