summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/m_spanningtree.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp
index c36005fb2..97ed6754b 100644
--- a/src/modules/m_spanningtree.cpp
+++ b/src/modules/m_spanningtree.cpp
@@ -1090,6 +1090,26 @@ class TreeSocket : public InspSocket
return true;
}
+ bool SyncChannelTS(std::string source, std::deque<std::string> &params)
+ {
+ if (params.size() == 2)
+ {
+ chanrec* c = Srv->FindChannel(params[0]);
+ if (c)
+ {
+ time_t theirTS = atoi(params[1].c_str());
+ time_t ourTS = c->age;
+ if (ourTS >= theirTS)
+ {
+ log(DEBUG,"Updating timestamp for %s, our timestamp was %lu and theirs is %lu",c->name,ourTS,theirTS);
+ c->age = theirTS;
+ }
+ }
+ }
+ DoOneToMany(Srv->GetServerName(),"SYNCTS",params);
+ return true;
+ }
+
/* NICK command */
bool IntroduceClient(std::string source, std::deque<std::string> &params)
{
@@ -1250,6 +1270,7 @@ class TreeSocket : public InspSocket
this->WriteLine(":"+Srv->GetServerName()+" FMODE "+c->name+" +h "+specific_halfop[y]->nick);
}
}
+ this->WriteLine(":"+Srv->GetServerName()+" SYNCTS "+c->name+" "+ConvToStr(c->age));
}
/* Send G, Q, Z and E lines */
@@ -2374,6 +2395,10 @@ class TreeSocket : public InspSocket
{
return this->ForceJoin(prefix,params);
}
+ else if (command == "SYNCTS")
+ {
+ return this->SyncChannelTS(prefix,params);
+ }
else if (command == "SERVER")
{
return this->RemoteServer(prefix,params);