#include "utils.h"
#include "treeserver.h"
-/* $ModDep: m_spanningtree/utils.h m_spanningtree/treeserver.h */
-
/** We use this constructor only to create the 'root' item, Utils->TreeRoot, which
* represents our own server. Therefore, it has no route, no parent, and
* no socket associated with it. Its version string is our own local version.
*/
-TreeServer::TreeServer(SpanningTreeUtilities* Util)
+TreeServer::TreeServer()
: Parent(NULL), Route(NULL), ServerName(ServerInstance->Config->ServerName), ServerDesc(ServerInstance->Config->ServerDesc)
- , VersionString(ServerInstance->GetVersionString()), Socket(NULL), Utils(Util), sid(ServerInstance->Config->GetSID()), ServerUser(ServerInstance->FakeClient)
+ , VersionString(ServerInstance->GetVersionString()), Socket(NULL), sid(ServerInstance->Config->GetSID()), ServerUser(ServerInstance->FakeClient)
, age(ServerInstance->Time()), Warned(false), bursting(false), UserCount(0), OperCount(0), rtt(0), StartBurst(0), Hidden(false)
{
AddHashEntry();
* This constructor initializes the server's Route and Parent, and sets up
* its ping counters so that it will be pinged one minute from now.
*/
-TreeServer::TreeServer(SpanningTreeUtilities* Util, const std::string& Name, const std::string& Desc, const std::string& id, TreeServer* Above, TreeSocket* Sock, bool Hide)
- : Parent(Above), ServerName(Name), ServerDesc(Desc), Socket(Sock), Utils(Util), sid(id), ServerUser(new FakeUser(id, Name))
+TreeServer::TreeServer(const std::string& Name, const std::string& Desc, const std::string& id, TreeServer* Above, TreeSocket* Sock, bool Hide)
+ : Parent(Above), ServerName(Name), ServerDesc(Desc), Socket(Sock), sid(id), ServerUser(new FakeUser(id, Name))
, age(ServerInstance->Time()), Warned(false), bursting(true), UserCount(0), OperCount(0), rtt(0), Hidden(Hide)
{
SetNextPingTime(ServerInstance->Time() + Utils->PingFreq);
this->bursting = false;
SetNextPingTime(ServerInstance->Time() + Utils->PingFreq);
SetPingFlag();
- for(unsigned int q=0; q < ChildCount(); q++)
+ for (ChildServers::const_iterator i = Children.begin(); i != Children.end(); ++i)
{
- TreeServer* child = GetChild(q);
+ TreeServer* child = *i;
child->FinishBurstInternal();
}
}
User* a = (User*)*n;
if (!IS_LOCAL(a))
{
- if (this->Utils->quiet_bursts)
+ if (Utils->quiet_bursts)
a->quietquit = true;
if (ServerInstance->Config->HideSplits)
VersionString = Version;
}
-unsigned int TreeServer::ChildCount()
-{
- return Children.size();
-}
-
-TreeServer* TreeServer::GetChild(unsigned int n)
-{
- if (n < Children.size())
- {
- /* Make sure they cant request
- * an out-of-range object. After
- * all we know what these programmer
- * types are like *grin*.
- */
- return Children[n];
- }
- else
- {
- return NULL;
- }
-}
-
void TreeServer::AddChild(TreeServer* Child)
{
Children.push_back(Child);
* This is used during netsplits to automatically tidy up the
* server tree. It is slow, we don't use it for much else.
*/
-bool TreeServer::Tidy()
+void TreeServer::Tidy()
{
while (1)
{
std::vector<TreeServer*>::iterator a = Children.begin();
if (a == Children.end())
- return true;
+ return;
TreeServer* s = *a;
s->Tidy();
s->cull();
CullResult TreeServer::cull()
{
- if (ServerUser != ServerInstance->FakeClient)
+ if (!IsRoot())
ServerUser->cull();
return classbase::cull();
}
TreeServer::~TreeServer()
{
/* We'd better tidy up after ourselves, eh? */
- if (ServerUser != ServerInstance->FakeClient)
+ if (!IsRoot())
delete ServerUser;
Utils->sidlist.erase(sid);