X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Ftreesocket2.cpp;h=b117ebe822fc34c8c14ea28c5387ae36124d1dd8;hb=192fa7d3138ccb5929dc9af8de3395d6ea25619c;hp=06a6bc211a25c8f37d2824beb9532b0c22217979;hpb=cf18f3f7f85d3e510edcbd5dbdd197e513c5fac1;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index 06a6bc211..b117ebe82 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -3,7 +3,7 @@ * +------------------------------------+ * * InspIRCd: (C) 2002-2009 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -16,16 +16,16 @@ #include "commands/cmd_stats.h" #include "socket.h" #include "xline.h" -#include "transport.h" +#include "../transport.h" #include "socketengine.h" -#include "m_spanningtree/main.h" -#include "m_spanningtree/utils.h" -#include "m_spanningtree/treeserver.h" -#include "m_spanningtree/link.h" -#include "m_spanningtree/treesocket.h" -#include "m_spanningtree/resolvers.h" -#include "m_spanningtree/handshaketimer.h" +#include "main.h" +#include "utils.h" +#include "treeserver.h" +#include "link.h" +#include "treesocket.h" +#include "resolvers.h" +#include "handshaketimer.h" /* $ModDep: m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h m_spanningtree/handshaketimer.h */ @@ -84,7 +84,7 @@ bool TreeSocket::ProcessLine(std::string &line) if (prefix.empty()) { - this->SendError("BUG (?) Empty prefix recieved."); + this->SendError("BUG (?) Empty prefix recieved: " + line); return false; } } @@ -269,12 +269,6 @@ bool TreeSocket::ProcessLine(std::string &line) ServerInstance->Logs->Log("m_spanningtree",DEBUG,"Protocol violation: Fake direction in command '%s' from connection '%s'",line.c_str(),this->GetName().c_str()); return true; } - /* Fix by brain: - * When there is activity on the socket, reset the ping counter so - * that we're not wasting bandwidth pinging an active server. - */ - route_back_again->SetNextPingTime(ServerInstance->Time() + Utils->PingFreq); - route_back_again->SetPingFlag(); } else { @@ -303,6 +297,11 @@ bool TreeSocket::ProcessLine(std::string &line) /* Find the server that this command originated from, used in the handlers below */ TreeServer *ServerSource = Utils->FindServer(prefix); + if (ServerSource) + { + Utils->ServerUser->SetFakeServer(ServerSource->GetName()); + Utils->ServerUser->uuid = ServerSource->GetID(); + } /* Find the link we just got this from so we don't bounce it back incorrectly */ std::string sourceserv = this->myhost; @@ -316,7 +315,7 @@ bool TreeSocket::ProcessLine(std::string &line) */ if (command == "UID") { - return this->ParseUID(prefix, params, sourceserv); + return this->ParseUID(prefix, params); } else if (command == "FJOIN") { @@ -366,7 +365,7 @@ bool TreeSocket::ProcessLine(std::string &line) } else if (command == "OPERTYPE") { - return this->OperType(prefix, params, sourceserv); + return this->OperType(prefix,params); } else if (command == "FMODE") { @@ -434,34 +433,6 @@ bool TreeSocket::ProcessLine(std::string &line) { return this->Time(prefix,params); } - else if ((command == "KICK") && (Utils->IsServer(prefix))) - { - if (params.size() == 3) - { - TreeServer* pf = Utils->FindServer(prefix); - if (pf) - { - irc::commasepstream nicks(params[1]); - std::string nick; - Channel* chan = this->ServerInstance->FindChan(params[0]); - if (chan) - { - while (nicks.GetToken(nick)) - { - User* user = this->ServerInstance->FindNick(nick); - if (user) - { - if (!chan->ServerKickUser(user, params[2].c_str(), false, pf->GetName().c_str())) - /* Yikes, the channels gone! */ - delete chan; - } - } - } - } - } - - return Utils->DoOneToAllButSenderRaw(line,sourceserv,prefix,command,params); - } else if (command == "SVSJOIN") { return this->ServiceJoin(prefix,params); @@ -534,27 +505,6 @@ bool TreeSocket::ProcessLine(std::string &line) { return this->Encap(prefix, params); } - else if (command == "MODE" && !this->ServerInstance->FindUUID(prefix)) // XXX we should check for no such serv? - { - // Server-prefix MODE. - std::vector modelist(params.begin(), params.end()); - - /* We don't support this for channel mode changes any more! */ - if (params.size() >= 1) - { - if (ServerInstance->FindChan(params[0])) - { - this->SendError("Protocol violation by '"+(ServerSource ? ServerSource->GetName().c_str() : prefix)+"'! MODE for channel mode changes is not supported by the InspIRCd 1.2 protocol. You must use FMODE to preserve channel timestamps."); - return false; - } - } - - // Insert into the parser - this->ServerInstance->SendMode(modelist, this->ServerInstance->FakeClient); - - // Pass out to the network - return Utils->DoOneToAllButSenderRaw(line,sourceserv,prefix,command,params); - } else { /* @@ -563,7 +513,11 @@ bool TreeSocket::ProcessLine(std::string &line) */ User* who = this->ServerInstance->FindUUID(prefix); - if (!who) + if (ServerSource) + { + who = Utils->ServerUser; + } + else if (!who) { /* this looks ugly because command is an irc::string * It is important that we dont close the link here, unknown prefix can occur @@ -606,7 +560,7 @@ bool TreeSocket::ProcessLine(std::string &line) } } - // its a user + // it's a user std::vector strparams(params.begin(), params.end()); switch (this->ServerInstance->CallCommandHandler(command.c_str(), strparams, who))