Instance->Logs->Log("m_spanningtree",DEBUG, "S[%d] I %s", this->GetFd(), line.c_str());
this->Split(line.c_str(),params);
-
+
if (params.empty())
return true;
-
+
if ((params[0][0] == ':') && (params.size() > 1))
{
prefix = params[0].substr(1);
params.pop_front();
-
+
if (prefix.empty())
{
this->SendError("BUG (?) Empty prefix recieved.");
return false;
}
}
-
+
command = params[0].c_str();
params.pop_front();
/*
* Now, check for (and parse) commands as appropriate. -- w
- */
-
+ */
+
/* Find the server that this command originated from, used in the handlers below */
TreeServer *ServerSource = Utils->FindServer(prefix);
{
if (params.size() >= 2)
{
- /*
- * XXX:
- * The SetLocalOnly stuff here is to work around a bit of a nasty recursion bug.
- * WriteToSnoMask() sends global snotices out globally, but of course this is a problem
- * when triggering it from an already global snotice (yay loops).
- *
- * The current (horrible) solution I'm implementing here because nobody else seems to
- * want to look at this except me, sets the snotice local-only temporarily, sends the snotice
- * and then flushes the snomask.
- *
- * This works, but it is total and utter garbage, as it bypasses the snotice compression
- * totally for this snomask (and may well trigger other snotices to send too early.....)
- * but at least it won't crash the server.
- *
- * Master of hacks, we salute you!
- * -- w00t
- */
-
- // If we get a SNONOTICE, it must have been global... so set it local
- Instance->SNO->SetLocalOnly(*(params[0].c_str()), true);
- // send the message
Instance->SNO->WriteToSnoMask(*(params[0].c_str()), "From " + (ServerSource ? ServerSource->GetName().c_str() : prefix) + ": "+ params[1]);
- // flush the queue
- Instance->SNO->FlushSnotices();
- // set it global again
- Instance->SNO->SetLocalOnly(*(params[0].c_str()), true);
+ return Utils->DoOneToAllButSenderRaw(line, sourceserv, prefix, command, params);
}
- return Utils->DoOneToAllButSenderRaw(line, sourceserv, prefix, command, params);
+
}
else if (command == "BURST")
{
this->Instance->SNO->WriteToSnoMask('l', "WTF: Got BURST from a nonexistant server(?): %s", (ServerSource ? ServerSource->GetName().c_str() : prefix.c_str()));
return false;
}
-
+
ServerSource->bursting = true;
return Utils->DoOneToAllButSenderRaw(line, sourceserv, prefix, command, params);
}
this->Instance->SNO->WriteToSnoMask('l', "WTF: Got ENDBURST from a nonexistant server(?): %s", (ServerSource ? ServerSource->GetName().c_str() : prefix.c_str()));
return false;
}
-
+
ServerSource->FinishBurst();
return Utils->DoOneToAllButSenderRaw(line, sourceserv, prefix, command, params);
}
return false;
}
}
-
+
// Insert into the parser
this->Instance->SendMode(modelist, this->Instance->FakeClient);
-
+
// Pass out to the network
return Utils->DoOneToAllButSenderRaw(line,sourceserv,prefix,command,params);
}
}
}
}
-
+
// its a user
std::vector<std::string> strparams(params.begin(), params.end());
if (!quitserver.empty())
{
Utils->Creator->RemoteMessage(NULL,"Connection to '\2%s\2' failed.",quitserver.c_str());
- time_t server_uptime = Instance->Time() - this->age;
+ time_t server_uptime = Instance->Time() - this->age;
if (server_uptime)
Utils->Creator->RemoteMessage(NULL,"Connection to '\2%s\2' was established for %s", quitserver.c_str(), Utils->Creator->TimeToStr(server_uptime).c_str());
}
{
for (std::vector<std::string>::iterator i = Utils->ValidIPs.begin(); i != Utils->ValidIPs.end(); i++)
{
- if ((*i) == "*" || irc::sockets::MatchCIDR(ip, (*i).c_str()))
+ if (*i == "*" || irc::sockets::MatchCIDR(ip, *i))
{
found = true;
break;