diff --git a/include/znc/IRCSock.h b/include/znc/IRCSock.h index 94045908..91247beb 100644 --- a/include/znc/IRCSock.h +++ b/include/znc/IRCSock.h @@ -62,6 +62,8 @@ public: bool OnNoticeMessage(CNoticeMessage& Message); bool OnNumericMessage(CNumericMessage& Message); bool OnPartMessage(CPartMessage& Message); + bool OnPingMessage(CMessage& Message); + bool OnPongMessage(CMessage& Message); bool OnQuitMessage(CQuitMessage& Message); bool OnTextMessage(CTextMessage& Message); bool OnTopicMessage(CTopicMessage& Message); diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index 834752d1..fea74b19 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -166,13 +166,13 @@ void CIRCSock::ReadLine(const CString& sData) { CString sCmd = Message.GetCommand(); if (Message.GetType() == CMessage::Type::Ping) { - // Generate a reply and don't forward this to any user, - // we don't want any PING forwarded - PutIRCQuick("PONG " + Message.GetParam(0)); - return; + if (OnPingMessage(Message)) { + return; + } } else if (Message.GetType() == CMessage::Type::Pong) { - // Block PONGs, we already responded to the pings - return; + if (OnPongMessage(Message)) { + return; + } } else if (Message.GetType() == CMessage::Type::Error) { //ERROR :Closing Link: nick[24.24.24.24] (Excess Flood) CString sError = Message.GetParam(0); @@ -1031,6 +1031,18 @@ bool CIRCSock::OnPartMessage(CPartMessage& Message) { return bDetached; } +bool CIRCSock::OnPingMessage(CMessage& Message) { + // Generate a reply and don't forward this to any user, + // we don't want any PING forwarded + PutIRCQuick("PONG " + Message.GetParam(0)); + return true; +} + +bool CIRCSock::OnPongMessage(CMessage& Message) { + // Block PONGs, we already responded to the pings + return true; +} + bool CIRCSock::OnQuitMessage(CQuitMessage& Message) { const CNick& Nick = Message.GetNick(); bool bIsVisible = false;