X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Fmain.cpp;h=7c93e7d45555054967de8c8d03e41bf5449c598b;hb=d87bfc277858543ff14cd43f4222c66362464094;hp=1ccfc43a5ec49a17b4e591cb2f6e2f53dd689aef;hpb=02859be56d43bcece02aab350e02bc95ed1bf446;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 1ccfc43a5..7c93e7d45 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -83,7 +83,7 @@ void ModuleSpanningTree::init() ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); delete ServerInstance->PI; - ServerInstance->PI = new SpanningTreeProtocolInterface(this, Utils); + ServerInstance->PI = new SpanningTreeProtocolInterface(Utils); loopCall = false; // update our local user count @@ -145,9 +145,9 @@ std::string ModuleSpanningTree::TimeToStr(time_t secs) secs = secs % 60; mins_up = mins_up % 60; hours_up = hours_up % 24; - return ((days_up ? (ConvToStr(days_up) + "d") : std::string("")) - + (hours_up ? (ConvToStr(hours_up) + "h") : std::string("")) - + (mins_up ? (ConvToStr(mins_up) + "m") : std::string("")) + return ((days_up ? (ConvToStr(days_up) + "d") : "") + + (hours_up ? (ConvToStr(hours_up) + "h") : "") + + (mins_up ? (ConvToStr(mins_up) + "m") : "") + ConvToStr(secs) + "s"); } @@ -194,7 +194,7 @@ restart: // ... if we can find a proper route to them if (tsock) { - tsock->WriteLine(std::string(":") + ServerInstance->Config->GetSID() + " PING " + + tsock->WriteLine(":" + ServerInstance->Config->GetSID() + " PING " + ServerInstance->Config->GetSID() + " " + s->GetID()); s->LastPingMsec = ts; } @@ -271,8 +271,7 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) return; } - QueryType start_type = DNS_QUERY_A; - start_type = DNS_QUERY_AAAA; + QueryType start_type = DNS_QUERY_AAAA; if (strchr(x->IPAddr.c_str(),':')) { in6_addr n; @@ -306,7 +305,7 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) { try { - bool cached; + bool cached = false; ServernameResolver* snr = new ServernameResolver(Utils, x->IPAddr, x, cached, start_type, y); ServerInstance->AddResolver(snr, cached); } @@ -592,7 +591,7 @@ void ModuleSpanningTree::OnUserConnect(LocalUser* user) params.push_back(user->GetIPString()); params.push_back(ConvToStr(user->signon)); params.push_back("+"+std::string(user->FormatModes(true))); - params.push_back(":"+std::string(user->fullname)); + params.push_back(":"+user->fullname); Utils->DoOneToMany(ServerInstance->Config->GetSID(), "UID", params); if (IS_OPER(user)) @@ -625,7 +624,7 @@ void ModuleSpanningTree::OnUserJoin(Membership* memb, bool sync, bool created, C params.push_back(memb->chan->name); params.push_back(ConvToStr(memb->chan->age)); params.push_back(std::string("+") + memb->chan->ChanModes(true)); - params.push_back(memb->modes+","+std::string(memb->user->uuid)); + params.push_back(memb->modes+","+memb->user->uuid); Utils->DoOneToMany(ServerInstance->Config->GetSID(),"FJOIN",params); } } @@ -652,8 +651,7 @@ void ModuleSpanningTree::OnChangeName(User* user, const std::string &gecos) void ModuleSpanningTree::OnChangeIdent(User* user, const std::string &ident) { - // only occurs for local clients - if (user->registered != REG_ALL) + if ((user->registered != REG_ALL) || (!IS_LOCAL(user))) return; parameterlist params; @@ -754,6 +752,9 @@ void ModuleSpanningTree::OnRemoteKill(User* source, User* dest, const std::strin void ModuleSpanningTree::OnPreRehash(User* user, const std::string ¶meter) { + if (loopCall) + return; // Don't generate a REHASH here if we're in the middle of processing a message that generated this one + ServerInstance->Logs->Log("remoterehash", DEBUG, "called with param %s", parameter.c_str()); // Send out to other servers @@ -780,7 +781,7 @@ void ModuleSpanningTree::OnRehash(User* user) std::string msg = "Error in configuration: "; msg.append(e.GetReason()); ServerInstance->SNO->WriteToSnoMask('l', msg); - if (!IS_LOCAL(user)) + if (user && !IS_LOCAL(user)) ServerInstance->PI->SendSNONotice("L", msg); } } @@ -816,10 +817,6 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod) } } -void ModuleSpanningTree::RedoConfig(Module* mod) -{ -} - // note: the protocol does not allow direct umode +o except // via NICK with 8 params. sending OPERTYPE infers +o modechange // locally. @@ -837,11 +834,13 @@ void ModuleSpanningTree::OnAddLine(User* user, XLine *x) if (!x->IsBurstable() || loopCall) return; - char data[MAXBUF]; - snprintf(data,MAXBUF,"%s %s %s %lu %lu :%s", x->type.c_str(), x->Displayable(), - ServerInstance->Config->ServerName.c_str(), (unsigned long)x->set_time, (unsigned long)x->duration, x->reason.c_str()); parameterlist params; - params.push_back(data); + params.push_back(x->type); + params.push_back(x->Displayable()); + params.push_back(ServerInstance->Config->ServerName); + params.push_back(ConvToStr(x->set_time)); + params.push_back(ConvToStr(x->duration)); + params.push_back(":" + x->reason); if (!user) { @@ -860,10 +859,9 @@ void ModuleSpanningTree::OnDelLine(User* user, XLine *x) if (!x->IsBurstable() || loopCall) return; - char data[MAXBUF]; - snprintf(data,MAXBUF,"%s %s", x->type.c_str(), x->Displayable()); parameterlist params; - params.push_back(data); + params.push_back(x->type); + params.push_back(x->Displayable()); if (!user) { @@ -882,7 +880,6 @@ void ModuleSpanningTree::OnMode(User* user, void* dest, int target_type, const p if ((IS_LOCAL(user)) && (user->registered == REG_ALL)) { parameterlist params; - std::string command; std::string output_text; ServerInstance->Parser->TranslateUIDs(translate, text, output_text); @@ -892,7 +889,7 @@ void ModuleSpanningTree::OnMode(User* user, void* dest, int target_type, const p User* u = (User*)dest; params.push_back(u->uuid); params.push_back(output_text); - command = "MODE"; + Utils->DoOneToMany(user->uuid, "MODE", params); } else { @@ -900,10 +897,8 @@ void ModuleSpanningTree::OnMode(User* user, void* dest, int target_type, const p params.push_back(c->name); params.push_back(ConvToStr(c->age)); params.push_back(output_text); - command = "FMODE"; + Utils->DoOneToMany(user->uuid, "FMODE", params); } - - Utils->DoOneToMany(user->uuid, command, params); } } @@ -911,18 +906,13 @@ ModResult ModuleSpanningTree::OnSetAway(User* user, const std::string &awaymsg) { if (IS_LOCAL(user)) { - if (awaymsg.empty()) - { - parameterlist params; - Utils->DoOneToMany(user->uuid,"AWAY",params); - } - else + parameterlist params; + if (!awaymsg.empty()) { - parameterlist params; params.push_back(ConvToStr(user->awaytime)); params.push_back(":" + awaymsg); - Utils->DoOneToMany(user->uuid,"AWAY",params); } + Utils->DoOneToMany(user->uuid, "AWAY", params); } return MOD_RES_PASSTHRU; @@ -940,12 +930,12 @@ void ModuleSpanningTree::ProtoSendMode(void* opaque, TargetTypeFlags target_type if (target_type == TYPE_USER) { User* u = (User*)target; - s->WriteLine(std::string(":")+ServerInstance->Config->GetSID()+" MODE "+u->uuid+" "+output_text); + s->WriteLine(":"+ServerInstance->Config->GetSID()+" MODE "+u->uuid+" "+output_text); } else if (target_type == TYPE_CHANNEL) { Channel* c = (Channel*)target; - s->WriteLine(std::string(":")+ServerInstance->Config->GetSID()+" FMODE "+c->name+" "+ConvToStr(c->age)+" "+output_text); + s->WriteLine(":"+ServerInstance->Config->GetSID()+" FMODE "+c->name+" "+ConvToStr(c->age)+" "+output_text); } } } @@ -956,11 +946,11 @@ void ModuleSpanningTree::ProtoSendMetaData(void* opaque, Extensible* target, con User* u = dynamic_cast(target); Channel* c = dynamic_cast(target); if (u) - s->WriteLine(std::string(":")+ServerInstance->Config->GetSID()+" METADATA "+u->uuid+" "+extname+" :"+extdata); + s->WriteLine(":"+ServerInstance->Config->GetSID()+" METADATA "+u->uuid+" "+extname+" :"+extdata); else if (c) - s->WriteLine(std::string(":")+ServerInstance->Config->GetSID()+" METADATA "+c->name+" "+extname+" :"+extdata); + s->WriteLine(":"+ServerInstance->Config->GetSID()+" METADATA "+c->name+" "+extname+" :"+extdata); else if (!target) - s->WriteLine(std::string(":")+ServerInstance->Config->GetSID()+" METADATA * "+extname+" :"+extdata); + s->WriteLine(":"+ServerInstance->Config->GetSID()+" METADATA * "+extname+" :"+extdata); } CullResult ModuleSpanningTree::cull()