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 3117e345..3e836952 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -521,6 +521,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 4dce3fcf..30edb841 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -402,10 +402,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)