]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_spanningtree/main.cpp
Poach feature request: If a server does not respond after x seconds to a PING, send...
[user/henk/code/inspircd.git] / src / modules / m_spanningtree / main.cpp
index 9205077cf8e6ef6a9f147af97c8896eb4334213e..4dc6eedc0e9d3d4e4cf0cb4a3875b205db6821a7 100644 (file)
@@ -463,11 +463,13 @@ void ModuleSpanningTree::DoPingChecks(time_t curtime)
                                        sock->WriteLine(std::string(":")+ServerInstance->Config->ServerName+" PING "+serv->GetName());
                                        serv->SetNextPingTime(curtime + 60);
                                        serv->LastPing = curtime;
+                                       serv->Warned = false;
                                }
                                else
                                {
                                        // they didnt answer, boot them
                                        ServerInstance->SNO->WriteToSnoMask('l',"Server \002%s\002 pinged out",serv->GetName().c_str());
+                                       sock->SendError("Ping timeout");
                                        sock->Squit(serv,"Ping timeout");
                                        ServerInstance->SE->DelFd(sock);
                                        sock->Close();
@@ -475,6 +477,12 @@ void ModuleSpanningTree::DoPingChecks(time_t curtime)
                                        return;
                                }
                        }
+                       else if ((Utils->PingWarnTime) && (!serv->Warned) && (curtime >= serv->NextPingTime() - (60 - Utils->PingWarnTime)) && (!serv->AnsweredLastPing()))
+                       {
+                               /* The server hasnt responded, send a warning to opers */
+                               ServerInstance->SNO->WriteToSnoMask('l',"Server \002%s\002 has not responded to PING for %d seconds, high latency.", serv->GetName().c_str(), Utils->PingWarnTime);
+                               serv->Warned = true;
+                       }
                }
        }
 }
@@ -872,7 +880,7 @@ void ModuleSpanningTree::OnBackgroundTimer(time_t curtime)
        DoPingChecks(curtime);
 }
 
-void ModuleSpanningTree::OnUserJoin(userrec* user, chanrec* channel)
+void ModuleSpanningTree::OnUserJoin(userrec* user, chanrec* channel, bool &silent)
 {
        // Only do this for local users
        if (IS_LOCAL(user))
@@ -923,7 +931,7 @@ void ModuleSpanningTree::OnChangeName(userrec* user, const std::string &gecos)
        Utils->DoOneToMany(user->nick,"FNAME",params);
 }
 
-void ModuleSpanningTree::OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage)
+void ModuleSpanningTree::OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage, bool &silent)
 {
        if (IS_LOCAL(user))
        {
@@ -993,7 +1001,7 @@ void ModuleSpanningTree::OnUserPostNick(userrec* user, const std::string &oldnic
        }
 }
 
-void ModuleSpanningTree::OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason)
+void ModuleSpanningTree::OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason, bool &silent)
 {
        if ((source) && (IS_LOCAL(source)))
        {