mirror of
https://github.com/znc/znc.git
synced 2026-08-07 01:13:25 +02:00
Fix #117
This commit is contained in:
+29
-9
@@ -12,13 +12,16 @@
|
||||
#include <znc/zncconfig.h>
|
||||
#include <znc/version.h>
|
||||
|
||||
#define NOTHING (void)0
|
||||
extern bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER;
|
||||
#define NOTHING &ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER
|
||||
|
||||
#define ALLMODULECALL(macFUNC, macEXITER) \
|
||||
do { \
|
||||
*macEXITER = false; \
|
||||
CModules& GMods = CZNC::Get().GetModules(); \
|
||||
bool bAllExit = false; \
|
||||
if (GMods.macFUNC) { \
|
||||
macEXITER; \
|
||||
bAllExit = true; \
|
||||
} else { \
|
||||
const map<CString, CUser*>& mUsers = \
|
||||
CZNC::Get().GetUserMap(); \
|
||||
@@ -26,7 +29,8 @@
|
||||
for (it = mUsers.begin(); it != mUsers.end(); ++it) { \
|
||||
CModules& UMods = it->second->GetModules(); \
|
||||
if (UMods.macFUNC) { \
|
||||
macEXITER; \
|
||||
bAllExit = true; \
|
||||
break; \
|
||||
} \
|
||||
const vector<CIRCNetwork*>& mNets = \
|
||||
it->second->GetNetworks(); \
|
||||
@@ -34,15 +38,19 @@
|
||||
for (it2 = mNets.begin(); it2 != mNets.end(); ++it2) { \
|
||||
CModules& NMods = (*it2)->GetModules(); \
|
||||
if (NMods.macFUNC) { \
|
||||
macEXITER; \
|
||||
bAllExit = true; \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
if (bAllExit) break; \
|
||||
} \
|
||||
} \
|
||||
*macEXITER = bAllExit; \
|
||||
} while (false)
|
||||
|
||||
#define _GLOBALMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \
|
||||
do { \
|
||||
*macEXITER = false; \
|
||||
CModules& GMods = CZNC::Get().GetModules(); \
|
||||
CUser* pOldGUser = GMods.GetUser(); \
|
||||
CIRCNetwork* pOldGNetwork = GMods.GetNetwork(); \
|
||||
@@ -54,7 +62,7 @@
|
||||
GMods.SetUser(pOldGUser); \
|
||||
GMods.SetNetwork(pOldGNetwork); \
|
||||
GMods.SetClient(pOldGClient); \
|
||||
macEXITER; \
|
||||
*macEXITER = true; \
|
||||
} \
|
||||
GMods.SetUser(pOldGUser); \
|
||||
GMods.SetClient(pOldGClient); \
|
||||
@@ -63,7 +71,13 @@
|
||||
#define _USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \
|
||||
do { \
|
||||
assert(macUSER != NULL); \
|
||||
_GLOBALMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER); \
|
||||
*macEXITER = false; \
|
||||
bool bGlobalExited = false; \
|
||||
_GLOBALMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, &bGlobalExited); \
|
||||
if (bGlobalExited) { \
|
||||
*macEXITER = true; \
|
||||
break; \
|
||||
} \
|
||||
CModules& UMods = macUSER->GetModules(); \
|
||||
CIRCNetwork* pOldUNetwork = UMods.GetNetwork(); \
|
||||
CClient* pOldUClient = UMods.GetClient(); \
|
||||
@@ -72,7 +86,7 @@
|
||||
if (UMods.macFUNC) { \
|
||||
UMods.SetNetwork(pOldUNetwork); \
|
||||
UMods.SetClient(pOldUClient); \
|
||||
macEXITER; \
|
||||
*macEXITER = true; \
|
||||
} \
|
||||
UMods.SetNetwork(pOldUNetwork); \
|
||||
UMods.SetClient(pOldUClient); \
|
||||
@@ -81,14 +95,20 @@
|
||||
#define NETWORKMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER) \
|
||||
do { \
|
||||
assert(macUSER != NULL); \
|
||||
_USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, macEXITER); \
|
||||
*macEXITER = false; \
|
||||
bool bUserExited = false; \
|
||||
_USERMODULECALL(macFUNC, macUSER, macNETWORK, macCLIENT, &bUserExited); \
|
||||
if (bUserExited) { \
|
||||
*macEXITER = true; \
|
||||
break; \
|
||||
} \
|
||||
if (macNETWORK != NULL) { \
|
||||
CModules& NMods = macNETWORK->GetModules(); \
|
||||
CClient* pOldNClient = NMods.GetClient(); \
|
||||
NMods.SetClient(macCLIENT); \
|
||||
if (NMods.macFUNC) { \
|
||||
NMods.SetClient(pOldNClient); \
|
||||
macEXITER; \
|
||||
*macEXITER = true; \
|
||||
} \
|
||||
NMods.SetClient(pOldNClient); \
|
||||
} \
|
||||
|
||||
+5
-3
@@ -545,7 +545,7 @@ void CChan::SendBuffer(CClient* pClient) {
|
||||
CClient * pUseClient = (pClient ? pClient : vClients[uClient]);
|
||||
|
||||
bool bSkipStatusMsg = pUseClient->HasServerTime();
|
||||
NETWORKMODULECALL(OnChanBufferStarting(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, bSkipStatusMsg = true);
|
||||
NETWORKMODULECALL(OnChanBufferStarting(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, &bSkipStatusMsg);
|
||||
|
||||
if (!bSkipStatusMsg) {
|
||||
m_pNetwork->PutUser(":***!znc@znc.in PRIVMSG " + GetName() + " :Buffer Playback...", pUseClient);
|
||||
@@ -554,12 +554,14 @@ void CChan::SendBuffer(CClient* pClient) {
|
||||
unsigned int uSize = m_Buffer.Size();
|
||||
for (unsigned int uIdx = 0; uIdx < uSize; uIdx++) {
|
||||
CString sLine = m_Buffer.GetLine(uIdx, *pUseClient);
|
||||
NETWORKMODULECALL(OnChanBufferPlayLine(*this, *pUseClient, sLine), m_pNetwork->GetUser(), m_pNetwork, NULL, continue);
|
||||
bool bNotShowThisLine = false;
|
||||
NETWORKMODULECALL(OnChanBufferPlayLine(*this, *pUseClient, sLine), m_pNetwork->GetUser(), m_pNetwork, NULL, &bNotShowThisLine);
|
||||
if (bNotShowThisLine) continue;
|
||||
m_pNetwork->PutUser(sLine, pUseClient);
|
||||
}
|
||||
|
||||
bSkipStatusMsg = pUseClient->HasServerTime();
|
||||
NETWORKMODULECALL(OnChanBufferEnding(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, bSkipStatusMsg = true);
|
||||
NETWORKMODULECALL(OnChanBufferEnding(*this, *pUseClient), m_pNetwork->GetUser(), m_pNetwork, NULL, &bSkipStatusMsg);
|
||||
if (!bSkipStatusMsg) {
|
||||
m_pNetwork->PutUser(":***!znc@znc.in PRIVMSG " + GetName() + " :Playback Complete.", pUseClient);
|
||||
}
|
||||
|
||||
+26
-13
@@ -90,11 +90,13 @@ void CClient::ReadLine(const CString& sData) {
|
||||
sLine = sLine.Token(1, true);
|
||||
}
|
||||
|
||||
bool bReturn = false;
|
||||
if (IsAttached()) {
|
||||
NETWORKMODULECALL(OnUserRaw(sLine), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserRaw(sLine), m_pUser, m_pNetwork, this, &bReturn);
|
||||
} else {
|
||||
GLOBALMODULECALL(OnUnknownUserRaw(this, sLine), return);
|
||||
GLOBALMODULECALL(OnUnknownUserRaw(this, sLine), &bReturn);
|
||||
}
|
||||
if (bReturn) return;
|
||||
|
||||
CString sCommand = sLine.Token(0);
|
||||
if (sCommand.Left(1) == ":") {
|
||||
@@ -232,11 +234,13 @@ void CClient::ReadLine(const CString& sData) {
|
||||
sCTCP.LeftChomp();
|
||||
sCTCP.RightChomp();
|
||||
|
||||
NETWORKMODULECALL(OnUserCTCPReply(sTarget, sCTCP), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserCTCPReply(sTarget, sCTCP), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
sMsg = "\001" + sCTCP + "\001";
|
||||
} else {
|
||||
NETWORKMODULECALL(OnUserNotice(sTarget, sMsg), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserNotice(sTarget, sMsg), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
}
|
||||
|
||||
if (!GetIRCSock()) {
|
||||
@@ -293,7 +297,8 @@ void CClient::ReadLine(const CString& sData) {
|
||||
|
||||
if (sCTCP.Token(0).Equals("ACTION")) {
|
||||
CString sMessage = sCTCP.Token(1, true);
|
||||
NETWORKMODULECALL(OnUserAction(sTarget, sMessage), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserAction(sTarget, sMessage), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
sCTCP = "ACTION " + sMessage;
|
||||
|
||||
if (pChan && (!pChan->AutoClearChanBuffer() || !m_pNetwork->IsUserOnline())) {
|
||||
@@ -313,7 +318,8 @@ void CClient::ReadLine(const CString& sData) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
NETWORKMODULECALL(OnUserCTCP(sTarget, sCTCP), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserCTCP(sTarget, sCTCP), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
}
|
||||
|
||||
PutIRC("PRIVMSG " + sTarget + " :\001" + sCTCP + "\001");
|
||||
@@ -331,7 +337,8 @@ void CClient::ReadLine(const CString& sData) {
|
||||
return;
|
||||
}
|
||||
|
||||
NETWORKMODULECALL(OnUserMsg(sTarget, sMsg), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserMsg(sTarget, sMsg), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
if (!GetIRCSock()) {
|
||||
// Some lagmeters do a PRIVMSG to their own nick, ignore those.
|
||||
@@ -398,7 +405,9 @@ void CClient::ReadLine(const CString& sData) {
|
||||
|
||||
for (unsigned int a = 0; a < vChans.size(); a++) {
|
||||
CString sChannel = vChans[a];
|
||||
NETWORKMODULECALL(OnUserJoin(sChannel, sKey), m_pUser, m_pNetwork, this, continue);
|
||||
bool bContinue = false;
|
||||
NETWORKMODULECALL(OnUserJoin(sChannel, sKey), m_pUser, m_pNetwork, this, &bContinue);
|
||||
if (bContinue) continue;
|
||||
|
||||
CChan* pChan = m_pNetwork->FindChan(sChannel);
|
||||
if (pChan) {
|
||||
@@ -430,7 +439,9 @@ void CClient::ReadLine(const CString& sData) {
|
||||
|
||||
for (VCString::const_iterator it = vChans.begin(); it != vChans.end(); ++it) {
|
||||
CString sChan = *it;
|
||||
NETWORKMODULECALL(OnUserPart(sChan, sMessage), m_pUser, m_pNetwork, this, continue);
|
||||
bool bContinue = false;
|
||||
NETWORKMODULECALL(OnUserPart(sChan, sMessage), m_pUser, m_pNetwork, this, &bContinue);
|
||||
if (bContinue) continue;
|
||||
|
||||
CChan* pChan = m_pNetwork->FindChan(sChan);
|
||||
|
||||
@@ -456,10 +467,12 @@ void CClient::ReadLine(const CString& sData) {
|
||||
CString sTopic = sLine.Token(2, true).TrimPrefix_n();
|
||||
|
||||
if (!sTopic.empty()) {
|
||||
NETWORKMODULECALL(OnUserTopic(sChan, sTopic), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserTopic(sChan, sTopic), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
sLine = "TOPIC " + sChan + " :" + sTopic;
|
||||
} else {
|
||||
NETWORKMODULECALL(OnUserTopicRequest(sChan), m_pUser, m_pNetwork, this, return);
|
||||
NETWORKMODULECALL(OnUserTopicRequest(sChan), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
}
|
||||
} else if (sCommand.Equals("MODE")) {
|
||||
CString sTarget = sLine.Token(1);
|
||||
@@ -838,7 +851,7 @@ void CClient::HandleCap(const CString& sLine)
|
||||
bVal = false;
|
||||
|
||||
bool bAccepted = ("multi-prefix" == sCap) || ("userhost-in-names" == sCap) || ("server-time" == sCap);
|
||||
GLOBALMODULECALL(IsClientCapSupported(this, sCap, bVal), bAccepted = true);
|
||||
GLOBALMODULECALL(IsClientCapSupported(this, sCap, bVal), &bAccepted);
|
||||
|
||||
if (!bAccepted) {
|
||||
// Some unsupported capability is requested
|
||||
@@ -880,7 +893,7 @@ void CClient::HandleCap(const CString& sLine)
|
||||
SCString ssRemoved;
|
||||
for (SCString::iterator i = m_ssAcceptedCaps.begin(); i != m_ssAcceptedCaps.end(); ++i) {
|
||||
bool bRemoving = false;
|
||||
GLOBALMODULECALL(IsClientCapSupported(this, *i, false), bRemoving = true);
|
||||
GLOBALMODULECALL(IsClientCapSupported(this, *i, false), &bRemoving);
|
||||
if (bRemoving) {
|
||||
GLOBALMODULECALL(OnClientCapRequest(this, *i, false), NOTHING);
|
||||
ssRemoved.insert(*i);
|
||||
|
||||
@@ -29,7 +29,9 @@ void CClient::UserCommand(CString& sLine) {
|
||||
return;
|
||||
}
|
||||
|
||||
NETWORKMODULECALL(OnStatusCommand(sLine), m_pUser, m_pNetwork, this, return);
|
||||
bool bReturn = false;
|
||||
NETWORKMODULECALL(OnStatusCommand(sLine), m_pUser, m_pNetwork, this, &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
const CString sCommand = sLine.Token(0);
|
||||
|
||||
|
||||
+10
-4
@@ -503,7 +503,9 @@ void CIRCNetwork::ClientConnected(CClient *pClient) {
|
||||
uSize = m_QueryBuffer.Size();
|
||||
for (uIdx = 0; uIdx < uSize; uIdx++) {
|
||||
CString sLine = m_QueryBuffer.GetLine(uIdx, *pClient, msParams);
|
||||
NETWORKMODULECALL(OnPrivBufferPlayLine(*pClient, sLine), m_pUser, this, NULL, continue);
|
||||
bool bContinue = false;
|
||||
NETWORKMODULECALL(OnPrivBufferPlayLine(*pClient, sLine), m_pUser, this, NULL, &bContinue);
|
||||
if (bContinue) continue;
|
||||
pClient->PutClient(sLine);
|
||||
}
|
||||
m_QueryBuffer.Clear();
|
||||
@@ -706,7 +708,9 @@ bool CIRCNetwork::JoinChan(CChan* pChan) {
|
||||
pChan->Disable();
|
||||
} else {
|
||||
pChan->IncJoinTries();
|
||||
NETWORKMODULECALL(OnTimerAutoJoin(*pChan), m_pUser, this, NULL, return false);
|
||||
bool bFailed = false;
|
||||
NETWORKMODULECALL(OnTimerAutoJoin(*pChan), m_pUser, this, NULL, &bFailed);
|
||||
if (bFailed) return false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -948,13 +952,15 @@ bool CIRCNetwork::Connect() {
|
||||
|
||||
DEBUG("Connecting user/network [" << m_pUser->GetUserName() << "/" << m_sName << "]");
|
||||
|
||||
NETWORKMODULECALL(OnIRCConnecting(pIRCSock), m_pUser, this, NULL,
|
||||
bool bAbort = false;
|
||||
NETWORKMODULECALL(OnIRCConnecting(pIRCSock), m_pUser, this, NULL, &bAbort);
|
||||
if (bAbort) {
|
||||
DEBUG("Some module aborted the connection attempt");
|
||||
PutStatus("Some module aborted the connection attempt");
|
||||
delete pIRCSock;
|
||||
CZNC::Get().AddNetworkToQueue(this);
|
||||
return false;
|
||||
);
|
||||
}
|
||||
|
||||
CString sSockName = "IRC::" + m_pUser->GetUserName() + "::" + m_sName;
|
||||
CZNC::Get().GetManager().Connect(pServer->GetName(), pServer->GetPort(), sSockName, 120, bSSL, GetBindHost(), pIRCSock);
|
||||
|
||||
+40
-16
@@ -128,7 +128,9 @@ void CIRCSock::ReadLine(const CString& sData) {
|
||||
|
||||
DEBUG("(" << m_pNetwork->GetUser()->GetUserName() << "/" << m_pNetwork->GetName() << ") IRC -> ZNC [" << sLine << "]");
|
||||
|
||||
IRCSOCKMODULECALL(OnRaw(sLine), return);
|
||||
bool bReturn = false;
|
||||
IRCSOCKMODULECALL(OnRaw(sLine), &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
if (sLine.Equals("PING ", false, 5)) {
|
||||
// Generate a reply and don't forward this to any user,
|
||||
@@ -682,7 +684,8 @@ void CIRCSock::ReadLine(const CString& sData) {
|
||||
CString sTopic = sLine.Token(3, true);
|
||||
sTopic.LeftChomp();
|
||||
|
||||
IRCSOCKMODULECALL(OnTopic(Nick, *pChan, sTopic), return);
|
||||
IRCSOCKMODULECALL(OnTopic(Nick, *pChan, sTopic), &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
pChan->SetTopicOwner(Nick.GetNick());
|
||||
pChan->SetTopicDate((unsigned long) time(NULL));
|
||||
@@ -793,7 +796,8 @@ void CIRCSock::ReadLine(const CString& sData) {
|
||||
// Don't forward any CAP stuff to the client
|
||||
return;
|
||||
} else if (sCmd.Equals("INVITE")) {
|
||||
IRCSOCKMODULECALL(OnInvite(Nick, sLine.Token(3).TrimPrefix_n(":")), return);
|
||||
IRCSOCKMODULECALL(OnInvite(Nick, sLine.Token(3).TrimPrefix_n(":")), &bReturn);
|
||||
if (bReturn) return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -823,21 +827,27 @@ void CIRCSock::ResumeCap() {
|
||||
}
|
||||
|
||||
bool CIRCSock::OnServerCapAvailable(const CString& sCap) {
|
||||
IRCSOCKMODULECALL(OnServerCapAvailable(sCap), return true);
|
||||
return false;
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnServerCapAvailable(sCap), &bResult);
|
||||
return bResult;
|
||||
}
|
||||
|
||||
bool CIRCSock::OnCTCPReply(CNick& Nick, CString& sMessage) {
|
||||
IRCSOCKMODULECALL(OnCTCPReply(Nick, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnCTCPReply(Nick, sMessage), &bResult);
|
||||
|
||||
return false;
|
||||
return bResult;
|
||||
}
|
||||
|
||||
bool CIRCSock::OnPrivCTCP(CNick& Nick, CString& sMessage) {
|
||||
IRCSOCKMODULECALL(OnPrivCTCP(Nick, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnPrivCTCP(Nick, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
if (sMessage.TrimPrefix("ACTION ")) {
|
||||
IRCSOCKMODULECALL(OnPrivAction(Nick, sMessage), return true);
|
||||
bResult = false;
|
||||
IRCSOCKMODULECALL(OnPrivAction(Nick, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
if (!m_pNetwork->IsUserOnline()) {
|
||||
// If the user is detached, add to the buffer
|
||||
@@ -896,7 +906,9 @@ bool CIRCSock::OnGeneralCTCP(CNick& Nick, CString& sMessage) {
|
||||
}
|
||||
|
||||
bool CIRCSock::OnPrivNotice(CNick& Nick, CString& sMessage) {
|
||||
IRCSOCKMODULECALL(OnPrivNotice(Nick, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnPrivNotice(Nick, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
if (!m_pNetwork->IsUserOnline()) {
|
||||
// If the user is detached, add to the buffer
|
||||
@@ -907,7 +919,9 @@ bool CIRCSock::OnPrivNotice(CNick& Nick, CString& sMessage) {
|
||||
}
|
||||
|
||||
bool CIRCSock::OnPrivMsg(CNick& Nick, CString& sMessage) {
|
||||
IRCSOCKMODULECALL(OnPrivMsg(Nick, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnPrivMsg(Nick, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
if (!m_pNetwork->IsUserOnline()) {
|
||||
// If the user is detached, add to the buffer
|
||||
@@ -920,11 +934,15 @@ bool CIRCSock::OnPrivMsg(CNick& Nick, CString& sMessage) {
|
||||
bool CIRCSock::OnChanCTCP(CNick& Nick, const CString& sChan, CString& sMessage) {
|
||||
CChan* pChan = m_pNetwork->FindChan(sChan);
|
||||
if (pChan) {
|
||||
IRCSOCKMODULECALL(OnChanCTCP(Nick, *pChan, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnChanCTCP(Nick, *pChan, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
// Record a /me
|
||||
if (sMessage.TrimPrefix("ACTION ")) {
|
||||
IRCSOCKMODULECALL(OnChanAction(Nick, *pChan, sMessage), return true);
|
||||
bResult = false;
|
||||
IRCSOCKMODULECALL(OnChanAction(Nick, *pChan, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
if (!pChan->AutoClearChanBuffer() || !m_pNetwork->IsUserOnline() || pChan->IsDetached()) {
|
||||
pChan->AddBuffer(":" + _NAMEDFMT(Nick.GetNickMask()) + " PRIVMSG " + _NAMEDFMT(sChan) + " :\001ACTION {text}\001", sMessage);
|
||||
}
|
||||
@@ -941,7 +959,9 @@ bool CIRCSock::OnChanCTCP(CNick& Nick, const CString& sChan, CString& sMessage)
|
||||
bool CIRCSock::OnChanNotice(CNick& Nick, const CString& sChan, CString& sMessage) {
|
||||
CChan* pChan = m_pNetwork->FindChan(sChan);
|
||||
if (pChan) {
|
||||
IRCSOCKMODULECALL(OnChanNotice(Nick, *pChan, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnChanNotice(Nick, *pChan, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
if (!pChan->AutoClearChanBuffer() || !m_pNetwork->IsUserOnline() || pChan->IsDetached()) {
|
||||
pChan->AddBuffer(":" + _NAMEDFMT(Nick.GetNickMask()) + " NOTICE " + _NAMEDFMT(sChan) + " :{text}", sMessage);
|
||||
@@ -954,7 +974,9 @@ bool CIRCSock::OnChanNotice(CNick& Nick, const CString& sChan, CString& sMessage
|
||||
bool CIRCSock::OnChanMsg(CNick& Nick, const CString& sChan, CString& sMessage) {
|
||||
CChan* pChan = m_pNetwork->FindChan(sChan);
|
||||
if (pChan) {
|
||||
IRCSOCKMODULECALL(OnChanMsg(Nick, *pChan, sMessage), return true);
|
||||
bool bResult = false;
|
||||
IRCSOCKMODULECALL(OnChanMsg(Nick, *pChan, sMessage), &bResult);
|
||||
if (bResult) return true;
|
||||
|
||||
if (!pChan->AutoClearChanBuffer() || !m_pNetwork->IsUserOnline() || pChan->IsDetached()) {
|
||||
pChan->AddBuffer(":" + _NAMEDFMT(Nick.GetNickMask()) + " PRIVMSG " + _NAMEDFMT(sChan) + " :{text}", sMessage);
|
||||
@@ -998,7 +1020,9 @@ void CIRCSock::Connected() {
|
||||
CString sIdent = m_pNetwork->GetIdent();
|
||||
CString sRealName = m_pNetwork->GetRealName();
|
||||
|
||||
IRCSOCKMODULECALL(OnIRCRegistration(sPass, sNick, sIdent, sRealName), return);
|
||||
bool bReturn = false;
|
||||
IRCSOCKMODULECALL(OnIRCRegistration(sPass, sNick, sIdent, sRealName), &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
PutIRC("CAP LS");
|
||||
|
||||
|
||||
+9
-3
@@ -868,7 +868,9 @@ bool CModules::LoadModule(const CString& sModule, const CString& sArgs, CModInfo
|
||||
}
|
||||
|
||||
bool bSuccess;
|
||||
_GLOBALMODULECALL(OnModuleLoading(sModule, sArgs, eType, bSuccess, sRetMsg), pUser, pNetwork, NULL, return bSuccess);
|
||||
bool bHandled = false;
|
||||
_GLOBALMODULECALL(OnModuleLoading(sModule, sArgs, eType, bSuccess, sRetMsg), pUser, pNetwork, NULL, &bHandled);
|
||||
if (bHandled) return bSuccess;
|
||||
|
||||
CString sModPath, sDataPath;
|
||||
bool bVersionMismatch;
|
||||
@@ -956,7 +958,9 @@ bool CModules::UnloadModule(const CString& sModule, CString& sRetMsg) {
|
||||
}
|
||||
|
||||
bool bSuccess;
|
||||
_GLOBALMODULECALL(OnModuleUnloading(pModule, bSuccess, sRetMsg), pModule->GetUser(), pModule->GetNetwork(), NULL, return bSuccess);
|
||||
bool bHandled = false;
|
||||
_GLOBALMODULECALL(OnModuleUnloading(pModule, bSuccess, sRetMsg), pModule->GetUser(), pModule->GetNetwork(), NULL, &bHandled);
|
||||
if (bHandled) return bSuccess;
|
||||
|
||||
ModHandle p = pModule->GetDLL();
|
||||
|
||||
@@ -1009,7 +1013,9 @@ bool CModules::GetModInfo(CModInfo& ModInfo, const CString& sModule, CString& sR
|
||||
CString sModPath, sTmp;
|
||||
|
||||
bool bSuccess;
|
||||
GLOBALMODULECALL(OnGetModInfo(ModInfo, sModule, bSuccess, sRetMsg), return bSuccess);
|
||||
bool bHandled = false;
|
||||
GLOBALMODULECALL(OnGetModInfo(ModInfo, sModule, bSuccess, sRetMsg), &bHandled);
|
||||
if (bHandled) return bSuccess;
|
||||
|
||||
if (!FindModPath(sModule, sModPath, sTmp)) {
|
||||
sRetMsg = "Unable to find module [" + sModule + "]";
|
||||
|
||||
@@ -35,6 +35,8 @@ static inline int getopt_long(int argc, char * const argv[], const char *optstri
|
||||
}
|
||||
#endif
|
||||
|
||||
bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER;
|
||||
|
||||
static const struct option g_LongOpts[] = {
|
||||
{ "help", no_argument, 0, 'h' },
|
||||
{ "version", no_argument, 0, 'v' },
|
||||
|
||||
+14
-5
@@ -130,7 +130,9 @@ CString CZNC::GetUptime() const {
|
||||
}
|
||||
|
||||
bool CZNC::OnBoot() {
|
||||
ALLMODULECALL(OnBoot(), return false);
|
||||
bool bFail = false;
|
||||
ALLMODULECALL(OnBoot(), &bFail);
|
||||
if (bFail) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1412,7 +1414,10 @@ void CZNC::Broadcast(const CString& sMessage, bool bAdminOnly,
|
||||
if (a->second != pSkipUser) {
|
||||
CString sMsg = sMessage;
|
||||
|
||||
USERMODULECALL(OnBroadcast(sMsg), a->second, NULL, continue);
|
||||
bool bContinue = false;
|
||||
USERMODULECALL(OnBroadcast(sMsg), a->second, NULL, &bContinue);
|
||||
if (bContinue) continue;
|
||||
|
||||
a->second->PutStatusNotice("*** " + sMsg, NULL, pSkipClient);
|
||||
}
|
||||
}
|
||||
@@ -1552,11 +1557,13 @@ bool CZNC::AddUser(CUser* pUser, CString& sErrorRet) {
|
||||
<< sErrorRet << "]");
|
||||
return false;
|
||||
}
|
||||
GLOBALMODULECALL(OnAddUser(*pUser, sErrorRet),
|
||||
bool bFailed = false;
|
||||
GLOBALMODULECALL(OnAddUser(*pUser, sErrorRet), &bFailed);
|
||||
if (bFailed) {
|
||||
DEBUG("AddUser [" << pUser->GetUserName() << "] aborted by a module ["
|
||||
<< sErrorRet << "]");
|
||||
return false;
|
||||
);
|
||||
}
|
||||
m_msUsers[pUser->GetUserName()] = pUser;
|
||||
return true;
|
||||
}
|
||||
@@ -1825,7 +1832,9 @@ CZNC::TrafficStatsMap CZNC::GetTrafficStats(TrafficStatsPair &Users,
|
||||
|
||||
void CZNC::AuthUser(CSmartPtr<CAuthBase> AuthClass) {
|
||||
// TODO unless the auth module calls it, CUser::IsHostAllowed() is not honoured
|
||||
GLOBALMODULECALL(OnLoginAttempt(AuthClass), return);
|
||||
bool bReturn = false;
|
||||
GLOBALMODULECALL(OnLoginAttempt(AuthClass), &bReturn);
|
||||
if (bReturn) return;
|
||||
|
||||
CUser* pUser = FindUser(AuthClass->GetUsername());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user