X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodules%2Fm_spanningtree%2Fmain.cpp;h=8c04d6c909797cacebf09dbcbdb7c34d6ee7bd51;hb=d736eba00b274c87662bd73a3acf8288135643d6;hp=fed55d4fd9e53ea0d0352eb4f1e6c2d1f1a61193;hpb=992674362c5f64bdb8e1942eeaa7612524529cd6;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index fed55d4fd..8c04d6c90 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -36,13 +36,13 @@ #include "protocolinterface.h" ModuleSpanningTree::ModuleSpanningTree() - : commands(NULL), DNS(this, "DNS") + : rconnect(this), rsquit(this), map(this) + , commands(NULL), DNS(this, "DNS") { } SpanningTreeCommands::SpanningTreeCommands(ModuleSpanningTree* module) - : rconnect(module), rsquit(module), map(module), - svsjoin(module), svspart(module), svsnick(module), metadata(module), + : svsjoin(module), svspart(module), svsnick(module), metadata(module), uid(module), opertype(module), fjoin(module), ijoin(module), resync(module), fmode(module), ftopic(module), fhost(module), fident(module), fname(module), away(module), addline(module), delline(module), encap(module), idle(module), @@ -63,6 +63,7 @@ void ModuleSpanningTree::init() delete ServerInstance->PI; ServerInstance->PI = new SpanningTreeProtocolInterface; loopCall = false; + SplitInProgress = false; // update our local user count Utils->TreeRoot->UserCount = ServerInstance->Users->local_users.size(); @@ -99,7 +100,7 @@ void ModuleSpanningTree::ShowLinks(TreeServer* Current, User* user, int hops) else if ((Current->Hidden) && (!user->IsOper())) return; - user->WriteNumeric(364, "%s %s %s :%d %s", user->nick.c_str(), Current->GetName().c_str(), + user->WriteNumeric(RPL_LINKS, "%s %s :%d %s", Current->GetName().c_str(), (Utils->FlatLinks && (!user->IsOper())) ? ServerInstance->Config->ServerName.c_str() : Parent.c_str(), (Utils->FlatLinks && (!user->IsOper())) ? 0 : hops, Current->GetDesc().c_str()); @@ -108,7 +109,7 @@ void ModuleSpanningTree::ShowLinks(TreeServer* Current, User* user, int hops) void ModuleSpanningTree::HandleLinks(const std::vector& parameters, User* user) { ShowLinks(Utils->TreeRoot,user,0); - user->WriteNumeric(365, "%s * :End of /LINKS list.",user->nick.c_str()); + user->WriteNumeric(RPL_ENDOFLINKS, "* :End of /LINKS list."); } std::string ModuleSpanningTree::TimeToStr(time_t secs) @@ -280,7 +281,7 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) catch (DNS::Exception& e) { delete snr; - ServerInstance->SNO->WriteToSnoMask('l', "CONNECT: Error connecting \002%s\002: %s.",x->Name.c_str(), e.GetReason()); + ServerInstance->SNO->WriteToSnoMask('l', "CONNECT: Error connecting \002%s\002: %s.",x->Name.c_str(), e.GetReason().c_str()); ConnectServer(y, false); } } @@ -334,11 +335,11 @@ ModResult ModuleSpanningTree::HandleVersion(const std::vector& para return MOD_RES_PASSTHRU; } std::string Version = found->GetVersion(); - user->WriteNumeric(351, "%s :%s",user->nick.c_str(),Version.c_str()); + user->WriteNumeric(RPL_VERSION, ":%s", Version.c_str()); } else { - user->WriteNumeric(402, "%s %s :No such server",user->nick.c_str(),parameters[0].c_str()); + user->WriteNumeric(ERR_NOSUCHSERVER, "%s :No such server", parameters[0].c_str()); } return MOD_RES_DENY; } @@ -547,13 +548,25 @@ void ModuleSpanningTree::OnUserPart(Membership* memb, std::string &partmessage, void ModuleSpanningTree::OnUserQuit(User* user, const std::string &reason, const std::string &oper_message) { - if ((IS_LOCAL(user)) && (user->registered == REG_ALL)) + if (IS_LOCAL(user)) { if (oper_message != reason) ServerInstance->PI->SendMetaData(user, "operquit", oper_message); CmdBuilder(user, "QUIT").push_last(reason).Broadcast(); } + else + { + // Hide the message if one of the following is true: + // - User is being quit due to a netsplit and quietbursts is on + // - Server is a silent uline + bool hide = (((this->SplitInProgress) && (Utils->quiet_bursts)) || (ServerInstance->SilentULine(user->server))); + if (!hide) + { + ServerInstance->SNO->WriteToSnoMask('Q', "Client exiting on server %s: %s (%s) [%s]", + user->server.c_str(), user->GetFullRealHost().c_str(), user->GetIPString().c_str(), oper_message.c_str()); + } + } // Regardless, We need to modify the user Counts.. TreeServer* SourceServer = Utils->FindServer(user->server); @@ -589,7 +602,7 @@ void ModuleSpanningTree::OnUserPostNick(User* user, const std::string &oldnick) void ModuleSpanningTree::OnUserKick(User* source, Membership* memb, const std::string &reason, CUList& excepts) { - if ((!IS_LOCAL(source) || source != ServerInstance->FakeClient)) + if ((!IS_LOCAL(source)) && (source != ServerInstance->FakeClient)) return; CmdBuilder params(source, "KICK"); @@ -631,7 +644,7 @@ void ModuleSpanningTree::ReadConfig(ConfigStatus& status) msg.append(e.GetReason()); ServerInstance->SNO->WriteToSnoMask('l', msg); if (status.srcuser && !IS_LOCAL(status.srcuser)) - ServerInstance->PI->SendSNONotice("L", msg); + ServerInstance->PI->SendSNONotice('L', msg); } } @@ -646,14 +659,14 @@ void ModuleSpanningTree::OnLoadModule(Module* mod) data.push_back('='); data.append(v.link_data); } - ServerInstance->PI->SendMetaData(NULL, "modules", data); + ServerInstance->PI->SendMetaData("modules", data); } void ModuleSpanningTree::OnUnloadModule(Module* mod) { if (!Utils) return; - ServerInstance->PI->SendMetaData(NULL, "modules", "-" + mod->ModuleSourceFile); + ServerInstance->PI->SendMetaData("modules", "-" + mod->ModuleSourceFile); // Close all connections which use an IO hook provided by this module const TreeServer::ChildServers& list = Utils->TreeRoot->GetChildren(); @@ -718,39 +731,6 @@ ModResult ModuleSpanningTree::OnSetAway(User* user, const std::string &awaymsg) return MOD_RES_PASSTHRU; } -void ModuleSpanningTree::ProtoSendMode(void* opaque, TargetTypeFlags target_type, void* target, const parameterlist &modeline, const std::vector &translate) -{ - TreeSocket* s = (TreeSocket*)opaque; - std::string output_text = CommandParser::TranslateUIDs(translate, modeline); - - if (target) - { - if (target_type == TYPE_USER) - { - User* u = (User*)target; - s->WriteLine(":"+ServerInstance->Config->GetSID()+" MODE "+u->uuid+" "+output_text); - } - else if (target_type == TYPE_CHANNEL) - { - Channel* c = (Channel*)target; - s->WriteLine(":"+ServerInstance->Config->GetSID()+" FMODE "+c->name+" "+ConvToStr(c->age)+" "+output_text); - } - } -} - -void ModuleSpanningTree::ProtoSendMetaData(void* opaque, Extensible* target, const std::string &extname, const std::string &extdata) -{ - TreeSocket* s = static_cast(opaque); - User* u = dynamic_cast(target); - Channel* c = dynamic_cast(target); - if (u) - s->WriteLine(":"+ServerInstance->Config->GetSID()+" METADATA "+u->uuid+" "+extname+" :"+extdata); - else if (c) - s->WriteLine(":"+ServerInstance->Config->GetSID()+" METADATA "+c->name+" "+ConvToStr(c->age)+" "+extname+" :"+extdata); - else if (!target) - s->WriteLine(":"+ServerInstance->Config->GetSID()+" METADATA * "+extname+" :"+extdata); -} - CullResult ModuleSpanningTree::cull() { if (Utils)