summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Molnar <attilamolnar@hush.com>2014-07-26 15:37:40 +0200
committerAttila Molnar <attilamolnar@hush.com>2014-07-26 15:37:40 +0200
commit430072e7ff13f067cd770d1bdd0515ec24c5b134 (patch)
tree2abc6738dd0ccc35d395dba8608a07460cbc99d5
parente056c5381efaccbd9dce705d30c0d697f9922823 (diff)
m_spanningtree Let the NICK handler change the nick of the incoming user on collision
Don't change it in DoCollision()
-rw-r--r--src/modules/m_spanningtree/nick.cpp8
-rw-r--r--src/modules/m_spanningtree/nickcollide.cpp10
2 files changed, 5 insertions, 13 deletions
diff --git a/src/modules/m_spanningtree/nick.cpp b/src/modules/m_spanningtree/nick.cpp
index 686a2cc4c..c689a0fdd 100644
--- a/src/modules/m_spanningtree/nick.cpp
+++ b/src/modules/m_spanningtree/nick.cpp
@@ -42,7 +42,6 @@ CmdResult CommandNick::HandleRemote(RemoteUser* user, std::vector<std::string>&
* On nick messages, check that the nick doesn't already exist here.
* If it does, perform collision logic.
*/
- bool callfnc = true;
User* x = ServerInstance->FindNickOnly(params[0]);
if ((x) && (x != user) && (x->registered == REG_ALL))
{
@@ -51,13 +50,12 @@ CmdResult CommandNick::HandleRemote(RemoteUser* user, std::vector<std::string>&
if (collideret != 1)
{
// Remote client lost, or both lost, rewrite this nick change as a change to uuid before
- // forwarding and don't call ChangeNick() because DoCollision() has done it already
+ // calling ChangeNick() and forwarding the message
params[0] = user->uuid;
- callfnc = false;
}
}
- if (callfnc)
- user->ChangeNick(params[0], newts);
+
+ user->ChangeNick(params[0], newts);
return CMD_SUCCESS;
}
diff --git a/src/modules/m_spanningtree/nickcollide.cpp b/src/modules/m_spanningtree/nickcollide.cpp
index e6bcb21b2..360014fac 100644
--- a/src/modules/m_spanningtree/nickcollide.cpp
+++ b/src/modules/m_spanningtree/nickcollide.cpp
@@ -29,7 +29,8 @@
* Yes, this function looks a little ugly.
* However, in some circumstances we may not have a User, so we need to do things this way.
* Returns 1 if colliding local client, 2 if colliding remote, 3 if colliding both.
- * Sends SAVEs as appropriate and forces nickchanges too.
+ * Sends SAVEs as appropriate and forces nick change of the user 'u' if our side loses or if both lose.
+ * Does not change the nick of the user that is trying to claim the nick of 'u', i.e. the "remote" user.
*/
int SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remotets, const std::string& remoteident, const std::string& remoteip, const std::string& remoteuid)
{
@@ -121,7 +122,6 @@ int SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remot
}
if (bChangeRemote)
{
- User *remote = ServerInstance->FindUUID(remoteuid);
/*
* remote side needs to change. If this happens, we will modify
* the UID or halt the propagation of the nick change command,
@@ -130,12 +130,6 @@ int SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remot
TreeSocket* sock = server->GetSocket();
sock->WriteLine(CmdBuilder("SAVE").push(remoteuid).push_int(remotets));
- if (remote)
- {
- /* nick change collide. Force change their nick. */
- remote->ChangeNick(remoteuid);
- }
-
if (!bChangeLocal)
return 2;
}