X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Fmain.cpp;h=344a6088bd0994f86e83220fb0447b7e11ac1a8d;hb=8cb20e354533fbec24aafd4e61ff6fa69b434aa2;hp=6bf9e8044436c7584d66539dfb17b64846e074b5;hpb=5267fb9d362aeb326c9e64f7171c957f76776f90;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 6bf9e8044..344a6088b 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -25,7 +25,7 @@ #include "socket.h" #include "xline.h" #include "iohook.h" -#include "modules/spanningtree.h" +#include "modules/server.h" #include "resolvers.h" #include "main.h" @@ -37,10 +37,13 @@ #include "translate.h" ModuleSpanningTree::ModuleSpanningTree() - : rconnect(this), rsquit(this), map(this) + : Stats::EventListener(this) + , rconnect(this) + , rsquit(this) + , map(this) , commands(this) , currmembid(0) - , eventprov(this, "event/spanningtree") + , eventprov(this, "event/server") , DNS(this, "DNS") , loopCall(false) { @@ -133,7 +136,7 @@ void ModuleSpanningTree::ShowLinks(TreeServer* Current, User* user, int hops) InspIRCd::Format("%d %s", (((Utils->FlatLinks) && (!user->IsOper())) ? 0 : hops), Current->GetDesc().c_str())); } -void ModuleSpanningTree::HandleLinks(const std::vector& parameters, User* user) +void ModuleSpanningTree::HandleLinks(const CommandBase::Params& parameters, User* user) { ShowLinks(Utils->TreeRoot,user,0); user->WriteNumeric(RPL_ENDOFLINKS, '*', "End of /LINKS list."); @@ -200,7 +203,15 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) return; } - if (strchr(x->IPAddr.c_str(),':')) +#ifndef _WIN32 + if (x->IPAddr.find('/') != std::string::npos) + { + struct stat sb; + if (stat(x->IPAddr.c_str(), &sb) == -1 || !S_ISSOCK(sb.st_mode)) + ipvalid = false; + } +#endif + if (x->IPAddr.find(':') != std::string::npos) { in6_addr n; if (inet_pton(AF_INET6, x->IPAddr.c_str(), &n) < 1) @@ -209,7 +220,7 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) else { in_addr n; - if (inet_aton(x->IPAddr.c_str(),&n) < 1) + if (inet_pton(AF_INET, x->IPAddr.c_str(),&n) < 1) ipvalid = false; } @@ -231,7 +242,7 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) } else if (!DNS) { - ServerInstance->SNO->WriteToSnoMask('l', "CONNECT: Error connecting \002%s\002: Hostname given and m_dns.so is not loaded, unable to resolve.", x->Name.c_str()); + ServerInstance->SNO->WriteToSnoMask('l', "CONNECT: Error connecting \002%s\002: Hostname given and core_dns is not loaded, unable to resolve.", x->Name.c_str()); } else { @@ -240,7 +251,7 @@ void ModuleSpanningTree::ConnectServer(Link* x, Autoconnect* y) irc::sockets::sockaddrs bind; if ((!x->Bind.empty()) && (irc::sockets::aptosa(x->Bind, 0, bind))) { - if (bind.sa.sa_family == AF_INET) + if (bind.family() == AF_INET) start_type = DNS::QUERY_A; } @@ -273,12 +284,12 @@ void ModuleSpanningTree::AutoConnectServers(time_t curtime) void ModuleSpanningTree::DoConnectTimeout(time_t curtime) { - std::map >::iterator i = Utils->timeoutlist.begin(); + SpanningTreeUtilities::TimeoutList::iterator i = Utils->timeoutlist.begin(); while (i != Utils->timeoutlist.end()) { TreeSocket* s = i->first; - std::pair p = i->second; - std::map >::iterator me = i; + std::pair p = i->second; + SpanningTreeUtilities::TimeoutList::iterator me = i; i++; if (s->GetLinkState() == DYING) { @@ -287,14 +298,14 @@ void ModuleSpanningTree::DoConnectTimeout(time_t curtime) } else if (curtime > s->age + p.second) { - ServerInstance->SNO->WriteToSnoMask('l',"CONNECT: Error connecting \002%s\002 (timeout of %d seconds)",p.first.c_str(),p.second); + ServerInstance->SNO->WriteToSnoMask('l',"CONNECT: Error connecting \002%s\002 (timeout of %u seconds)",p.first.c_str(),p.second); Utils->timeoutlist.erase(me); s->Close(); } } } -ModResult ModuleSpanningTree::HandleVersion(const std::vector& parameters, User* user) +ModResult ModuleSpanningTree::HandleVersion(const CommandBase::Params& parameters, User* user) { // We've already confirmed that !parameters.empty(), so this is safe TreeServer* found = Utils->FindServerMask(parameters[0]); @@ -321,7 +332,7 @@ ModResult ModuleSpanningTree::HandleVersion(const std::vector& para return MOD_RES_DENY; } -ModResult ModuleSpanningTree::HandleConnect(const std::vector& parameters, User* user) +ModResult ModuleSpanningTree::HandleConnect(const CommandBase::Params& parameters, User* user) { for (std::vector >::iterator i = Utils->LinkBlocks.begin(); i < Utils->LinkBlocks.end(); i++) { @@ -386,33 +397,33 @@ void ModuleSpanningTree::OnPostTopicChange(User* user, Channel* chan, const std: 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) +void ModuleSpanningTree::OnUserPostMessage(User* user, const MessageTarget& target, const MessageDetails& details) { if (!IS_LOCAL(user)) return; - const char* message_type = (msgtype == MSG_PRIVMSG ? "PRIVMSG" : "NOTICE"); - if (target_type == TYPE_USER) + const char* message_type = (details.type == MSG_PRIVMSG ? "PRIVMSG" : "NOTICE"); + if (target.type == MessageTarget::TYPE_USER) { - User* d = (User*) dest; + User* d = target.Get(); if (!IS_LOCAL(d)) { CmdBuilder params(user, message_type); params.push_back(d->uuid); - params.push_last(text); + params.push_last(details.text); params.Unicast(d); } } - else if (target_type == TYPE_CHANNEL) + else if (target.type == MessageTarget::TYPE_CHANNEL) { - Utils->SendChannelMessage(user->uuid, (Channel*)dest, text, status, exempt_list, message_type); + Utils->SendChannelMessage(user->uuid, target.Get(), details.text, target.status, details.exemptions, message_type); } - else if (target_type == TYPE_SERVER) + else if (target.type == MessageTarget::TYPE_SERVER) { - char* target = (char*) dest; + const std::string* serverglob = target.Get(); CmdBuilder par(user, message_type); - par.push_back(target); - par.push_last(text); + par.push_back(*serverglob); + par.push_last(details.text); par.Broadcast(); } } @@ -482,12 +493,12 @@ void ModuleSpanningTree::OnChangeHost(User* user, const std::string &newhost) CmdBuilder(user, "FHOST").push(newhost).Broadcast(); } -void ModuleSpanningTree::OnChangeName(User* user, const std::string &gecos) +void ModuleSpanningTree::OnChangeName(User* user, const std::string& real) { if (user->registered != REG_ALL || !IS_LOCAL(user)) return; - CmdBuilder(user, "FNAME").push_last(gecos).Broadcast(); + CmdBuilder(user, "FNAME").push_last(real).Broadcast(); } void ModuleSpanningTree::OnChangeIdent(User* user, const std::string &ident) @@ -642,7 +653,7 @@ void ModuleSpanningTree::OnUnloadModule(Module* mod) { TreeServer* server = i->second; if (!server->IsRoot()) - FOREACH_MOD_CUSTOM(GetEventProvider(), SpanningTreeEventListener, OnServerSplit, (server)); + FOREACH_MOD_CUSTOM(GetEventProvider(), ServerEventListener, OnServerSplit, (server)); } return; }