From 41a9b36687713dded9879456a905860dfe209cd2 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 5 Sep 2015 01:40:24 +0200 Subject: [PATCH] CIRCSock::OnNickMessage() handler --- include/znc/IRCSock.h | 3 ++- src/IRCSock.cpp | 58 +++++++++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/include/znc/IRCSock.h b/include/znc/IRCSock.h index 8ba9d46d..f4eb243d 100644 --- a/include/znc/IRCSock.h +++ b/include/znc/IRCSock.h @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -28,7 +29,6 @@ class CChan; class CUser; class CIRCNetwork; class CClient; -class CMessage; // !Forward Declarations // TODO: This class needs new name @@ -57,6 +57,7 @@ public: bool OnChanMsg(CMessage& Message); bool OnPrivNotice(CMessage& Message); bool OnChanNotice(CMessage& Message); + bool OnNickMessage(CNickMessage& Message); bool OnServerCapAvailable(const CString& sCap); // !Message Handlers diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index 78938036..61a8d303 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include using std::set; @@ -511,32 +510,7 @@ void CIRCSock::ReadLine(const CString& sData) { if (Message.GetType() == CMessage::Type::Nick) { CNickMessage& NickMsg = static_cast(Message); - CString sNewNick = NickMsg.GetNewNick(); - bool bIsVisible = false; - - vector vFoundChans; - const vector& vChans = m_pNetwork->GetChans(); - - for (CChan* pChan : vChans) { - if (pChan->ChangeNick(Nick.GetNick(), sNewNick)) { - vFoundChans.push_back(pChan); - - if (!pChan->IsDetached()) { - bIsVisible = true; - } - } - } - - if (Nick.NickEquals(GetNick())) { - // We are changing our own nick, the clients always must see this! - bIsVisible = false; - SetNick(sNewNick); - m_pNetwork->PutUser(Message); - } - - IRCSOCKMODULECALL(OnNickMessage(NickMsg, vFoundChans), NOTHING); - - if (!bIsVisible) { + if (OnNickMessage(NickMsg)) { return; } } else if (Message.GetType() == CMessage::Type::Quit) { @@ -1085,6 +1059,36 @@ bool CIRCSock::OnChanMsg(CMessage& Message) { return ((pChan) && (pChan->IsDetached())); } +bool CIRCSock::OnNickMessage(CNickMessage& Message) { + const CNick& Nick = Message.GetNick(); + CString sNewNick = Message.GetNewNick(); + bool bIsVisible = false; + + vector vFoundChans; + const vector& vChans = m_pNetwork->GetChans(); + + for (CChan* pChan : vChans) { + if (pChan->ChangeNick(Nick.GetNick(), sNewNick)) { + vFoundChans.push_back(pChan); + + if (!pChan->IsDetached()) { + bIsVisible = true; + } + } + } + + if (Nick.NickEquals(GetNick())) { + // We are changing our own nick, the clients always must see this! + bIsVisible = false; + SetNick(sNewNick); + m_pNetwork->PutUser(Message); + } + + IRCSOCKMODULECALL(OnNickMessage(Message, vFoundChans), NOTHING); + + return !bIsVisible; +} + void CIRCSock::PutIRC(const CString& sLine) { // Only print if the line won't get sent immediately (same condition as in TrySend()!) if (m_bFloodProtection && m_iSendsAllowed <= 0) {