X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Fmain.cpp;h=b3cc78118037d35ca730b8d35ad81cad653e9aee;hb=cc74fb0be4ce4a5f55719dcf4b1045fe156ded1b;hp=f458c2d2f86a44aff9811159f301a03d8726e368;hpb=7e7e773d4d43e68c18c19e2ec712f4250e5f756d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index f458c2d2f..b3cc78118 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), @@ -59,9 +59,6 @@ void ModuleSpanningTree::init() Utils = new SpanningTreeUtilities(this); Utils->TreeRoot = new TreeServer; commands = new SpanningTreeCommands(this); - ServerInstance->Modules->AddService(commands->rconnect); - ServerInstance->Modules->AddService(commands->rsquit); - ServerInstance->Modules->AddService(commands->map); delete ServerInstance->PI; ServerInstance->PI = new SpanningTreeProtocolInterface; @@ -422,10 +419,7 @@ void ModuleSpanningTree::OnPostTopicChange(User* user, Channel* chan, const std: if (!IS_LOCAL(user)) return; - CmdBuilder params(user->uuid, "TOPIC"); - params.push_back(chan->name); - params.push_last(topic); - params.Broadcast(); + CommandFTopic::Builder(user, chan).Broadcast(); } void ModuleSpanningTree::OnUserMessage(User* user, void* dest, int target_type, const std::string& text, char status, const CUList& exempt_list, MessageType msgtype) @@ -621,7 +615,7 @@ void ModuleSpanningTree::OnPreRehash(User* user, const std::string ¶meter) } } -void ModuleSpanningTree::OnRehash(User* user) +void ModuleSpanningTree::ReadConfig(ConfigStatus& status) { // Re-read config stuff try @@ -636,7 +630,7 @@ void ModuleSpanningTree::OnRehash(User* user) std::string msg = "Error in configuration: "; msg.append(e.GetReason()); ServerInstance->SNO->WriteToSnoMask('l', msg); - if (user && !IS_LOCAL(user)) + if (status.srcuser && !IS_LOCAL(status.srcuser)) ServerInstance->PI->SendSNONotice("L", msg); } } @@ -652,14 +646,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(); @@ -672,6 +666,13 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod) sock->Close(); } } + + for (SpanningTreeUtilities::TimeoutList::const_iterator i = Utils->timeoutlist.begin(); i != Utils->timeoutlist.end(); ++i) + { + TreeSocket* sock = i->first; + if (sock->GetIOHook() && sock->GetIOHook()->creator == mod) + sock->Close(); + } } // note: the protocol does not allow direct umode +o except @@ -717,39 +718,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)