diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c index 312497ea..6761b169 100644 --- a/src/irc/core/irc-commands.c +++ b/src/irc/core/irc-commands.c @@ -458,43 +458,59 @@ static void cmd_whois(const char *data, IRC_SERVER_REC *server, cmd_params_free(free_arg); } -static void event_whois(IRC_SERVER_REC *server, const char *data, +static void event_whois(SERVER_REC *server, const char *data, const char *nick, const char *addr) { - server->whois_found = TRUE; - signal_emit__event_("311", (SERVER_REC *)server, data, nick, addr); + IRC_SERVER_REC *irc_server; + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + irc_server->whois_found = TRUE; + signal_emit__event_("311", server, data, nick, addr); } -static void sig_whois_try_whowas(IRC_SERVER_REC *server, const char *data) +static void sig_whois_try_whowas(SERVER_REC *server, const char *data, const char *u0, const char *u1) { + IRC_SERVER_REC *irc_server; char *params, *nick; g_return_if_fail(data != NULL); params = event_get_params(data, 2, NULL, &nick); - server->whowas_found = FALSE; - server_redirect_event(server, "whowas", 1, nick, -1, NULL, + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + irc_server->whowas_found = FALSE; + server_redirect_event(irc_server, "whowas", 1, nick, -1, NULL, "event 314", "whowas event", "event 369", "whowas event end", "event 406", "event empty", NULL); - irc_send_cmdv(server, "WHOWAS %s 1", nick); + irc_send_cmdv(irc_server, "WHOWAS %s 1", nick); g_free(params); } -static void event_end_of_whois(IRC_SERVER_REC *server, const char *data, +static void event_end_of_whois(SERVER_REC *server, const char *data, const char *nick, const char *addr) { - signal_emit__event_("318", (SERVER_REC *)server, data, nick, addr); - server->whois_found = FALSE; + IRC_SERVER_REC *irc_server; + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + signal_emit__event_("318", server, data, nick, addr); + irc_server->whois_found = FALSE; } -static void event_whowas(IRC_SERVER_REC *server, const char *data, +static void event_whowas(SERVER_REC *server, const char *data, const char *nick, const char *addr) { - server->whowas_found = TRUE; - signal_emit__event_("314", (SERVER_REC *)server, data, nick, addr); + IRC_SERVER_REC *irc_server; + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + irc_server->whowas_found = TRUE; + signal_emit__event_("314", server, data, nick, addr); } /* SYNTAX: WHOWAS [ [ [server]]] */ @@ -876,19 +892,20 @@ static void sig_server_disconnected(SERVER_REC *server) } /* destroy all knockouts in channel */ -static void sig_channel_destroyed(IRC_CHANNEL_REC *channel) +static void sig_channel_destroyed(CHANNEL_REC *channel) { + IRC_CHANNEL_REC *irc_channel; GSList *tmp, *next; - if (!IS_IRC_CHANNEL(channel) || !IS_IRC_SERVER(channel->server)) + if ((irc_channel = IRC_CHANNEL(channel)) == NULL) return; - for (tmp = channel->server->knockoutlist; tmp != NULL; tmp = next) { + for (tmp = irc_channel->server->knockoutlist; tmp != NULL; tmp = next) { KNOCKOUT_REC *rec = tmp->data; next = tmp->next; - if (rec->channel == channel) - knockout_destroy(channel->server, rec); + if (rec->channel == irc_channel) + knockout_destroy(irc_channel->server, rec); } } diff --git a/src/irc/core/irc-expandos.c b/src/irc/core/irc-expandos.c index 29afc89d..37cca527 100644 --- a/src/irc/core/irc-expandos.c +++ b/src/irc/core/irc-expandos.c @@ -22,6 +22,7 @@ #include "misc.h" #include "expandos.h" #include "settings.h" +#include "signal-registry.h" #include "irc-servers.h" #include "irc-channels.h" @@ -141,12 +142,16 @@ static char *expando_cumode_space(SERVER_REC *server, void *item, int *free_ret) return *ret == '\0' ? " " : ret; } -static void event_join(IRC_SERVER_REC *server, const char *data, +static void event_join(SERVER_REC *server, const char *data, const char *nick, const char *address) { + IRC_SERVER_REC *irc_server; g_return_if_fail(nick != NULL); - if (g_ascii_strcasecmp(nick, server->nick) != 0) { + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + if (g_ascii_strcasecmp(nick, irc_server->nick) != 0) { g_free_not_null(last_join); last_join = g_strdup(nick); } diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 496b0e80..c476c38c 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -20,6 +20,7 @@ #include "module.h" #include "signals.h" +#include "core/signal-registry.h" #include "signal-registry.h" #include "misc.h" @@ -76,8 +77,9 @@ int irc_nickcmp_ascii(const char *m, const char *n) return *m == *n ? 0 : 1; } -static void event_names_list(IRC_SERVER_REC *server, const char *data) +static void event_names_list(SERVER_REC *server, const char *data, const char *u0, const char *u1) { + IRC_SERVER_REC *irc_server; IRC_CHANNEL_REC *chanrec; NICK_REC *rec; char *params, *type, *channel, *names, *ptr, *host; @@ -87,15 +89,18 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) g_return_if_fail(data != NULL); + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + params = event_get_params(data, 4, NULL, &type, &channel, &names); - chanrec = irc_channel_find(server, channel); + chanrec = irc_channel_find(irc_server, channel); if (chanrec == NULL || chanrec->names_got) { /* unknown channel / names list already read */ g_free(params); return; } - nick_flags = server->get_nick_flags(SERVER(server)); + nick_flags = irc_server->get_nick_flags(SERVER(server)); nick_flag_op = strchr(nick_flags, '@'); /* type = '=' = public, '*' = private, '@' = secret. @@ -126,7 +131,7 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) found. */ op = halfop = voice = FALSE; prefixes[0] = '\0'; - while (isnickflag(server, *ptr)) { + while (isnickflag(irc_server, *ptr)) { prefix_add(prefixes, *ptr, (SERVER_REC *) server); switch (*ptr) { case '@': @@ -166,8 +171,9 @@ static void event_names_list(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_end_of_names(IRC_SERVER_REC *server, const char *data) +static void event_end_of_names(SERVER_REC *server, const char *data, const char *u0, const char *u1) { + IRC_SERVER_REC *irc_server; char *params, *channel; IRC_CHANNEL_REC *chanrec; NICK_REC *ownnick; @@ -175,16 +181,19 @@ static void event_end_of_names(IRC_SERVER_REC *server, const char *data) g_return_if_fail(server != NULL); + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + params = event_get_params(data, 2, NULL, &channel); - chanrec = irc_channel_find(server, channel); + chanrec = irc_channel_find(irc_server, channel); if (chanrec != NULL && !chanrec->names_got) { - ownnick = nicklist_find(CHANNEL(chanrec), server->nick); + ownnick = nicklist_find(CHANNEL(chanrec), irc_server->nick); if (ownnick == NULL) { /* stupid server - assume we have ops if channel is empty */ nicks = g_hash_table_size(chanrec->nicks); - ownnick = irc_nicklist_insert(chanrec, server->nick, + ownnick = irc_nicklist_insert(chanrec, irc_server->nick, nicks == 0, FALSE, FALSE, FALSE, NULL); } @@ -197,7 +206,7 @@ static void event_end_of_names(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_who(SERVER_REC *server, const char *data) +static void event_who(SERVER_REC *server, const char *data, const char *u0, const char *u1) { char *params, *nick, *channel, *user, *host, *stat, *realname, *hops; CHANNEL_REC *chanrec; @@ -236,14 +245,18 @@ static void event_who(SERVER_REC *server, const char *data) g_free(params); } -static void event_whois(IRC_SERVER_REC *server, const char *data) +static void event_whois(SERVER_REC *server, const char *data, const char *u0, const char *u1) { + IRC_SERVER_REC *irc_server; char *params, *nick, *realname; GSList *nicks, *tmp; NICK_REC *rec; g_return_if_fail(data != NULL); + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + /* first remove the gone-flag, if user is gone it will be set later.. */ params = event_get_params(data, 6, NULL, &nick, NULL, @@ -264,7 +277,7 @@ static void event_whois(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_whois_away(SERVER_REC *server, const char *data) +static void event_whois_away(SERVER_REC *server, const char *data, const char *u0, const char *u1) { char *params, *nick, *awaymsg; @@ -276,7 +289,7 @@ static void event_whois_away(SERVER_REC *server, const char *data) g_free(params); } -static void event_own_away(SERVER_REC *server, const char *data) +static void event_own_away(SERVER_REC *server, const char *data, const char *u0, const char *u1) { char *params, *nick; @@ -288,7 +301,7 @@ static void event_own_away(SERVER_REC *server, const char *data) g_free(params); } -static void event_own_unaway(SERVER_REC *server, const char *data) +static void event_own_unaway(SERVER_REC *server, const char *data, const char *u0, const char *u1) { char *params, *nick; @@ -300,7 +313,7 @@ static void event_own_unaway(SERVER_REC *server, const char *data) g_free(params); } -static void event_whois_ircop(SERVER_REC *server, const char *data) +static void event_whois_ircop(SERVER_REC *server, const char *data, const char *u0, const char *u1) { char *params, *nick, *awaymsg; @@ -312,7 +325,7 @@ static void event_whois_ircop(SERVER_REC *server, const char *data) g_free(params); } -static void event_nick_invalid(IRC_SERVER_REC *server, const char *data) +static void event_nick_invalid(SERVER_REC *server, const char *data, const char *u0, const char *u1) { if (!server->connected) /* we used to call server_disconnect but that crashes @@ -322,95 +335,107 @@ static void event_nick_invalid(IRC_SERVER_REC *server, const char *data) server->connection_lost = server->no_reconnect = TRUE; } -static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) +static void event_nick_in_use(SERVER_REC *server, const char *data, const char *u0, const char *u1) { + IRC_SERVER_REC *irc_server; char *str, *cmd, *params, *nick; int n; gboolean try_alternate_nick; g_return_if_fail(data != NULL); - if (server->connected) { + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + if (irc_server->connected) { /* Already connected, no need to handle this anymore. */ return; } - try_alternate_nick = g_ascii_strcasecmp(server->nick, server->connrec->nick) == 0 && - server->connrec->alternate_nick != NULL && - g_ascii_strcasecmp(server->connrec->alternate_nick, server->nick) != 0; + try_alternate_nick = g_ascii_strcasecmp(irc_server->nick, irc_server->connrec->nick) == 0 && + irc_server->connrec->alternate_nick != NULL && + g_ascii_strcasecmp(irc_server->connrec->alternate_nick, irc_server->nick) != 0; params = event_get_params(data, 2, NULL, &nick); - if (g_ascii_strcasecmp(server->nick, nick) != 0) { + if (g_ascii_strcasecmp(irc_server->nick, nick) != 0) { /* the server uses a nick different from the one we send */ - g_free(server->nick); - server->nick = g_strdup(nick); + g_free(irc_server->nick); + irc_server->nick = g_strdup(nick); } g_free(params); /* nick already in use - need to change it .. */ if (try_alternate_nick) { /* first try, so try the alternative nick.. */ - g_free(server->nick); - server->nick = g_strdup(server->connrec->alternate_nick); + g_free(irc_server->nick); + irc_server->nick = g_strdup(irc_server->connrec->alternate_nick); } - else if (strlen(server->nick) < 9) { + else if (strlen(irc_server->nick) < 9) { /* keep adding '_' to end of nick.. */ - str = g_strdup_printf("%s_", server->nick); - g_free(server->nick); - server->nick = str; + str = g_strdup_printf("%s_", irc_server->nick); + g_free(irc_server->nick); + irc_server->nick = str; } else { /* nick full, keep adding number at the end */ for (n = 8; n > 0; n--) { - if (server->nick[n] < '0' || server->nick[n] > '9') { - server->nick[n] = '1'; + if (irc_server->nick[n] < '0' || irc_server->nick[n] > '9') { + irc_server->nick[n] = '1'; break; } - if (server->nick[n] < '9') { - server->nick[n]++; + if (irc_server->nick[n] < '9') { + irc_server->nick[n]++; break; } - server->nick[n] = '0'; + irc_server->nick[n] = '0'; } } - cmd = g_strdup_printf("NICK %s", server->nick); - irc_send_cmd_now(server, cmd); + cmd = g_strdup_printf("NICK %s", irc_server->nick); + irc_send_cmd_now(irc_server, cmd); g_free(cmd); } -static void event_target_unavailable(IRC_SERVER_REC *server, const char *data) +static void event_target_unavailable(SERVER_REC *server, const char *data, const char *u0, const char *u1) { + IRC_SERVER_REC *irc_server; char *params, *channel; g_return_if_fail(data != NULL); + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + params = event_get_params(data, 2, NULL, &channel); if (!server_ischannel(SERVER(server), channel)) { /* nick is unavailable. */ - event_nick_in_use(server, data); + event_nick_in_use(server, data, u0, u1); } g_free(params); } -static void event_nick(IRC_SERVER_REC *server, const char *data, - const char *orignick) +static void event_nick(SERVER_REC *server, const char *data, + const char *orignick, const char *u0) { + IRC_SERVER_REC *irc_server; char *params, *nick; g_return_if_fail(data != NULL); g_return_if_fail(orignick != NULL); + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + params = event_get_params(data, 1, &nick); - if (g_ascii_strcasecmp(orignick, server->nick) == 0) { + if (g_ascii_strcasecmp(orignick, irc_server->nick) == 0) { /* You changed your nick */ - if (server->last_nick != NULL && - g_ascii_strcasecmp(server->last_nick, nick) == 0) { + if (irc_server->last_nick != NULL && + g_ascii_strcasecmp(irc_server->last_nick, nick) == 0) { /* changed with /NICK - keep it as wanted nick */ - g_free(server->connrec->nick); - server->connrec->nick = g_strdup(nick); + g_free(irc_server->connrec->nick); + irc_server->connrec->nick = g_strdup(nick); } server_change_nick(SERVER(server), nick); @@ -420,7 +445,7 @@ static void event_nick(IRC_SERVER_REC *server, const char *data, g_free(params); } -static void event_userhost(SERVER_REC *server, const char *data) +static void event_userhost(SERVER_REC *server, const char *data, const char *u0, const char *u1) { char *params, *hosts, **phosts, **pos, *ptr; int oper; @@ -447,7 +472,7 @@ static void event_userhost(SERVER_REC *server, const char *data) g_free(params); } -static void sig_usermode(SERVER_REC *server) +static void sig_usermode(SERVER_REC *server, const char *u0) { g_return_if_fail(IS_SERVER(server)); @@ -464,30 +489,30 @@ static const char *get_nick_flags(SERVER_REC *server) return prefix == NULL ? "" : prefix+1; } -static void sig_connected(IRC_SERVER_REC *server) +static void sig_connected(SERVER_REC *server) { if (IS_IRC_SERVER(server)) - server->get_nick_flags = get_nick_flags; + ((IRC_SERVER_REC *)server)->get_nick_flags = get_nick_flags; } void irc_nicklist_init(void) { - signal_add_first__event_nick(event_nick); - signal_add_first__event_352(event_who); + signal_add_first__event_("nick", event_nick); + signal_add_first__event_("352", event_who); signal_add__silent_event_who(event_who); signal_add__silent_event_whois(event_whois); - signal_add_first__event_311(event_whois); + signal_add_first__event_("311", event_whois); signal_add_first__whois_away(event_whois_away); signal_add_first__whois_oper(event_whois_ircop); - signal_add_first__event_306(event_own_away); - signal_add_first__event_305(event_own_unaway); - signal_add_first__event_353(event_names_list); - signal_add_first__event_366(event_end_of_names); - signal_add_first__event_432(event_nick_invalid); - signal_add_first__event_433(event_nick_in_use); - signal_add_first__event_437(event_target_unavailable); - signal_add_first__event_302(event_userhost); - signal_add__userhost_event(event_userhost); + signal_add_first__event_("306", event_own_away); + signal_add_first__event_("305", event_own_unaway); + signal_add_first__event_("353", event_names_list); + signal_add_first__event_("366", event_end_of_names); + signal_add_first__event_("432", event_nick_invalid); + signal_add_first__event_("433", event_nick_in_use); + signal_add_first__event_("437", event_target_unavailable); + signal_add_first__event_("302", event_userhost); + //signal_add__userhost_event(event_userhost); signal_add__user_mode_changed(sig_usermode); signal_add__server_connected(sig_connected); } @@ -509,7 +534,7 @@ void irc_nicklist_deinit(void) signal_remove__event_("433", event_nick_in_use); signal_remove__event_("437", event_target_unavailable); signal_remove__event_("302", event_userhost); - signal_remove__userhost_event(event_userhost); + //signal_remove__userhost_event(event_userhost); signal_remove__user_mode_changed(sig_usermode); signal_remove__server_connected(sig_connected); } diff --git a/src/irc/core/irc-queries.c b/src/irc/core/irc-queries.c index cd31fc97..1985e636 100644 --- a/src/irc/core/irc-queries.c +++ b/src/irc/core/irc-queries.c @@ -20,6 +20,7 @@ #include "module.h" #include "signals.h" +#include "signal-registry.h" #include "misc.h" #include "irc-nicklist.h" @@ -89,7 +90,7 @@ static void ctcp_action(IRC_SERVER_REC *server, const char *msg, } static void event_nick(SERVER_REC *server, const char *data, - const char *orignick) + const char *orignick, const char *u0) { QUERY_REC *query; char *params, *nick; diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 7fa80989..2f0e9842 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -22,6 +22,7 @@ #include "net-sendbuffer.h" #include "signals.h" +#include "core/signal-registry.h" #include "signal-registry.h" #include "rawlog.h" #include "misc.h" @@ -400,24 +401,25 @@ void irc_server_purge_output(IRC_SERVER_REC *server, const char *target) } } -static void sig_connected(IRC_SERVER_REC *server) +static void sig_connected(SERVER_REC *server) { - if (!IS_IRC_SERVER(server)) + IRC_SERVER_REC *irc_server; + if ((irc_server = IRC_SERVER(server)) == NULL) return; - server->isnickflag = isnickflag_func; - server->ischannel = ischannel_func; - server->split_message = split_message; - server->send_message = send_message; - server->query_find_func = + irc_server->isnickflag = isnickflag_func; + irc_server->ischannel = ischannel_func; + irc_server->split_message = split_message; + irc_server->send_message = send_message; + irc_server->query_find_func = (QUERY_REC *(*)(SERVER_REC *, const char *)) irc_query_find; - server->nick_comp_func = irc_nickcmp_rfc1459; + irc_server->nick_comp_func = irc_nickcmp_rfc1459; - server->splits = g_hash_table_new((GHashFunc) g_istr_hash, + irc_server->splits = g_hash_table_new((GHashFunc) g_istr_hash, (GCompareFunc) g_istr_equal); - if (!server->session_reconnect) - server_init(server); + if (!irc_server->session_reconnect) + server_init(irc_server); } static void isupport_destroy_hash(void *key, void *value) @@ -426,58 +428,60 @@ static void isupport_destroy_hash(void *key, void *value) g_free(value); } -static void sig_destroyed(IRC_SERVER_REC *server) +static void sig_destroyed(SERVER_REC *server) { + IRC_SERVER_REC *irc_server; GSList *tmp; - if (!IS_IRC_SERVER(server)) + if ((irc_server = IRC_SERVER(server)) == NULL) return; - for (tmp = server->cmdqueue; tmp != NULL; tmp = tmp->next->next) { + for (tmp = irc_server->cmdqueue; tmp != NULL; tmp = tmp->next->next) { g_free(tmp->data); if (tmp->next->data != NULL) server_redirect_destroy(tmp->next->data); } - g_slist_free(server->cmdqueue); - server->cmdqueue = NULL; + g_slist_free(irc_server->cmdqueue); + irc_server->cmdqueue = NULL; - gslist_free_full(server->cap_active, (GDestroyNotify) g_free); - server->cap_active = NULL; + gslist_free_full(irc_server->cap_active, (GDestroyNotify) g_free); + irc_server->cap_active = NULL; - if (server->cap_supported) { - g_hash_table_destroy(server->cap_supported); - server->cap_supported = NULL; + if (irc_server->cap_supported) { + g_hash_table_destroy(irc_server->cap_supported); + irc_server->cap_supported = NULL; } - gslist_free_full(server->cap_queue, (GDestroyNotify) g_free); - server->cap_queue = NULL; + gslist_free_full(irc_server->cap_queue, (GDestroyNotify) g_free); + irc_server->cap_queue = NULL; - g_free_and_null(server->sasl_buffer); + g_free_and_null(irc_server->sasl_buffer); /* these are dynamically allocated only if isupport was sent */ - g_hash_table_foreach(server->isupport, - (GHFunc) isupport_destroy_hash, server); - g_hash_table_destroy(server->isupport); - server->isupport = NULL; + g_hash_table_foreach(irc_server->isupport, + (GHFunc) isupport_destroy_hash, irc_server); + g_hash_table_destroy(irc_server->isupport); + irc_server->isupport = NULL; - g_free_and_null(server->wanted_usermode); - g_free_and_null(server->real_address); - g_free_and_null(server->usermode); - g_free_and_null(server->userhost); - g_free_and_null(server->last_invite); + g_free_and_null(irc_server->wanted_usermode); + g_free_and_null(irc_server->real_address); + g_free_and_null(irc_server->usermode); + g_free_and_null(irc_server->userhost); + g_free_and_null(irc_server->last_invite); } -static void sig_server_quit(IRC_SERVER_REC *server, const char *msg) +static void sig_server_quit(SERVER_REC *server, const char *msg) { + IRC_SERVER_REC *irc_server; char *str; char *recoded; - if (!IS_IRC_SERVER(server) || !server->connected) + if ((irc_server = IRC_SERVER(server)) == NULL || !server->connected) return; recoded = recode_out(SERVER(server), msg, NULL); str = g_strdup_printf("QUIT :%s", recoded); - irc_send_cmd_now(server, str); + irc_send_cmd_now(irc_server, str); g_free(str); g_free(recoded); } @@ -684,43 +688,47 @@ char *irc_server_get_channels(IRC_SERVER_REC *server) return ret; } -static void event_connected(IRC_SERVER_REC *server, const char *data, const char *from) +static void event_connected(SERVER_REC *server, const char *data, const char *from, const char *u0) { + IRC_SERVER_REC *irc_server; char *params, *nick; g_return_if_fail(server != NULL); + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + params = event_get_params(data, 1, &nick); - if (g_strcmp0(server->nick, nick) != 0) { + if (g_strcmp0(irc_server->nick, nick) != 0) { /* nick changed unexpectedly .. connected via proxy, etc. */ - g_free(server->nick); - server->nick = g_strdup(nick); + g_free(irc_server->nick); + irc_server->nick = g_strdup(nick); } /* set the server address */ - g_free(server->real_address); - server->real_address = from == NULL ? - g_strdup(server->connrec->address) : /* shouldn't happen.. */ + g_free(irc_server->real_address); + irc_server->real_address = from == NULL ? + g_strdup(irc_server->connrec->address) : /* shouldn't happen.. */ g_strdup(from); /* last welcome message found - commands can be sent to server now. */ - server->connected = 1; - server->real_connect_time = time(NULL); + irc_server->connected = 1; + irc_server->real_connect_time = time(NULL); /* let the queue send now that we are identified */ - g_get_current_time(&server->wait_cmd); + g_get_current_time(&irc_server->wait_cmd); - if (server->connrec->usermode != NULL) { + if (irc_server->connrec->usermode != NULL) { /* Send the user mode, before the autosendcmd. * Do not pass this through cmd_mode because it * is not known whether the resulting MODE message * (if any) is the initial umode or a reply to this. */ - irc_send_cmdv(server, "MODE %s %s", server->nick, - server->connrec->usermode); - g_free_not_null(server->wanted_usermode); - server->wanted_usermode = g_strdup(server->connrec->usermode); + irc_send_cmdv(irc_server, "MODE %s %s", irc_server->nick, + irc_server->connrec->usermode); + g_free_not_null(irc_server->wanted_usermode); + irc_server->wanted_usermode = g_strdup(irc_server->connrec->usermode); } signal_emit__event_connected((SERVER_REC *)server); @@ -848,9 +856,13 @@ static void event_isupport(IRC_SERVER_REC *server, const char *data) } -static void event_motd(IRC_SERVER_REC *server, const char *data, const char *from) +static void event_motd(SERVER_REC *server, const char *data, const char *from, const char *u0) { - if (server->connected) + IRC_SERVER_REC *irc_server; + if ((irc_server = IRC_SERVER(server)) == NULL) + return; + + if (irc_server->connected) return; /* Stupid broken piece of shit ircd didn't send us 001, @@ -861,8 +873,8 @@ static void event_motd(IRC_SERVER_REC *server, const char *data, const char *fro Oh, and looks like it also doesn't answer anything to PINGs, disable lag checking. */ - server->disable_lag = TRUE; - event_connected(server, data, from); + irc_server->disable_lag = TRUE; + event_connected(server, data, from, NULL); } static void event_end_of_motd(IRC_SERVER_REC *server, const char *data) diff --git a/src/irc/core/signal-registry.def b/src/irc/core/signal-registry.def index 92096147..ea87ae2d 100644 --- a/src/irc/core/signal-registry.def +++ b/src/irc/core/signal-registry.def @@ -29,6 +29,8 @@ SIGNAL_REGISTER(chanquery_abort, 4, (SERVER_REC *server, const char *args, const server, args, sender_nick, sender_address) SIGNAL_REGISTER(silent_event_who, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), server, args, sender_nick, sender_address) +SIGNAL_REGISTER(silent_event_whois, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) SIGNAL_REGISTER(chanquery_ban, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), server, args, sender_nick, sender_address) SIGNAL_REGISTER(chanquery_ban_end, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), @@ -57,6 +59,24 @@ SIGNAL_REGISTER(ctcp_action, 5, (IRC_SERVER_REC *irc_server, const char *args, c SIGNAL_REGISTER(event_connected, 1, (SERVER_REC *server), server) +// irc-commands.c: +SIGNAL_REGISTER(whois_end, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whois_away, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whois_oper, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whois_try_whowas, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whois_event_not_found, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whois_event, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whowas_event, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) +SIGNAL_REGISTER(whowas_event_end, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), + server, args, sender_nick, sender_address) + // irc-cap.c SIGNAL_REGISTER_(server_cap_ack, 1, (const char *cmd, IRC_SERVER_REC *irc_server), (IRC_SERVER_REC *irc_server), @@ -90,7 +110,7 @@ SIGNAL_REGISTER_(event, 4, (const char *cmd, SERVER_REC *server, const char *arg cmd, server, args, sender_nick, sender_address) SIGNAL_REGISTER(default_event, 4, (SERVER_REC *server, const char *data, const char *sender_nick, const char *sender_address), server, data, sender_nick, sender_address) -SIGNAL_REGISTER(whois_default_event, 4, (SERVER_REC *server, char *args, char *sender_nick, char *sender_address), +SIGNAL_REGISTER(whois_default_event, 4, (SERVER_REC *server, const char *args, const char *sender_nick, const char *sender_address), server, args, sender_nick, sender_address) SIGNAL_REGISTER(server_incoming, 2, (SERVER_REC *server, char *data), @@ -122,7 +142,7 @@ SIGNAL_REGISTER(channel_mode_changed, 2, (CHANNEL_REC *channel, const char *setb channel, setby) SIGNAL_REGISTER(nick_mode_changed, 5, (CHANNEL_REC *channel, NICK_REC *nick, const char *setby, const char *mode, const char *type), channel, nick, setby, mode, type) -SIGNAL_REGISTER(user_mode_changed, 2, (SERVER_REC *server, char *old), +SIGNAL_REGISTER(user_mode_changed, 2, (SERVER_REC *server, const char *old), server, old) SIGNAL_REGISTER(away_mode_changed, 1, (SERVER_REC *server), server) diff --git a/src/irc/core/signal-registry.def.in b/src/irc/core/signal-registry.def.in index c16722b7..182a098a 100644 --- a/src/irc/core/signal-registry.def.in +++ b/src/irc/core/signal-registry.def.in @@ -18,6 +18,7 @@ "chanquery who end", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "chanquery abort", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "silent event who", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "silent event whois", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "chanquery ban", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "chanquery ban end", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address @@ -34,6 +35,16 @@ // irc-servers.c: "event connected", SERVER_REC +// irc-commands.c: + "whois end", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whois away", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whois oper", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whois try whowas", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whois event not found", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whois event", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whowas event", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + "whowas event end", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address + // irc-cap.c "server cap ack ", IRC_SERVER_REC "server cap nak ", IRC_SERVER_REC @@ -51,7 +62,7 @@ "server event", SERVER_REC, const char *data, const char *sender_nick, const char *sender_address "event ", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "default event", SERVER_REC, const char *data, const char *sender_nick, const char *sender_address - "whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address + "whois default event", SERVER_REC, const char *args, const char *sender_nick, const char *sender_address "server incoming", SERVER_REC, char *data @@ -72,7 +83,7 @@ // modes.c: "channel mode changed", CHANNEL_REC, const char *setby "nick mode changed", CHANNEL_REC, NICK_REC, const char *setby, const char *mode, const char *type - "user mode changed", SERVER_REC, char *old + "user mode changed", SERVER_REC, const char *old "away mode changed", SERVER_REC // netsplit.c: