diff options
author | Adam <Adam@anope.org> | 2010-07-10 20:58:29 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2010-07-10 20:58:29 -0400 |
commit | fa622aae38b7aa11ecab78412e91e262ae6fb3e3 (patch) | |
tree | aaf62febc418af7de308f41f8140b1f5b031909d /src/servers.cpp | |
parent | 07ec79e8818d62ba1225674891eaf7fbd3e89bbd (diff) |
Fixed tracking of introducing and quitting juped servers
Diffstat (limited to 'src/servers.cpp')
-rw-r--r-- | src/servers.cpp | 34 |
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; |