From 4464121eb232a3ec6049802256012714fe786506 Mon Sep 17 00:00:00 2001 From: Attila Molnar Date: Sat, 26 Jul 2014 16:00:24 +0200 Subject: [PATCH] m_spanningtree Return a bool from DoCollision() The return value is true if the remote user or both have to change, false if only we have to change --- src/modules/m_spanningtree/nick.cpp | 4 ++-- src/modules/m_spanningtree/nickcollide.cpp | 12 +++--------- src/modules/m_spanningtree/uid.cpp | 6 +++--- src/modules/m_spanningtree/utils.h | 2 +- 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/modules/m_spanningtree/nick.cpp b/src/modules/m_spanningtree/nick.cpp index cdec280e1..9f0d78a65 100644 --- a/src/modules/m_spanningtree/nick.cpp +++ b/src/modules/m_spanningtree/nick.cpp @@ -47,8 +47,8 @@ CmdResult CommandNick::HandleRemote(RemoteUser* user, std::vector& { // 'x' is the already existing user using the same nick as params[0] // 'user' is the user trying to change nick to the in use nick - int collideret = Utils->DoCollision(x, TreeServer::Get(user), newts, user->ident, user->GetIPString(), user->uuid); - if (collideret != 1) + bool they_change = Utils->DoCollision(x, TreeServer::Get(user), newts, user->ident, user->GetIPString(), user->uuid); + if (they_change) { // Remote client lost, or both lost, rewrite this nick change as a change to uuid before // calling ChangeNick() and forwarding the message diff --git a/src/modules/m_spanningtree/nickcollide.cpp b/src/modules/m_spanningtree/nickcollide.cpp index 5a375ef68..a46e103e4 100644 --- a/src/modules/m_spanningtree/nickcollide.cpp +++ b/src/modules/m_spanningtree/nickcollide.cpp @@ -28,11 +28,11 @@ /* * 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. + * Returns true if remote or both lost, false otherwise. * 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) +bool SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remotets, const std::string& remoteident, const std::string& remoteip, const std::string& remoteuid) { // At this point we're sure that a collision happened, increment the counter regardless of who wins ServerInstance->stats.Collisions++; @@ -108,9 +108,6 @@ int SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remot params.Broadcast(); u->ChangeNick(u->uuid); - - if (!bChangeRemote) - return 1; } if (bChangeRemote) { @@ -119,10 +116,7 @@ int SpanningTreeUtilities::DoCollision(User* u, TreeServer* server, time_t remot * send back a SAVE to the source. */ CmdBuilder("SAVE").push(remoteuid).push_int(remotets).Unicast(server->ServerUser); - - if (!bChangeLocal) - return 2; } - return 3; + return bChangeRemote; } diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index cafaee4c0..c7a98b2f4 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -59,10 +59,10 @@ CmdResult CommandUID::HandleServer(TreeServer* remoteserver, std::vectorDoCollision(collideswith, remoteserver, age_t, params[5], params[6], params[0]); - ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "*** Collision on %s, collide=%d", params[2].c_str(), collide); + bool they_change = Utils->DoCollision(collideswith, remoteserver, age_t, params[5], params[6], params[0]); + ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Collision on %s %d", params[2].c_str(), they_change); - if (collide != 1) + if (they_change) { // The client being introduced needs to change nick to uuid, change the nick in the message before // processing/forwarding it. diff --git a/src/modules/m_spanningtree/utils.h b/src/modules/m_spanningtree/utils.h index bc2ea24a1..3a419e2a4 100644 --- a/src/modules/m_spanningtree/utils.h +++ b/src/modules/m_spanningtree/utils.h @@ -137,7 +137,7 @@ class SpanningTreeUtilities : public classbase /** Handle nick collision */ - int DoCollision(User* u, TreeServer* server, time_t remotets, const std::string& remoteident, const std::string& remoteip, const std::string& remoteuid); + bool DoCollision(User* u, TreeServer* server, time_t remotets, const std::string& remoteident, const std::string& remoteip, const std::string& remoteuid); /** Compile a list of servers which contain members of channel c */ -- 2.39.2