From 2b6c5833bb6cd6b1e21bb66a0ebbc6a6e3e86767 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 22 Jun 2017 17:59:58 -0400 Subject: Ping uplink occasionally and disconnect if no pong is received --- include/modules/protocol/rfc1459.h | 8 ++++++++ include/uplink.h | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/modules/protocol/rfc1459.h b/include/modules/protocol/rfc1459.h index 54c4bada5..8780892e0 100644 --- a/include/modules/protocol/rfc1459.h +++ b/include/modules/protocol/rfc1459.h @@ -288,6 +288,14 @@ class Ping : public IRCDMessage void Run(MessageSource &source, const std::vector ¶ms) override; }; +class Pong : public IRCDMessage +{ + public: + Pong(Module *creator, const Anope::string &mname = "PONG") : IRCDMessage(creator, mname) { } + + void Run(MessageSource &source, const std::vector ¶ms) override; +}; + class Privmsg : public IRCDMessage { public: diff --git a/include/uplink.h b/include/uplink.h index 8cb8c8b20..be2675931 100644 --- a/include/uplink.h +++ b/include/uplink.h @@ -21,6 +21,7 @@ #include "sockets.h" #include "protocol.h" +#include "timers.h" namespace Uplink { @@ -40,13 +41,22 @@ namespace Uplink IRCMessage message(Me, command, std::forward(args)...); SendMessage(message); } + + class PingTimer : public Timer + { + public: + PingTimer(time_t); + void Tick(time_t) override; + }; } /* This is the socket to our uplink */ class UplinkSocket : public ConnectionSocket, public BufferedSocket { public: - bool error; + bool error = false; + time_t last_read = 0; + bool pinged = false; UplinkSocket(); ~UplinkSocket(); bool ProcessRead() override; -- cgit