From dee7825f05e0e558020fabe2e536e2b5d4df8050 Mon Sep 17 00:00:00 2001 From: Alexandre Morignot Date: Tue, 10 Feb 2015 16:37:41 +0100 Subject: [PATCH 1/2] handle an already used nick different from the one we send --- src/irc/core/irc-nicklist.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 5438509e..a006a3cb 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -343,7 +343,7 @@ static void event_nick_invalid(IRC_SERVER_REC *server, const char *data) static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) { - char *str, *cmd; + char *str, *cmd, *params, *nick; int n; g_return_if_fail(data != NULL); @@ -353,6 +353,14 @@ static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) return; } + params = event_get_params(data, 2, NULL, &nick); + if (g_ascii_strcasecmp(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(params); + /* nick already in use - need to change it .. */ if (g_ascii_strcasecmp(server->nick, server->connrec->nick) == 0 && server->connrec->alternate_nick != NULL && From 3c7185c5ad61de24f9d1bc39240c8145665fba44 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Fri, 5 Jan 2018 00:38:54 +0100 Subject: [PATCH 2/2] Update irc-nicklist.c move altnick check before the nick correction code --- src/irc/core/irc-nicklist.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index a006a3cb..1f8c1fc9 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -345,6 +345,7 @@ static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) { char *str, *cmd, *params, *nick; int n; + gboolean try_alternate_nick; g_return_if_fail(data != NULL); @@ -352,6 +353,10 @@ static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) /* 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; params = event_get_params(data, 2, NULL, &nick); if (g_ascii_strcasecmp(server->nick, nick) != 0) { @@ -362,9 +367,7 @@ static void event_nick_in_use(IRC_SERVER_REC *server, const char *data) g_free(params); /* nick already in use - need to change it .. */ - if (g_ascii_strcasecmp(server->nick, server->connrec->nick) == 0 && - server->connrec->alternate_nick != NULL && - g_ascii_strcasecmp(server->connrec->alternate_nick, server->nick) != 0) { + if (try_alternate_nick) { /* first try, so try the alternative nick.. */ g_free(server->nick); server->nick = g_strdup(server->connrec->alternate_nick);