TreeServer::TreeServer(SpanningTreeUtilities* Util, InspIRCd* Instance, const std::string &id) : ServerInstance(Instance), Utils(Util)
{
Parent = NULL;
+ bursting = false;
ServerName.clear();
ServerDesc.clear();
VersionString.clear();
ServerUserCount = ServerOperCount = 0;
- rtt = LastPing = 0;
+ StartBurst = rtt = 0;
Warned = Hidden = DupError = false;
VersionString = ServerInstance->GetVersionString();
SetID(id);
TreeServer::TreeServer(SpanningTreeUtilities* Util, InspIRCd* Instance, std::string Name, std::string Desc, const std::string &id)
: ServerInstance(Instance), ServerName(Name.c_str()), ServerDesc(Desc), Utils(Util)
{
+ bursting = false;
Parent = NULL;
VersionString.clear();
ServerUserCount = ServerOperCount = 0;
VersionString = ServerInstance->GetVersionString();
Route = NULL;
Socket = NULL; /* Fix by brain */
- rtt = LastPing = 0;
+ StartBurst = rtt = 0;
Warned = Hidden = DupError = false;
AddHashEntry();
SetID(id);
TreeServer::TreeServer(SpanningTreeUtilities* Util, InspIRCd* Instance, std::string Name, std::string Desc, const std::string &id, TreeServer* Above, TreeSocket* Sock, bool Hide)
: ServerInstance(Instance), Parent(Above), ServerName(Name.c_str()), ServerDesc(Desc), Socket(Sock), Utils(Util), Hidden(Hide)
{
+ bursting = false;
VersionString.clear();
ServerUserCount = ServerOperCount = 0;
this->SetNextPingTime(time(NULL) + Utils->PingFreq);
this->SetPingFlag();
DupError = false;
- rtt = LastPing = 0;
+ StartBurst = rtt = 0;
+
+ timeval t;
+ gettimeofday(&t, NULL);
+ long ts = (t.tv_sec * 1000) + (t.tv_usec / 1000);
+ this->StartBurst = ts;
+ Instance->Logs->Log("m_spanningtree",DEBUG, "Started bursting at time %lu", ts);
+
/* find the 'route' for this server (e.g. the one directly connected
* to the local server, which we can use to reach it)
*
return sid;
}
+void TreeServer::FinishBurst()
+{
+ this->bursting = false;
+ ServerInstance->XLines->ApplyLines();
+ timeval t;
+ gettimeofday(&t, NULL);
+ long ts = (t.tv_sec * 1000) + (t.tv_usec / 1000);
+ unsigned long bursttime = ts - this->StartBurst;
+ ServerInstance->SNO->WriteToSnoMask('l', "Received end of netburst from \2%s\2 (burst time: %lu %s)", ServerName.c_str(), (bursttime > 1000 ? bursttime / 1000 : bursttime), (bursttime > 1000 ? "secs" : "msecs"));
+ Event rmode((char*)ServerName.c_str(), (Module*)Utils->Creator, "new_server");
+ rmode.Send(ServerInstance);
+}
+
void TreeServer::SetID(const std::string &id)
{
- ServerInstance->Log(DEBUG, "Setting SID to " + id);
+ ServerInstance->Logs->Log("m_spanningtree",DEBUG, "Setting SID to " + id);
sid = id;
server_hash::iterator iter = Utils->sidlist.find(sid);
if (iter == Utils->sidlist.end())