Better Way(TM) of doing easy routing of commands with a user based source. This saves me having to put fixes into SVSJOIN, etc, to stop fake direction.

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10101 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
w00t 2008-08-05 19:36:25 +00:00
parent c819f500c5
commit b683e9dccb
2 changed files with 11 additions and 22 deletions

View File

@ -27,16 +27,14 @@ bool TreeSocket::ForceTopic(const std::string &source, std::deque<std::string> &
if (params.size() != 4)
return true;
time_t ts = atoi(params[1].c_str());
std::string nsource = source;
Channel* c = this->Instance->FindChan(params[0]);
if (c)
{
if ((ts >= c->topicset) || (c->topic.empty()))
{
User* user = this->Instance->FindNick(source);
if (c->topic != params[3])
{
User* user = this->Instance->FindNick(source);
// Update topic only when it differs from current topic
c->topic.assign(params[3], 0, Instance->Config->Limits.MaxTopic);
if (!user)
@ -53,27 +51,9 @@ bool TreeSocket::ForceTopic(const std::string &source, std::deque<std::string> &
c->setby.assign(params[2], 0, 127);
c->topicset = ts;
/*
* Take careful note of what happens here;
* Above, we display the topic change to the server IF the topic incoming is different to the topic already set.
* HERE, we find the server the user that sent this topic is on, so we *do not* send topics back to the link they just
* came from. This *cannot* be easily merged with the above check!
*
* Thanks to Anope and Namegduf for finally helping me isolate this
* -- w00t (5th/aug/2008)
*/
if (user)
{
nsource = user->server;
}
/* all done, send it on its way */
params[3] = ":" + params[3];
User* u = Instance->FindNick(nsource);
if (u)
Utils->DoOneToAllButSender(u->uuid,"FTOPIC",params,u->server);
else
Utils->DoOneToAllButSender(source,"FTOPIC",params,nsource);
Utils->DoOneToAllButSender(source,"FTOPIC",params,source);
}
}

View File

@ -68,6 +68,15 @@ TreeServer* SpanningTreeUtilities::BestRouteTo(const std::string &ServerName)
}
else
{
// Cheat a bit. This allows for (better) working versions of routing commands with nick based prefixes, without hassle
User *u = ServerInstance->FindNick(ServerName);
if (u)
{
Found = FindServer(u->server);
if (Found)
return Found;
}
return NULL;
}
}