diff options
author | Timo Sirainen <cras@irssi.org> | 2002-01-28 05:28:25 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2002-01-28 05:28:25 +0000 |
commit | 08c23ce6d4c21f7cee9be2248d0fec15c153a23a (patch) | |
tree | ee41bc4ea0c8fc9d53b0b67dcdd8c40f79b5edc4 /src/irc | |
parent | a6ee439c263f9560c6b7711dd4a4d8e8c24f11aa (diff) | |
download | irssi-08c23ce6d4c21f7cee9be2248d0fec15c153a23a.zip |
Don't change the "wanted nick" when receiving NICK event from server, unless
we did the /NICK change. This is useful with the new irc servers changing
your nick to your UID instead of killing you, at reconnect time you'd get
"invalid nick" when irssi would try setting the UID as your nick..
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2351 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/core/irc-commands.c | 3 | ||||
-rw-r--r-- | src/irc/core/irc-nicklist.c | 12 | ||||
-rw-r--r-- | src/irc/core/irc-servers.h | 2 |
3 files changed, 14 insertions, 3 deletions
diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c index d18354ee..5ecfb482 100644 --- a/src/irc/core/irc-commands.c +++ b/src/irc/core/irc-commands.c @@ -317,6 +317,9 @@ static void cmd_nick(const char *data, IRC_SERVER_REC *server, WI_ITEM_REC *item if (!cmd_get_params(data, &free_arg, 1, &nick)) return; + g_free(server->last_nick); + server->last_nick = g_strdup(nick); + irc_send_cmdv(server, "NICK %s", nick); cmd_params_free(free_arg); } diff --git a/src/irc/core/irc-nicklist.c b/src/irc/core/irc-nicklist.c index 4b661e88..505eaadb 100644 --- a/src/irc/core/irc-nicklist.c +++ b/src/irc/core/irc-nicklist.c @@ -301,7 +301,7 @@ static void event_target_unavailable(IRC_SERVER_REC *server, const char *data) g_free(params); } -static void event_nick(SERVER_REC *server, const char *data, +static void event_nick(IRC_SERVER_REC *server, const char *data, const char *orignick) { char *params, *nick; @@ -312,10 +312,16 @@ static void event_nick(SERVER_REC *server, const char *data, if (g_strcasecmp(orignick, server->nick) == 0) { /* You changed your nick */ - server_change_nick(server, nick); + if (g_strcasecmp(server->last_nick, nick) == 0) { + /* changed with /NICK - keep it as wanted nick */ + g_free(server->connrec->nick); + server->connrec->nick = g_strdup(nick); + } + + server_change_nick(SERVER(server), nick); } - nicklist_rename(server, orignick, nick); + nicklist_rename(SERVER(server), orignick, nick); g_free(params); } diff --git a/src/irc/core/irc-servers.h b/src/irc/core/irc-servers.h index 0ef53a48..370dd0d1 100644 --- a/src/irc/core/irc-servers.h +++ b/src/irc/core/irc-servers.h @@ -43,6 +43,8 @@ struct _IRC_SERVER_REC { REDIRECT_REC *redirect_next; REDIRECT_REC *redirect_continue; + char *last_nick; /* last /NICK, kept even if it resulted as not valid change */ + char *real_address; /* address the irc server gives */ char *usermode; /* The whole mode string .. */ char *wanted_usermode; /* The usermode we want to use, doesn't include the modes given us by the server (eg. +r) */ |