summaryrefslogtreecommitdiff
path: root/src/servers.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2010-07-10 20:58:29 -0400
committerAdam <Adam@anope.org>2010-07-10 20:58:29 -0400
commitfa622aae38b7aa11ecab78412e91e262ae6fb3e3 (patch)
treeaaf62febc418af7de308f41f8140b1f5b031909d /src/servers.cpp
parent07ec79e8818d62ba1225674891eaf7fbd3e89bbd (diff)
Fixed tracking of introducing and quitting juped servers
Diffstat (limited to 'src/servers.cpp')
-rw-r--r--src/servers.cpp34
1 files changed, 19 insertions, 15 deletions
diff --git a/src/servers.cpp b/src/servers.cpp
index d1f094dbb..69562e9c2 100644
--- a/src/servers.cpp
+++ b/src/servers.cpp
@@ -66,16 +66,19 @@ Server::Server(Server *uplink, const std::string &name, unsigned int hops, const
/* Add this server to our uplinks leaf list */
if (UplinkServer)
+ {
UplinkServer->AddLink(this);
- if (Me && UplinkServer && Me == UplinkServer)
- {
- /* Bring in our pseudo-clients */
- introduce_user("");
+ /* Check to be sure the uplink server only has one uplink, otherwise we introduce our clients if we jupe servers */
+ if (Me == UplinkServer && UplinkServer->GetLinks()->size() == 1)
+ {
+ /* Bring in our pseudo-clients */
+ introduce_user("");
- /* And some IRCds needs Global joined in the logchan */
- if (LogChan && ircd->join2msg)
- Global->Join(Config.LogChannel);
+ /* And some IRCds needs Global joined in the logchan */
+ if (LogChan && ircd->join2msg)
+ Global->Join(Config.LogChannel);
+ }
}
}
@@ -199,15 +202,13 @@ void Server::AddLink(Server *s)
/* This is only used for Me, initially we start services with an uplink of NULL, then
* connect to the server which introduces itself and has us as the uplink, which calls this
*/
- if (!UplinkServer)
+ if (this == Me && !UplinkServer)
UplinkServer = s;
- else
- {
- if (!Links)
- Links = new std::list<Server *>();
+
+ if (!Links)
+ Links = new std::list<Server *>();
- Links->push_back(s);
- }
+ Links->push_back(s);
Alog() << "Server " << s->GetName() << " introduced from " << GetName();
}
@@ -298,8 +299,10 @@ bool Server::IsULined() const
*/
Server *Server::Find(const std::string &name, Server *s)
{
+ Alog(LOG_DEBUG) << "Server::Find called for " << name;
+
if (!s)
- s = Me->GetUplink();
+ s = Me;
if (s->GetName() == name || s->GetSID() == name)
return s;
@@ -311,6 +314,7 @@ Server *Server::Find(const std::string &name, Server *s)
if (serv->GetName() == name || serv->GetSID() == name)
return serv;
+ Alog(LOG_DEBUG) << "Server::Find checking " << serv->GetName() << " server tree for " << name;
Server *server = Server::Find(name, serv);
if (server)
return server;