diff --git a/src/core/server-rec.h b/src/core/server-rec.h index 69e990c6..481d07be 100644 --- a/src/core/server-rec.h +++ b/src/core/server-rec.h @@ -71,5 +71,6 @@ QUERY_REC *(*query_find_func)(SERVER_REC *server, const char *nick); int (*mask_match_func)(const char *mask, const char *data); /* returns true if `msg' was meant for `nick' */ int (*nick_match_msg)(const char *nick, const char *msg); +void (*send_data_func)(SERVER_REC *server, const char *data, int len); #undef STRUCT_SERVER_CONNECT_REC diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index baf8a0d2..4c374083 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -484,6 +484,11 @@ void irc_server_send_away(IRC_SERVER_REC *server, const char *reason) void irc_server_send_data(IRC_SERVER_REC *server, const char *data, int len) { + if (server->send_data_func != NULL) { + server->send_data_func(server, data, len); + return; + } + if (net_sendbuffer_send(server->handle, data, len) == -1) { /* something bad happened */ server->connection_lost = TRUE; diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index 509418b7..eecf0405 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -398,10 +398,11 @@ static void irc_init_server(IRC_SERVER_REC *server) if (!IS_IRC_SERVER(server)) return; - server->readtag = - g_input_add(net_sendbuffer_handle(server->handle), - G_INPUT_READ, - (GInputFunction) irc_parse_incoming, server); + if (server->handle) + server->readtag = + g_input_add(net_sendbuffer_handle(server->handle), + G_INPUT_READ, + (GInputFunction) irc_parse_incoming, server); } void irc_irc_init(void)