User *u = ServerInstance->FindNick(ServerName);
if (u)
{
- Found = FindServer(u->server);
- if (Found)
- return Found->GetRoute();
+ return TreeServer::Get(u)->GetRoute();
}
return NULL;
if (exempt_list.find(i->first) == exempt_list.end())
{
- TreeServer* best = this->BestRouteTo(i->first->server);
- if (best)
- list.insert(best->GetSocket());
+ TreeServer* best = TreeServer::Get(i->first);
+ list.insert(best->GetSocket());
}
}
return;
if (!Route)
return false;
- Route->GetSocket()->WriteLine(params);
+ DoOneToOne(params, Route);
return true;
}
+void SpanningTreeUtilities::DoOneToOne(const CmdBuilder& params, Server* server)
+{
+ TreeServer* ts = static_cast<TreeServer*>(server);
+ ts->GetSocket()->WriteLine(params);
+}
+
void SpanningTreeUtilities::RefreshIPCache()
{
ValidIPs.clear();
continue;
}
- if (L->AllowMask.length())
- ValidIPs.push_back(L->AllowMask);
+ ValidIPs.insert(ValidIPs.end(), L->AllowMasks.begin(), L->AllowMasks.end());
irc::sockets::sockaddrs dummy;
bool ipvalid = irc::sockets::aptosa(L->IPAddr, L->Port, dummy);
reference<Link> L = new Link(tag);
std::string linkname = tag->getString("name");
L->Name = linkname.c_str();
- L->AllowMask = tag->getString("allowmask");
+
+ irc::spacesepstream sep = tag->getString("allowmask");
+ for (std::string s; sep.GetToken(s);)
+ L->AllowMasks.push_back(s);
+
L->IPAddr = tag->getString("ipaddr");
L->Port = tag->getInt("port");
L->SendPass = tag->getString("sendpass", tag->getString("password"));
AutoconnectBlocks.push_back(A);
}
+ for (server_hash::const_iterator i = serverlist.begin(); i != serverlist.end(); ++i)
+ i->second->CheckULine();
+
RefreshIPCache();
}