From c6d093a53ad960f1618f610f27d664838b5aa819 Mon Sep 17 00:00:00 2001 From: OGAWA Hirofumi Date: Sun, 22 Feb 2015 04:32:35 +0900 Subject: [PATCH] Change to return the value from OnUserQuit() as request --- include/znc/Modules.h | 3 ++- modules/clearbufferonmsg.cpp | 3 ++- modules/modperl/functions.in | 2 +- modules/modperl/module.h | 2 +- modules/modpython/functions.in | 2 +- modules/modpython/module.h | 2 +- src/Client.cpp | 3 ++- src/Modules.cpp | 4 ++-- 8 files changed, 12 insertions(+), 9 deletions(-) diff --git a/include/znc/Modules.h b/include/znc/Modules.h index f9ea0983..f963f4c7 100644 --- a/include/znc/Modules.h +++ b/include/znc/Modules.h @@ -722,8 +722,9 @@ public: virtual EModRet OnUserTopicRequest(CString& sChannel); /** This module hook is called when a user requests to quit from network. * @param sMessage The quit message the client sent. + * @return See CModule::EModRet. */ - virtual void OnUserQuit(CString& sMessage); + virtual EModRet OnUserQuit(CString& sMessage); /** Called when we receive a CTCP reply from IRC. * @param Nick The nick the CTCP reply is from. diff --git a/modules/clearbufferonmsg.cpp b/modules/clearbufferonmsg.cpp index 313bac9a..557e7680 100644 --- a/modules/clearbufferonmsg.cpp +++ b/modules/clearbufferonmsg.cpp @@ -105,9 +105,10 @@ public: return CONTINUE; } - virtual void OnUserQuit(CString& sMessage) override { + virtual EModRet OnUserQuit(CString& sMessage) override { if (m_bRules[RULE_QUIT]) ClearAllBuffers(); + return CONTINUE; } void SetAllRules(bool bVal) { diff --git a/modules/modperl/functions.in b/modules/modperl/functions.in index babfae5a..e3f58298 100644 --- a/modules/modperl/functions.in +++ b/modules/modperl/functions.in @@ -47,7 +47,7 @@ EModRet OnUserJoin(CString& sChannel, CString& sKey) EModRet OnUserPart(CString& sChannel, CString& sMessage) EModRet OnUserTopic(CString& sChannel, CString& sTopic) EModRet OnUserTopicRequest(CString& sChannel) -void OnUserQuit(CString& sMessage) +EModRet OnUserQuit(CString& sMessage) EModRet OnCTCPReply(CNick& Nick, CString& sMessage) EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) EModRet OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage) diff --git a/modules/modperl/module.h b/modules/modperl/module.h index a2c36cee..acab1885 100644 --- a/modules/modperl/module.h +++ b/modules/modperl/module.h @@ -86,7 +86,7 @@ public: virtual EModRet OnUserJoin(CString& sChannel, CString& sKey) override; virtual EModRet OnUserPart(CString& sChannel, CString& sMessage) override; virtual EModRet OnUserTopic(CString& sChannel, CString& sTopic) override; - virtual void OnUserQuit(CString& sMessage) override; + virtual EModRet OnUserQuit(CString& sMessage) override; virtual EModRet OnUserTopicRequest(CString& sChannel) override; virtual EModRet OnCTCPReply(CNick& Nick, CString& sMessage) override; virtual EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) override; diff --git a/modules/modpython/functions.in b/modules/modpython/functions.in index 264dd327..5e324687 100644 --- a/modules/modpython/functions.in +++ b/modules/modpython/functions.in @@ -47,7 +47,7 @@ EModRet OnUserJoin(CString& sChannel, CString& sKey) EModRet OnUserPart(CString& sChannel, CString& sMessage) EModRet OnUserTopic(CString& sChannel, CString& sTopic) EModRet OnUserTopicRequest(CString& sChannel) -void OnUserQuit(CString& sMessage) +EModRet OnUserQuit(CString& sMessage) EModRet OnCTCPReply(CNick& Nick, CString& sMessage) EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) EModRet OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage) diff --git a/modules/modpython/module.h b/modules/modpython/module.h index 0e3c9ce2..56be98f4 100644 --- a/modules/modpython/module.h +++ b/modules/modpython/module.h @@ -103,7 +103,7 @@ public: virtual EModRet OnUserPart(CString& sChannel, CString& sMessage) override; virtual EModRet OnUserTopic(CString& sChannel, CString& sTopic) override; virtual EModRet OnUserTopicRequest(CString& sChannel) override; - virtual void OnUserQuit(CString& sMessage) override; + virtual EModRet OnUserQuit(CString& sMessage) override; virtual EModRet OnCTCPReply(CNick& Nick, CString& sMessage) override; virtual EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) override; virtual EModRet OnChanCTCP(CNick& Nick, CChan& Channel, CString& sMessage) override; diff --git a/src/Client.cpp b/src/Client.cpp index 4c0c2a58..b9377daa 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -199,7 +199,8 @@ void CClient::ReadLine(const CString& sData) { return; } else if (sCommand.Equals("QUIT")) { CString sMsg = sLine.Token(1, true).TrimPrefix_n(); - NETWORKMODULECALL(OnUserQuit(sMsg), m_pUser, m_pNetwork, this, NOTHING); + NETWORKMODULECALL(OnUserQuit(sMsg), m_pUser, m_pNetwork, this, &bReturn); + if (bReturn) return; Close(Csock::CLT_AFTERWRITE); // Treat a client quit as a detach return; // Don't forward this msg. We don't want the client getting us disconnected. } else if (sCommand.Equals("PROTOCTL")) { diff --git a/src/Modules.cpp b/src/Modules.cpp index 30d94f50..55a1a311 100644 --- a/src/Modules.cpp +++ b/src/Modules.cpp @@ -693,7 +693,7 @@ CModule::EModRet CModule::OnUserJoin(CString& sChannel, CString& sKey) { return CModule::EModRet CModule::OnUserPart(CString& sChannel, CString& sMessage) { return CONTINUE; } CModule::EModRet CModule::OnUserTopic(CString& sChannel, CString& sTopic) { return CONTINUE; } CModule::EModRet CModule::OnUserTopicRequest(CString& sChannel) { return CONTINUE; } -void CModule::OnUserQuit(CString& sMessage) {} +CModule::EModRet CModule::OnUserQuit(CString& sMessage) { return CONTINUE; } CModule::EModRet CModule::OnCTCPReply(CNick& Nick, CString& sMessage) { return CONTINUE; } CModule::EModRet CModule::OnPrivCTCP(CNick& Nick, CString& sMessage) { return CONTINUE; } @@ -855,7 +855,7 @@ bool CModules::OnUserJoin(CString& sChannel, CString& sKey) { MODHALTCHK(OnUserJ bool CModules::OnUserPart(CString& sChannel, CString& sMessage) { MODHALTCHK(OnUserPart(sChannel, sMessage)); } bool CModules::OnUserTopic(CString& sChannel, CString& sTopic) { MODHALTCHK(OnUserTopic(sChannel, sTopic)); } bool CModules::OnUserTopicRequest(CString& sChannel) { MODHALTCHK(OnUserTopicRequest(sChannel)); } -bool CModules::OnUserQuit(CString& sMessage) { MODUNLOADCHK(OnUserQuit(sMessage)); return false; } +bool CModules::OnUserQuit(CString& sMessage) { MODHALTCHK(OnUserQuit(sMessage)); } bool CModules::OnQuit(const CNick& Nick, const CString& sMessage, const vector& vChans) { MODUNLOADCHK(OnQuit(Nick, sMessage, vChans)); return false; } bool CModules::OnNick(const CNick& Nick, const CString& sNewNick, const vector& vChans) { MODUNLOADCHK(OnNick(Nick, sNewNick, vChans)); return false; }