mirror of
https://github.com/znc/znc.git
synced 2026-03-28 17:42:41 +01:00
Merge pull request #886 from jpnurmi/for-loops
C++11 range-based for loops
This commit is contained in:
@@ -205,13 +205,12 @@ void CClient::ReadLine(const CString& sData) {
|
||||
return; // Don't forward this msg. We don't want the client getting us disconnected.
|
||||
} else if (sCommand.Equals("PROTOCTL")) {
|
||||
VCString vsTokens;
|
||||
VCString::const_iterator it;
|
||||
sLine.Token(1, true).Split(" ", vsTokens, false);
|
||||
|
||||
for (it = vsTokens.begin(); it != vsTokens.end(); ++it) {
|
||||
if (*it == "NAMESX") {
|
||||
for (const CString& sToken : vsTokens) {
|
||||
if (sToken == "NAMESX") {
|
||||
m_bNamesx = true;
|
||||
} else if (*it == "UHNAMES") {
|
||||
} else if (sToken == "UHNAMES") {
|
||||
m_bUHNames = true;
|
||||
}
|
||||
}
|
||||
@@ -433,12 +432,11 @@ void CClient::ReadLine(const CString& sData) {
|
||||
CString sChans = sLine.Token(1).TrimPrefix_n();
|
||||
CString sKey = sLine.Token(2);
|
||||
|
||||
VCString vChans;
|
||||
sChans.Split(",", vChans, false);
|
||||
VCString vsChans;
|
||||
sChans.Split(",", vsChans, false);
|
||||
sChans.clear();
|
||||
|
||||
for (unsigned int a = 0; a < vChans.size(); a++) {
|
||||
CString sChannel = vChans[a];
|
||||
for (CString& sChannel : vsChans) {
|
||||
bool bContinue = false;
|
||||
NETWORKMODULECALL(OnUserJoin(sChannel, sKey), m_pUser, m_pNetwork, this, &bContinue);
|
||||
if (bContinue) continue;
|
||||
@@ -470,12 +468,11 @@ void CClient::ReadLine(const CString& sData) {
|
||||
CString sChans = sLine.Token(1).TrimPrefix_n();
|
||||
CString sMessage = sLine.Token(2, true).TrimPrefix_n();
|
||||
|
||||
VCString vChans;
|
||||
sChans.Split(",", vChans, false);
|
||||
VCString vsChans;
|
||||
sChans.Split(",", vsChans, false);
|
||||
sChans.clear();
|
||||
|
||||
for (VCString::const_iterator it = vChans.begin(); it != vChans.end(); ++it) {
|
||||
CString sChan = *it;
|
||||
for (CString& sChan : vsChans) {
|
||||
bool bContinue = false;
|
||||
NETWORKMODULECALL(OnUserPart(sChan, sMessage), m_pUser, m_pNetwork, this, &bContinue);
|
||||
if (bContinue) continue;
|
||||
@@ -545,9 +542,9 @@ void CClient::SetNetwork(CIRCNetwork* pNetwork, bool bDisconnect, bool bReconnec
|
||||
|
||||
// Tell the client they are no longer in these channels.
|
||||
const vector<CChan*>& vChans = m_pNetwork->GetChans();
|
||||
for (vector<CChan*>::const_iterator it = vChans.begin(); it != vChans.end(); ++it) {
|
||||
if (!((*it)->IsDetached())) {
|
||||
PutClient(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PART " + (*it)->GetName());
|
||||
for (const CChan* pChan : vChans) {
|
||||
if (!(pChan->IsDetached())) {
|
||||
PutClient(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PART " + pChan->GetName());
|
||||
}
|
||||
}
|
||||
} else if (m_pUser) {
|
||||
@@ -607,11 +604,11 @@ bool CClient::SendMotd() {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (unsigned int a = 0; a < vsMotd.size(); a++) {
|
||||
for (const CString& sLine : vsMotd) {
|
||||
if (m_pNetwork) {
|
||||
PutStatusNotice(m_pNetwork->ExpandString(vsMotd[a]));
|
||||
PutStatusNotice(m_pNetwork->ExpandString(sLine));
|
||||
} else {
|
||||
PutStatusNotice(m_pUser->ExpandString(vsMotd[a]));
|
||||
PutStatusNotice(m_pUser->ExpandString(sLine));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -812,17 +809,16 @@ void CClient::PutModNotice(const CString& sModule, const CString& sLine) {
|
||||
}
|
||||
|
||||
void CClient::PutModule(const CString& sModule, const CString& sLine) {
|
||||
VCString vsLines;
|
||||
VCString::iterator it;
|
||||
if (!m_pUser) {
|
||||
return;
|
||||
}
|
||||
|
||||
DEBUG("(" << GetFullName() << ") ZNC -> CLI [:" + m_pUser->GetStatusPrefix() + ((sModule.empty()) ? "status" : sModule) + "!znc@znc.in PRIVMSG " << GetNick() << " :" << sLine << "]");
|
||||
|
||||
VCString vsLines;
|
||||
sLine.Split("\n", vsLines);
|
||||
for (it = vsLines.begin(); it != vsLines.end(); ++it) {
|
||||
Write(":" + m_pUser->GetStatusPrefix() + ((sModule.empty()) ? "status" : sModule) + "!znc@znc.in PRIVMSG " + GetNick() + " :" + (*it) + "\r\n");
|
||||
for (const CString& s : vsLines) {
|
||||
Write(":" + m_pUser->GetStatusPrefix() + ((sModule.empty()) ? "status" : sModule) + "!znc@znc.in PRIVMSG " + GetNick() + " :" + s + "\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -882,11 +878,13 @@ void CClient::HandleCap(const CString& sLine)
|
||||
if (sSubCmd.Equals("LS")) {
|
||||
SCString ssOfferCaps;
|
||||
GLOBALMODULECALL(OnClientCapLs(this, ssOfferCaps), NOTHING);
|
||||
CString sRes;
|
||||
for (SCString::iterator i = ssOfferCaps.begin(); i != ssOfferCaps.end(); ++i) {
|
||||
sRes += *i + " ";
|
||||
}
|
||||
RespondCap("LS :" + sRes + "userhost-in-names multi-prefix znc.in/server-time-iso znc.in/batch znc.in/self-message");
|
||||
ssOfferCaps.insert("userhost-in-names");
|
||||
ssOfferCaps.insert("multi-prefix");
|
||||
ssOfferCaps.insert("znc.in/server-time-iso");
|
||||
ssOfferCaps.insert("znc.in/batch");
|
||||
ssOfferCaps.insert("znc.in/self-message");
|
||||
CString sRes = CString(" ").Join(ssOfferCaps.begin(), ssOfferCaps.end());
|
||||
RespondCap("LS :" + sRes);
|
||||
m_bInCap = true;
|
||||
} else if (sSubCmd.Equals("END")) {
|
||||
m_bInCap = false;
|
||||
@@ -899,12 +897,11 @@ void CClient::HandleCap(const CString& sLine)
|
||||
}
|
||||
} else if (sSubCmd.Equals("REQ")) {
|
||||
VCString vsTokens;
|
||||
VCString::iterator it;
|
||||
sLine.Token(2, true).TrimPrefix_n(":").Split(" ", vsTokens, false);
|
||||
|
||||
for (it = vsTokens.begin(); it != vsTokens.end(); ++it) {
|
||||
for (const CString& sToken : vsTokens) {
|
||||
bool bVal = true;
|
||||
CString sCap = *it;
|
||||
CString sCap = sToken;
|
||||
if (sCap.TrimPrefix("-"))
|
||||
bVal = false;
|
||||
|
||||
@@ -919,46 +916,44 @@ void CClient::HandleCap(const CString& sLine)
|
||||
}
|
||||
|
||||
// All is fine, we support what was requested
|
||||
for (it = vsTokens.begin(); it != vsTokens.end(); ++it) {
|
||||
for (const CString& sToken : vsTokens) {
|
||||
bool bVal = true;
|
||||
if (it->TrimPrefix("-"))
|
||||
CString sCap = sToken;
|
||||
if (sCap.TrimPrefix("-"))
|
||||
bVal = false;
|
||||
|
||||
if ("multi-prefix" == *it) {
|
||||
if ("multi-prefix" == sCap) {
|
||||
m_bNamesx = bVal;
|
||||
} else if ("userhost-in-names" == *it) {
|
||||
} else if ("userhost-in-names" == sCap) {
|
||||
m_bUHNames = bVal;
|
||||
} else if ("znc.in/server-time-iso" == *it) {
|
||||
} else if ("znc.in/server-time-iso" == sCap) {
|
||||
m_bServerTime = bVal;
|
||||
} else if ("znc.in/batch" == *it) {
|
||||
} else if ("znc.in/batch" == sCap) {
|
||||
m_bBatch = bVal;
|
||||
} else if ("znc.in/self-message" == *it) {
|
||||
} else if ("znc.in/self-message" == sCap) {
|
||||
m_bSelfMessage = bVal;
|
||||
}
|
||||
GLOBALMODULECALL(OnClientCapRequest(this, *it, bVal), NOTHING);
|
||||
GLOBALMODULECALL(OnClientCapRequest(this, sCap, bVal), NOTHING);
|
||||
|
||||
if (bVal) {
|
||||
m_ssAcceptedCaps.insert(*it);
|
||||
m_ssAcceptedCaps.insert(sCap);
|
||||
} else {
|
||||
m_ssAcceptedCaps.erase(*it);
|
||||
m_ssAcceptedCaps.erase(sCap);
|
||||
}
|
||||
}
|
||||
|
||||
RespondCap("ACK :" + sLine.Token(2, true).TrimPrefix_n(":"));
|
||||
} else if (sSubCmd.Equals("LIST")) {
|
||||
CString sList = "";
|
||||
for (SCString::iterator i = m_ssAcceptedCaps.begin(); i != m_ssAcceptedCaps.end(); ++i) {
|
||||
sList += *i + " ";
|
||||
}
|
||||
RespondCap("LIST :" + sList.TrimSuffix_n(" "));
|
||||
CString sList = CString(" ").Join(m_ssAcceptedCaps.begin(), m_ssAcceptedCaps.end());
|
||||
RespondCap("LIST :" + sList);
|
||||
} else if (sSubCmd.Equals("CLEAR")) {
|
||||
SCString ssRemoved;
|
||||
for (SCString::iterator i = m_ssAcceptedCaps.begin(); i != m_ssAcceptedCaps.end(); ++i) {
|
||||
for (const CString& sCap : m_ssAcceptedCaps) {
|
||||
bool bRemoving = false;
|
||||
GLOBALMODULECALL(IsClientCapSupported(this, *i, false), &bRemoving);
|
||||
GLOBALMODULECALL(IsClientCapSupported(this, sCap, false), &bRemoving);
|
||||
if (bRemoving) {
|
||||
GLOBALMODULECALL(OnClientCapRequest(this, *i, false), NOTHING);
|
||||
ssRemoved.insert(*i);
|
||||
GLOBALMODULECALL(OnClientCapRequest(this, sCap, false), NOTHING);
|
||||
ssRemoved.insert(sCap);
|
||||
}
|
||||
}
|
||||
if (m_bNamesx) {
|
||||
@@ -982,9 +977,9 @@ void CClient::HandleCap(const CString& sLine)
|
||||
ssRemoved.insert("znc.in/self-message");
|
||||
}
|
||||
CString sList = "";
|
||||
for (SCString::iterator i = ssRemoved.begin(); i != ssRemoved.end(); ++i) {
|
||||
m_ssAcceptedCaps.erase(*i);
|
||||
sList += "-" + *i + " ";
|
||||
for (const CString& sCap : ssRemoved) {
|
||||
m_ssAcceptedCaps.erase(sCap);
|
||||
sList += "-" + sCap + " ";
|
||||
}
|
||||
RespondCap("ACK :" + sList.TrimSuffix_n(" "));
|
||||
} else {
|
||||
|
||||
107
src/Modules.cpp
107
src/Modules.cpp
@@ -35,9 +35,8 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER;
|
||||
#endif
|
||||
|
||||
#define MODUNLOADCHK(func) \
|
||||
for (unsigned int a = 0; a < size(); a++) { \
|
||||
for (CModule* pMod : *this) { \
|
||||
try { \
|
||||
CModule* pMod = (CModule *) (*this)[a]; \
|
||||
CClient* pOldClient = pMod->GetClient(); \
|
||||
pMod->SetClient(m_pClient); \
|
||||
CUser* pOldUser = NULL; \
|
||||
@@ -58,7 +57,7 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER;
|
||||
pMod->SetClient(pOldClient); \
|
||||
} catch (const CModule::EModException& e) { \
|
||||
if (e == CModule::UNLOAD) { \
|
||||
UnloadModule((*this)[a]->GetModName()); \
|
||||
UnloadModule(pMod->GetModName()); \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
@@ -66,9 +65,8 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER;
|
||||
|
||||
#define MODHALTCHK(func) \
|
||||
bool bHaltCore = false; \
|
||||
for (unsigned int a = 0; a < size(); a++) { \
|
||||
for (CModule* pMod : *this) { \
|
||||
try { \
|
||||
CModule* pMod = (CModule*) (*this)[a]; \
|
||||
CModule::EModRet e = CModule::CONTINUE; \
|
||||
CClient* pOldClient = pMod->GetClient(); \
|
||||
pMod->SetClient(m_pClient); \
|
||||
@@ -98,7 +96,7 @@ bool ZNC_NO_NEED_TO_DO_ANYTHING_ON_MODULE_CALL_EXITER;
|
||||
} \
|
||||
} catch (const CModule::EModException& e) { \
|
||||
if (e == CModule::UNLOAD) { \
|
||||
UnloadModule((*this)[a]->GetModName()); \
|
||||
UnloadModule(pMod->GetModName()); \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
@@ -317,15 +315,7 @@ bool CModule::RemTimer(const CString& sLabel) {
|
||||
}
|
||||
|
||||
bool CModule::UnlinkTimer(CTimer* pTimer) {
|
||||
set<CTimer*>::iterator it;
|
||||
for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) {
|
||||
if (pTimer == *it) {
|
||||
m_sTimers.erase(it);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return m_sTimers.erase(pTimer);
|
||||
}
|
||||
|
||||
CTimer* CModule::FindTimer(const CString& sLabel) {
|
||||
@@ -333,9 +323,7 @@ CTimer* CModule::FindTimer(const CString& sLabel) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
set<CTimer*>::iterator it;
|
||||
for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) {
|
||||
CTimer* pTimer = *it;
|
||||
for (CTimer* pTimer : m_sTimers) {
|
||||
if (pTimer->GetName().Equals(sLabel)) {
|
||||
return pTimer;
|
||||
}
|
||||
@@ -356,9 +344,7 @@ void CModule::ListTimers() {
|
||||
Table.AddColumn("Cycles");
|
||||
Table.AddColumn("Description");
|
||||
|
||||
set<CTimer*>::iterator it;
|
||||
for (it = m_sTimers.begin(); it != m_sTimers.end(); ++it) {
|
||||
CTimer* pTimer = *it;
|
||||
for (const CTimer* pTimer : m_sTimers) {
|
||||
unsigned int uCycles = pTimer->GetCyclesLeft();
|
||||
timeval Interval = pTimer->GetInterval();
|
||||
|
||||
@@ -382,25 +368,18 @@ bool CModule::AddSocket(CSocket* pSocket) {
|
||||
}
|
||||
|
||||
bool CModule::RemSocket(CSocket* pSocket) {
|
||||
set<CSocket*>::iterator it;
|
||||
for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) {
|
||||
if (*it == pSocket) {
|
||||
m_sSockets.erase(it);
|
||||
m_pManager->DelSockByAddr(pSocket);
|
||||
return true;
|
||||
}
|
||||
if (m_sSockets.erase(pSocket)) {
|
||||
m_pManager->DelSockByAddr(pSocket);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CModule::RemSocket(const CString& sSockName) {
|
||||
set<CSocket*>::iterator it;
|
||||
for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) {
|
||||
CSocket* pSocket = *it;
|
||||
|
||||
for (CSocket* pSocket : m_sSockets) {
|
||||
if (pSocket->GetSockName().Equals(sSockName)) {
|
||||
m_sSockets.erase(it);
|
||||
m_sSockets.erase(pSocket);
|
||||
m_pManager->DelSockByAddr(pSocket);
|
||||
return true;
|
||||
}
|
||||
@@ -410,21 +389,11 @@ bool CModule::RemSocket(const CString& sSockName) {
|
||||
}
|
||||
|
||||
bool CModule::UnlinkSocket(CSocket* pSocket) {
|
||||
set<CSocket*>::iterator it;
|
||||
for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) {
|
||||
if (pSocket == *it) {
|
||||
m_sSockets.erase(it);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return m_sSockets.erase(pSocket);
|
||||
}
|
||||
|
||||
CSocket* CModule::FindSocket(const CString& sSockName) {
|
||||
set<CSocket*>::iterator it;
|
||||
for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) {
|
||||
CSocket* pSocket = *it;
|
||||
for (CSocket* pSocket : m_sSockets) {
|
||||
if (pSocket->GetSockName().Equals(sSockName)) {
|
||||
return pSocket;
|
||||
}
|
||||
@@ -447,10 +416,7 @@ void CModule::ListSockets() {
|
||||
Table.AddColumn("RemoteIP");
|
||||
Table.AddColumn("RemotePort");
|
||||
|
||||
set<CSocket*>::iterator it;
|
||||
for (it = m_sSockets.begin(); it != m_sSockets.end(); ++it) {
|
||||
CSocket* pSocket = *it;
|
||||
|
||||
for (const CSocket* pSocket : m_sSockets) {
|
||||
Table.AddRow();
|
||||
Table.SetCell("Name", pSocket->GetSockName());
|
||||
|
||||
@@ -491,10 +457,9 @@ void CModule::CancelJob(CModuleJob *pJob)
|
||||
|
||||
bool CModule::CancelJob(const CString& sJobName)
|
||||
{
|
||||
set<CModuleJob*>::iterator it;
|
||||
for (it = m_sJobs.begin(); it != m_sJobs.end(); ++it) {
|
||||
if ((*it)->GetName().Equals(sJobName)) {
|
||||
CancelJob(*it);
|
||||
for (CModuleJob* pJob : m_sJobs) {
|
||||
if (pJob->GetName().Equals(sJobName)) {
|
||||
CancelJob(pJob);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -551,11 +516,10 @@ bool CModule::RemCommand(const CString& sCmd)
|
||||
|
||||
const CModCommand* CModule::FindCommand(const CString& sCmd) const
|
||||
{
|
||||
map<CString, CModCommand>::const_iterator it;
|
||||
for (it = m_mCommands.begin(); it != m_mCommands.end(); ++it) {
|
||||
if (!it->first.Equals(sCmd))
|
||||
for (const auto& it : m_mCommands) {
|
||||
if (!it.first.Equals(sCmd))
|
||||
continue;
|
||||
return &it->second;
|
||||
return &it.second;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -577,13 +541,12 @@ bool CModule::HandleCommand(const CString& sLine) {
|
||||
void CModule::HandleHelpCommand(const CString& sLine) {
|
||||
CString sFilter = sLine.Token(1).AsLower();
|
||||
CTable Table;
|
||||
map<CString, CModCommand>::const_iterator it;
|
||||
|
||||
CModCommand::InitHelp(Table);
|
||||
for (it = m_mCommands.begin(); it != m_mCommands.end(); ++it) {
|
||||
CString sCmd = it->second.GetCommand().AsLower();
|
||||
for (const auto& it : m_mCommands) {
|
||||
CString sCmd = it.second.GetCommand().AsLower();
|
||||
if (sFilter.empty() || (sCmd.StartsWith(sFilter, CString::CaseSensitive)) || sCmd.WildCmp(sFilter)) {
|
||||
it->second.AddHelp(Table);
|
||||
it.second.AddHelp(Table);
|
||||
}
|
||||
}
|
||||
if (Table.empty()) {
|
||||
@@ -803,14 +766,14 @@ void CModules::UnloadAll() {
|
||||
}
|
||||
|
||||
bool CModules::OnBoot() {
|
||||
for (unsigned int a = 0; a < size(); a++) {
|
||||
for (CModule* pMod : *this) {
|
||||
try {
|
||||
if (!(*this)[a]->OnBoot()) {
|
||||
if (!pMod->OnBoot()) {
|
||||
return true;
|
||||
}
|
||||
} catch (const CModule::EModException& e) {
|
||||
if (e == CModule::UNLOAD) {
|
||||
UnloadModule((*this)[a]->GetModName());
|
||||
UnloadModule(pMod->GetModName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -893,9 +856,8 @@ bool CModules::OnModCTCP(const CString& sMessage) { MODUNLOADCHK(OnModCTCP(sMess
|
||||
// Why MODHALTCHK works only with functions returning EModRet ? :(
|
||||
bool CModules::OnServerCapAvailable(const CString& sCap) {
|
||||
bool bResult = false;
|
||||
for (unsigned int a = 0; a < size(); ++a) {
|
||||
for (CModule* pMod : *this) {
|
||||
try {
|
||||
CModule* pMod = (*this)[a];
|
||||
CClient* pOldClient = pMod->GetClient();
|
||||
pMod->SetClient(m_pClient);
|
||||
if (m_pUser) {
|
||||
@@ -910,7 +872,7 @@ bool CModules::OnServerCapAvailable(const CString& sCap) {
|
||||
pMod->SetClient(pOldClient);
|
||||
} catch (const CModule::EModException& e) {
|
||||
if (CModule::UNLOAD == e) {
|
||||
UnloadModule((*this)[a]->GetModName());
|
||||
UnloadModule(pMod->GetModName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -956,9 +918,8 @@ bool CModules::OnClientCapLs(CClient* pClient, SCString& ssCaps) {
|
||||
// Maybe create new macro for this?
|
||||
bool CModules::IsClientCapSupported(CClient* pClient, const CString& sCap, bool bState) {
|
||||
bool bResult = false;
|
||||
for (unsigned int a = 0; a < size(); ++a) {
|
||||
for (CModule* pMod : *this) {
|
||||
try {
|
||||
CModule* pMod = (CModule*) (*this)[a];
|
||||
CClient* pOldClient = pMod->GetClient();
|
||||
pMod->SetClient(m_pClient);
|
||||
if (m_pUser) {
|
||||
@@ -973,7 +934,7 @@ bool CModules::IsClientCapSupported(CClient* pClient, const CString& sCap, bool
|
||||
pMod->SetClient(pOldClient);
|
||||
} catch (const CModule::EModException& e) {
|
||||
if (CModule::UNLOAD == e) {
|
||||
UnloadModule((*this)[a]->GetModName());
|
||||
UnloadModule(pMod->GetModName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1006,9 +967,9 @@ bool CModules::OnGetAvailableMods(set<CModInfo>& ssMods, CModInfo::EModuleType e
|
||||
|
||||
|
||||
CModule* CModules::FindModule(const CString& sModule) const {
|
||||
for (unsigned int a = 0; a < size(); a++) {
|
||||
if (sModule.Equals((*this)[a]->GetModName())) {
|
||||
return (*this)[a];
|
||||
for (CModule* pMod : *this) {
|
||||
if (sModule.Equals(pMod->GetModName())) {
|
||||
return pMod;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
198
src/User.cpp
198
src/User.cpp
@@ -39,9 +39,8 @@ private:
|
||||
protected:
|
||||
virtual void RunJob() {
|
||||
const vector<CClient*>& vUserClients = m_pUser->GetUserClients();
|
||||
for (size_t c = 0; c < vUserClients.size(); ++c) {
|
||||
CClient* pUserClient = vUserClients[c];
|
||||
|
||||
for (CClient* pUserClient : vUserClients) {
|
||||
if (pUserClient->GetTimeSinceLastDataTransaction() >= CIRCNetwork::PING_FREQUENCY) {
|
||||
pUserClient->PutClient("PING :ZNC");
|
||||
}
|
||||
@@ -130,14 +129,12 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) {
|
||||
{ "skin", &CUser::SetSkinName },
|
||||
{ "clientencoding", &CUser::SetClientEncoding },
|
||||
};
|
||||
size_t numStringOptions = sizeof(StringOptions) / sizeof(StringOptions[0]);
|
||||
TOption<unsigned int> UIntOptions[] = {
|
||||
{ "jointries", &CUser::SetJoinTries },
|
||||
{ "maxnetworks", &CUser::SetMaxNetworks },
|
||||
{ "maxquerybuffers", &CUser::SetMaxQueryBuffers },
|
||||
{ "maxjoins", &CUser::SetMaxJoins },
|
||||
};
|
||||
size_t numUIntOptions = sizeof(UIntOptions) / sizeof(UIntOptions[0]);
|
||||
TOption<bool> BoolOptions[] = {
|
||||
{ "keepbuffer", &CUser::SetKeepBuffer }, // XXX compatibility crap from pre-0.207
|
||||
{ "autoclearchanbuffer", &CUser::SetAutoClearChanBuffer },
|
||||
@@ -150,34 +147,31 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) {
|
||||
{ "appendtimestamp", &CUser::SetTimestampAppend },
|
||||
{ "prependtimestamp", &CUser::SetTimestampPrepend },
|
||||
};
|
||||
size_t numBoolOptions = sizeof(BoolOptions) / sizeof(BoolOptions[0]);
|
||||
|
||||
for (size_t i = 0; i < numStringOptions; i++) {
|
||||
for (const auto& Option : StringOptions) {
|
||||
CString sValue;
|
||||
if (pConfig->FindStringEntry(StringOptions[i].name, sValue))
|
||||
(this->*StringOptions[i].pSetter)(sValue);
|
||||
if (pConfig->FindStringEntry(Option.name, sValue))
|
||||
(this->*Option.pSetter)(sValue);
|
||||
}
|
||||
for (size_t i = 0; i < numUIntOptions; i++) {
|
||||
for (const auto& Option : UIntOptions) {
|
||||
CString sValue;
|
||||
if (pConfig->FindStringEntry(UIntOptions[i].name, sValue))
|
||||
(this->*UIntOptions[i].pSetter)(sValue.ToUInt());
|
||||
if (pConfig->FindStringEntry(Option.name, sValue))
|
||||
(this->*Option.pSetter)(sValue.ToUInt());
|
||||
}
|
||||
for (size_t i = 0; i < numBoolOptions; i++) {
|
||||
for (const auto& Option : BoolOptions) {
|
||||
CString sValue;
|
||||
if (pConfig->FindStringEntry(BoolOptions[i].name, sValue))
|
||||
(this->*BoolOptions[i].pSetter)(sValue.ToBool());
|
||||
if (pConfig->FindStringEntry(Option.name, sValue))
|
||||
(this->*Option.pSetter)(sValue.ToBool());
|
||||
}
|
||||
|
||||
VCString vsList;
|
||||
VCString::const_iterator vit;
|
||||
pConfig->FindStringVector("allow", vsList);
|
||||
for (vit = vsList.begin(); vit != vsList.end(); ++vit) {
|
||||
AddAllowedHost(*vit);
|
||||
for (const CString& sHost : vsList) {
|
||||
AddAllowedHost(sHost);
|
||||
}
|
||||
pConfig->FindStringVector("ctcpreply", vsList);
|
||||
for (vit = vsList.begin(); vit != vsList.end(); ++vit) {
|
||||
const CString& sValue = *vit;
|
||||
AddCTCPReply(sValue.Token(0), sValue.Token(1, true));
|
||||
for (const CString& sReply : vsList) {
|
||||
AddCTCPReply(sReply.Token(0), sReply.Token(1, true));
|
||||
}
|
||||
|
||||
CString sValue;
|
||||
@@ -355,9 +349,8 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) {
|
||||
}
|
||||
|
||||
pConfig->FindStringVector("loadmodule", vsList);
|
||||
for (vit = vsList.begin(); vit != vsList.end(); ++vit) {
|
||||
sValue = *vit;
|
||||
CString sModName = sValue.Token(0);
|
||||
for (const CString& sMod : vsList) {
|
||||
CString sModName = sMod.Token(0);
|
||||
CString sNotice = "Loading user module [" + sModName + "]";
|
||||
|
||||
// XXX Legacy crap, added in ZNC 0.089
|
||||
@@ -394,26 +387,26 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) {
|
||||
if (sModName == "charset") {
|
||||
CUtils::PrintAction("NOTICE: Charset support was moved to core, importing old charset module settings");
|
||||
size_t uIndex = 1;
|
||||
if (sValue.Token(uIndex).Equals("-force")) {
|
||||
if (sMod.Token(uIndex).Equals("-force")) {
|
||||
uIndex++;
|
||||
}
|
||||
VCString vsClient, vsServer;
|
||||
sValue.Token(uIndex).Split(",", vsClient);
|
||||
sValue.Token(uIndex + 1).Split(",", vsServer);
|
||||
sMod.Token(uIndex).Split(",", vsClient);
|
||||
sMod.Token(uIndex + 1).Split(",", vsServer);
|
||||
if (vsClient.empty() || vsServer.empty()) {
|
||||
CUtils::PrintStatus(false, "charset module was loaded with wrong parameters.");
|
||||
continue;
|
||||
}
|
||||
SetClientEncoding(vsClient[0]);
|
||||
for (vector<CIRCNetwork*>::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
(*it)->SetEncoding(vsServer[0]);
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
pNetwork->SetEncoding(vsServer[0]);
|
||||
}
|
||||
CUtils::PrintStatus(true, "Using [" + vsClient[0] + "] for clients, and [" + vsServer[0] + "] for servers");
|
||||
continue;
|
||||
}
|
||||
|
||||
CString sModRet;
|
||||
CString sArgs = sValue.Token(1, true);
|
||||
CString sArgs = sMod.Token(1, true);
|
||||
|
||||
bool bModRet = LoadModule(sModName, sArgs, sNotice, sModRet);
|
||||
|
||||
@@ -438,8 +431,8 @@ bool CUser::ParseConfig(CConfig* pConfig, CString& sError) {
|
||||
|
||||
// Move ircconnectenabled to the networks
|
||||
if (pConfig->FindStringEntry("ircconnectenabled", sValue)) {
|
||||
for (vector<CIRCNetwork*>::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
(*it)->SetIRCConnectEnabled(sValue.ToBool());
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
pNetwork->SetIRCConnectEnabled(sValue.ToBool());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,11 +472,9 @@ bool CUser::AddNetwork(CIRCNetwork *pNetwork) {
|
||||
}
|
||||
|
||||
void CUser::RemoveNetwork(CIRCNetwork *pNetwork) {
|
||||
for (vector<CIRCNetwork*>::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
if (pNetwork == *it) {
|
||||
m_vIRCNetworks.erase(it);
|
||||
return;
|
||||
}
|
||||
auto it = std::find(m_vIRCNetworks.begin(), m_vIRCNetworks.end(), pNetwork);
|
||||
if (it != m_vIRCNetworks.end()) {
|
||||
m_vIRCNetworks.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -503,8 +494,7 @@ bool CUser::DeleteNetwork(const CString& sNetwork) {
|
||||
}
|
||||
|
||||
CIRCNetwork* CUser::FindNetwork(const CString& sNetwork) const {
|
||||
for (vector<CIRCNetwork*>::const_iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
CIRCNetwork *pNetwork = *it;
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
if (pNetwork->GetName().Equals(sNetwork)) {
|
||||
return pNetwork;
|
||||
}
|
||||
@@ -591,8 +581,8 @@ CString CUser::AddTimestamp(time_t tm, const CString& sStr) const {
|
||||
}
|
||||
|
||||
void CUser::BounceAllClients() {
|
||||
for (unsigned int a = 0; a < m_vClients.size(); a++) {
|
||||
m_vClients[a]->BouncedOff();
|
||||
for (CClient* pClient : m_vClients) {
|
||||
pClient->BouncedOff();
|
||||
}
|
||||
|
||||
m_vClients.clear();
|
||||
@@ -609,40 +599,38 @@ void CUser::UserConnected(CClient* pClient) {
|
||||
}
|
||||
|
||||
void CUser::UserDisconnected(CClient* pClient) {
|
||||
for (unsigned int a = 0; a < m_vClients.size(); a++) {
|
||||
if (m_vClients[a] == pClient) {
|
||||
m_vClients.erase(m_vClients.begin() + a);
|
||||
break;
|
||||
}
|
||||
auto it = std::find(m_vClients.begin(), m_vClients.end(), pClient);
|
||||
if (it != m_vClients.end()) {
|
||||
m_vClients.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
void CUser::CloneNetworks(const CUser& User) {
|
||||
const vector<CIRCNetwork*>& vNetworks = User.GetNetworks();
|
||||
for (vector<CIRCNetwork*>::const_iterator it = vNetworks.begin(); it != vNetworks.end(); ++it) {
|
||||
CIRCNetwork *pNetwork = FindNetwork((*it)->GetName());
|
||||
for (CIRCNetwork* pUserNetwork : vNetworks) {
|
||||
CIRCNetwork *pNetwork = FindNetwork(pUserNetwork->GetName());
|
||||
|
||||
if (pNetwork) {
|
||||
pNetwork->Clone(*(*it));
|
||||
pNetwork->Clone(*pUserNetwork);
|
||||
} else {
|
||||
new CIRCNetwork(this, *(*it));
|
||||
new CIRCNetwork(this, *pUserNetwork);
|
||||
}
|
||||
}
|
||||
|
||||
set<CString> ssDeleteNetworks;
|
||||
for (vector<CIRCNetwork*>::const_iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
if (!(User.FindNetwork((*it)->GetName()))) {
|
||||
ssDeleteNetworks.insert((*it)->GetName());
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
if (!(User.FindNetwork(pNetwork->GetName()))) {
|
||||
ssDeleteNetworks.insert(pNetwork->GetName());
|
||||
}
|
||||
}
|
||||
|
||||
for (set<CString>::const_iterator it = ssDeleteNetworks.begin(); it != ssDeleteNetworks.end(); ++it) {
|
||||
for (const CString& sNetwork : ssDeleteNetworks) {
|
||||
// The following will move all the clients to the user.
|
||||
// So the clients are not disconnected. The client could
|
||||
// have requested the rehash. Then when we do
|
||||
// client->PutStatus("Rehashing succeeded!") we would
|
||||
// crash if there was no client anymore.
|
||||
const vector<CClient*>& vClients = FindNetwork(*it)->GetClients();
|
||||
const vector<CClient*>& vClients = FindNetwork(sNetwork)->GetClients();
|
||||
|
||||
while (vClients.begin() != vClients.end()) {
|
||||
CClient *pClient = vClients.front();
|
||||
@@ -651,12 +639,11 @@ void CUser::CloneNetworks(const CUser& User) {
|
||||
pClient->SetNetwork(NULL);
|
||||
}
|
||||
|
||||
DeleteNetwork(*it);
|
||||
DeleteNetwork(sNetwork);
|
||||
}
|
||||
}
|
||||
|
||||
bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) {
|
||||
unsigned int a = 0;
|
||||
sErrorRet.clear();
|
||||
|
||||
if (!User.IsValid(sErrorRet, true)) {
|
||||
@@ -694,13 +681,11 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) {
|
||||
// Allowed Hosts
|
||||
m_ssAllowedHosts.clear();
|
||||
const set<CString>& ssHosts = User.GetAllowedHosts();
|
||||
for (set<CString>::const_iterator it = ssHosts.begin(); it != ssHosts.end(); ++it) {
|
||||
AddAllowedHost(*it);
|
||||
for (const CString& sHost : ssHosts) {
|
||||
AddAllowedHost(sHost);
|
||||
}
|
||||
|
||||
for (a = 0; a < m_vClients.size(); a++) {
|
||||
CClient* pSock = m_vClients[a];
|
||||
|
||||
for (CClient* pSock : m_vClients) {
|
||||
if (!IsHostAllowed(pSock->GetRemoteIP())) {
|
||||
pSock->PutStatusNotice("You are being disconnected because your IP is no longer allowed to connect to this user");
|
||||
pSock->Close();
|
||||
@@ -718,8 +703,8 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) {
|
||||
// CTCP Replies
|
||||
m_mssCTCPReplies.clear();
|
||||
const MCString& msReplies = User.GetCTCPReplies();
|
||||
for (MCString::const_iterator it = msReplies.begin(); it != msReplies.end(); ++it) {
|
||||
AddCTCPReply(it->first, it->second);
|
||||
for (const auto& it : msReplies) {
|
||||
AddCTCPReply(it.first, it.second);
|
||||
}
|
||||
// !CTCP Replies
|
||||
|
||||
@@ -741,9 +726,8 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) {
|
||||
CModules& vCurMods = GetModules();
|
||||
const CModules& vNewMods = User.GetModules();
|
||||
|
||||
for (a = 0; a < vNewMods.size(); a++) {
|
||||
for (CModule* pNewMod : vNewMods) {
|
||||
CString sModRet;
|
||||
CModule* pNewMod = vNewMods[a];
|
||||
CModule* pCurMod = vCurMods.FindModule(pNewMod->GetModName());
|
||||
|
||||
if (!pCurMod) {
|
||||
@@ -753,8 +737,7 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) {
|
||||
}
|
||||
}
|
||||
|
||||
for (a = 0; a < vCurMods.size(); a++) {
|
||||
CModule* pCurMod = vCurMods[a];
|
||||
for (CModule* pCurMod : vCurMods) {
|
||||
CModule* pNewMod = vNewMods.FindModule(pCurMod->GetModName());
|
||||
|
||||
if (!pNewMod) {
|
||||
@@ -762,8 +745,8 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet, bool bCloneNetworks) {
|
||||
}
|
||||
}
|
||||
|
||||
for (set<CString>::iterator it = ssUnloadMods.begin(); it != ssUnloadMods.end(); ++it) {
|
||||
vCurMods.UnloadModule(*it);
|
||||
for (const CString& sMod : ssUnloadMods) {
|
||||
vCurMods.UnloadModule(sMod);
|
||||
}
|
||||
// !Modules
|
||||
|
||||
@@ -785,8 +768,8 @@ bool CUser::IsHostAllowed(const CString& sHostMask) const {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (set<CString>::const_iterator a = m_ssAllowedHosts.begin(); a != m_ssAllowedHosts.end(); ++a) {
|
||||
if (sHostMask.WildCmp(*a)) {
|
||||
for (const CString& sHost : m_ssAllowedHosts) {
|
||||
if (sHostMask.WildCmp(sHost)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -893,15 +876,15 @@ CConfig CUser::ToConfig() const {
|
||||
|
||||
// Allow Hosts
|
||||
if (!m_ssAllowedHosts.empty()) {
|
||||
for (set<CString>::iterator it = m_ssAllowedHosts.begin(); it != m_ssAllowedHosts.end(); ++it) {
|
||||
config.AddKeyValuePair("Allow", *it);
|
||||
for (const CString& sHost : m_ssAllowedHosts) {
|
||||
config.AddKeyValuePair("Allow", sHost);
|
||||
}
|
||||
}
|
||||
|
||||
// CTCP Replies
|
||||
if (!m_mssCTCPReplies.empty()) {
|
||||
for (MCString::const_iterator itb = m_mssCTCPReplies.begin(); itb != m_mssCTCPReplies.end(); ++itb) {
|
||||
config.AddKeyValuePair("CTCPReply", itb->first.AsUpper() + " " + itb->second);
|
||||
for (const auto& itb : m_mssCTCPReplies) {
|
||||
config.AddKeyValuePair("CTCPReply", itb.first.AsUpper() + " " + itb.second);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -909,20 +892,19 @@ CConfig CUser::ToConfig() const {
|
||||
const CModules& Mods = GetModules();
|
||||
|
||||
if (!Mods.empty()) {
|
||||
for (unsigned int a = 0; a < Mods.size(); a++) {
|
||||
CString sArgs = Mods[a]->GetArgs();
|
||||
for (CModule* pMod : Mods) {
|
||||
CString sArgs = pMod->GetArgs();
|
||||
|
||||
if (!sArgs.empty()) {
|
||||
sArgs = " " + sArgs;
|
||||
}
|
||||
|
||||
config.AddKeyValuePair("LoadModule", Mods[a]->GetModName() + sArgs);
|
||||
config.AddKeyValuePair("LoadModule", pMod->GetModName() + sArgs);
|
||||
}
|
||||
}
|
||||
|
||||
// Networks
|
||||
for (unsigned int d = 0; d < m_vIRCNetworks.size(); d++) {
|
||||
CIRCNetwork *pNetwork = m_vIRCNetworks[d];
|
||||
for (CIRCNetwork *pNetwork : m_vIRCNetworks) {
|
||||
config.AddSubConfig("Network", pNetwork->GetName(), pNetwork->ToConfig());
|
||||
}
|
||||
|
||||
@@ -963,8 +945,7 @@ CString CUser::GetLocalDCCIP() const {
|
||||
if (!GetDCCBindHost().empty())
|
||||
return GetDCCBindHost();
|
||||
|
||||
for (vector<CIRCNetwork*>::const_iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
CIRCNetwork *pNetwork = *it;
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
CIRCSock* pIRCSock = pNetwork->GetIRCSock();
|
||||
if (pIRCSock) {
|
||||
return pIRCSock->GetLocalIP();
|
||||
@@ -979,9 +960,9 @@ CString CUser::GetLocalDCCIP() const {
|
||||
}
|
||||
|
||||
bool CUser::PutUser(const CString& sLine, CClient* pClient, CClient* pSkipClient) {
|
||||
for (unsigned int a = 0; a < m_vClients.size(); a++) {
|
||||
if ((!pClient || pClient == m_vClients[a]) && pSkipClient != m_vClients[a]) {
|
||||
m_vClients[a]->PutClient(sLine);
|
||||
for (CClient* pEachClient : m_vClients) {
|
||||
if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) {
|
||||
pEachClient->PutClient(sLine);
|
||||
|
||||
if (pClient) {
|
||||
return true;
|
||||
@@ -995,8 +976,7 @@ bool CUser::PutUser(const CString& sLine, CClient* pClient, CClient* pSkipClient
|
||||
bool CUser::PutAllUser(const CString& sLine, CClient* pClient, CClient* pSkipClient) {
|
||||
PutUser(sLine, pClient, pSkipClient);
|
||||
|
||||
for (vector<CIRCNetwork*>::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
CIRCNetwork* pNetwork = *it;
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
if (pNetwork->PutUser(sLine, pClient, pSkipClient)) {
|
||||
return true;
|
||||
}
|
||||
@@ -1007,9 +987,9 @@ bool CUser::PutAllUser(const CString& sLine, CClient* pClient, CClient* pSkipCli
|
||||
|
||||
bool CUser::PutStatus(const CString& sLine, CClient* pClient, CClient* pSkipClient) {
|
||||
vector<CClient*> vClients = GetAllClients();
|
||||
for (unsigned int a = 0; a < vClients.size(); a++) {
|
||||
if ((!pClient || pClient == vClients[a]) && pSkipClient != vClients[a]) {
|
||||
vClients[a]->PutStatus(sLine);
|
||||
for (CClient* pEachClient : vClients) {
|
||||
if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) {
|
||||
pEachClient->PutStatus(sLine);
|
||||
|
||||
if (pClient) {
|
||||
return true;
|
||||
@@ -1022,9 +1002,9 @@ bool CUser::PutStatus(const CString& sLine, CClient* pClient, CClient* pSkipClie
|
||||
|
||||
bool CUser::PutStatusNotice(const CString& sLine, CClient* pClient, CClient* pSkipClient) {
|
||||
vector<CClient*> vClients = GetAllClients();
|
||||
for (unsigned int a = 0; a < vClients.size(); a++) {
|
||||
if ((!pClient || pClient == vClients[a]) && pSkipClient != vClients[a]) {
|
||||
vClients[a]->PutStatusNotice(sLine);
|
||||
for (CClient* pEachClient : vClients) {
|
||||
if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) {
|
||||
pEachClient->PutStatusNotice(sLine);
|
||||
|
||||
if (pClient) {
|
||||
return true;
|
||||
@@ -1036,9 +1016,9 @@ bool CUser::PutStatusNotice(const CString& sLine, CClient* pClient, CClient* pSk
|
||||
}
|
||||
|
||||
bool CUser::PutModule(const CString& sModule, const CString& sLine, CClient* pClient, CClient* pSkipClient) {
|
||||
for (unsigned int a = 0; a < m_vClients.size(); a++) {
|
||||
if ((!pClient || pClient == m_vClients[a]) && pSkipClient != m_vClients[a]) {
|
||||
m_vClients[a]->PutModule(sModule, sLine);
|
||||
for (CClient* pEachClient : m_vClients) {
|
||||
if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) {
|
||||
pEachClient->PutModule(sModule, sLine);
|
||||
|
||||
if (pClient) {
|
||||
return true;
|
||||
@@ -1050,9 +1030,9 @@ bool CUser::PutModule(const CString& sModule, const CString& sLine, CClient* pCl
|
||||
}
|
||||
|
||||
bool CUser::PutModNotice(const CString& sModule, const CString& sLine, CClient* pClient, CClient* pSkipClient) {
|
||||
for (unsigned int a = 0; a < m_vClients.size(); a++) {
|
||||
if ((!pClient || pClient == m_vClients[a]) && pSkipClient != m_vClients[a]) {
|
||||
m_vClients[a]->PutModNotice(sModule, sLine);
|
||||
for (CClient* pEachClient : m_vClients) {
|
||||
if ((!pClient || pClient == pEachClient) && pSkipClient != pEachClient) {
|
||||
pEachClient->PutModNotice(sModule, sLine);
|
||||
|
||||
if (pClient) {
|
||||
return true;
|
||||
@@ -1072,8 +1052,8 @@ bool CUser::IsUserAttached() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (vector<CIRCNetwork*>::const_iterator i = m_vIRCNetworks.begin(); i != m_vIRCNetworks.end(); ++i) {
|
||||
if ((*i)->IsUserAttached()) {
|
||||
for (const CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
if (pNetwork->IsUserAttached()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -1100,9 +1080,9 @@ bool CUser::LoadModule(const CString& sModName, const CString& sArgs, const CStr
|
||||
// Do they have old NV?
|
||||
CFile fNVFile = CFile(GetUserPath() + "/moddata/" + sModName + "/.registry");
|
||||
|
||||
for (vector<CIRCNetwork*>::iterator it = m_vIRCNetworks.begin(); it != m_vIRCNetworks.end(); ++it) {
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
if (fNVFile.Exists()) {
|
||||
CString sNetworkModPath = (*it)->GetNetworkPath() + "/moddata/" + sModName;
|
||||
CString sNetworkModPath = pNetwork->GetNetworkPath() + "/moddata/" + sModName;
|
||||
if (!CFile::Exists(sNetworkModPath)) {
|
||||
CDir::MakeDir(sNetworkModPath);
|
||||
}
|
||||
@@ -1110,7 +1090,7 @@ bool CUser::LoadModule(const CString& sModName, const CString& sArgs, const CStr
|
||||
fNVFile.Copy(sNetworkModPath + "/.registry");
|
||||
}
|
||||
|
||||
bModRet = (*it)->GetModules().LoadModule(sModName, sArgs, CModInfo::NetworkModule, this, *it, sModRet);
|
||||
bModRet = pNetwork->GetModules().LoadModule(sModName, sArgs, CModInfo::NetworkModule, this, pNetwork, sModRet);
|
||||
if (!bModRet) {
|
||||
break;
|
||||
}
|
||||
@@ -1197,14 +1177,14 @@ bool CUser::SetStatusPrefix(const CString& s) {
|
||||
vector<CClient*> CUser::GetAllClients() const {
|
||||
vector<CClient*> vClients;
|
||||
|
||||
for (unsigned int a = 0; a < m_vIRCNetworks.size(); a++) {
|
||||
for (unsigned int b = 0; b < m_vIRCNetworks[a]->GetClients().size(); b++) {
|
||||
vClients.push_back(m_vIRCNetworks[a]->GetClients()[b]);
|
||||
for (CIRCNetwork* pNetwork : m_vIRCNetworks) {
|
||||
for (CClient* pClient : pNetwork->GetClients()) {
|
||||
vClients.push_back(pClient);
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned int a = 0; a < m_vClients.size(); a++) {
|
||||
vClients.push_back(m_vClients[a]);
|
||||
for (CClient* pClient : m_vClients) {
|
||||
vClients.push_back(pClient);
|
||||
}
|
||||
|
||||
return vClients;
|
||||
|
||||
@@ -120,14 +120,14 @@ void CWebSession::ClearMessageLoops() {
|
||||
}
|
||||
|
||||
void CWebSession::FillMessageLoops(CTemplate& Tmpl) {
|
||||
for (unsigned int a = 0; a < m_vsErrorMsgs.size(); a++) {
|
||||
for (const CString& sMessage : m_vsErrorMsgs) {
|
||||
CTemplate& Row = Tmpl.AddRow("ErrorLoop");
|
||||
Row["Message"] = m_vsErrorMsgs[a];
|
||||
Row["Message"] = sMessage;
|
||||
}
|
||||
|
||||
for (unsigned int b = 0; b < m_vsSuccessMsgs.size(); b++) {
|
||||
for (const CString& sMessage : m_vsSuccessMsgs) {
|
||||
CTemplate& Row = Tmpl.AddRow("SuccessLoop");
|
||||
Row["Message"] = m_vsSuccessMsgs[b];
|
||||
Row["Message"] = sMessage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,20 +232,16 @@ void CWebSock::GetAvailSkins(VCString& vRet) const {
|
||||
if (!sRoot.empty() && CFile::IsDir(sRoot)) {
|
||||
CDir Dir(sRoot);
|
||||
|
||||
for (unsigned int d = 0; d < Dir.size(); d++) {
|
||||
const CFile& SubDir = *Dir[d];
|
||||
|
||||
if (SubDir.IsDir() && SubDir.GetShortName() == "_default_") {
|
||||
vRet.push_back(SubDir.GetShortName());
|
||||
for (const CFile* pSubDir : Dir) {
|
||||
if (pSubDir->IsDir() && pSubDir->GetShortName() == "_default_") {
|
||||
vRet.push_back(pSubDir->GetShortName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (unsigned int e = 0; e < Dir.size(); e++) {
|
||||
const CFile& SubDir = *Dir[e];
|
||||
|
||||
if (SubDir.IsDir() && SubDir.GetShortName() != "_default_" && SubDir.GetShortName() != ".svn") {
|
||||
vRet.push_back(SubDir.GetShortName());
|
||||
for (const CFile* pSubDir : Dir) {
|
||||
if (pSubDir->IsDir() && pSubDir->GetShortName() != "_default_" && pSubDir->GetShortName() != ".svn") {
|
||||
vRet.push_back(pSubDir->GetShortName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -302,9 +298,9 @@ VCString CWebSock::GetDirs(CModule* pModule, bool bIsTemplate) {
|
||||
CString CWebSock::FindTmpl(CModule* pModule, const CString& sName) {
|
||||
VCString vsDirs = GetDirs(pModule, true);
|
||||
CString sFile = pModule->GetModName() + "_" + sName;
|
||||
for (size_t i = 0; i < vsDirs.size(); ++i) {
|
||||
if (CFile::Exists(CDir::ChangeDir(vsDirs[i], sFile))) {
|
||||
m_Template.AppendPath(vsDirs[i]);
|
||||
for (const CString& sDir : vsDirs) {
|
||||
if (CFile::Exists(CDir::ChangeDir(sDir, sFile))) {
|
||||
m_Template.AppendPath(sDir);
|
||||
return sFile;
|
||||
}
|
||||
}
|
||||
@@ -315,8 +311,8 @@ void CWebSock::SetPaths(CModule* pModule, bool bIsTemplate) {
|
||||
m_Template.ClearPaths();
|
||||
|
||||
VCString vsDirs = GetDirs(pModule, bIsTemplate);
|
||||
for (size_t i = 0; i < vsDirs.size(); ++i) {
|
||||
m_Template.AppendPath(vsDirs[i]);
|
||||
for (const CString& sDir : vsDirs) {
|
||||
m_Template.AppendPath(sDir);
|
||||
}
|
||||
|
||||
m_bPathsSet = true;
|
||||
@@ -340,28 +336,27 @@ void CWebSock::SetVars() {
|
||||
|
||||
// Global Mods
|
||||
CModules& vgMods = CZNC::Get().GetModules();
|
||||
for (unsigned int a = 0; a < vgMods.size(); a++) {
|
||||
AddModLoop("GlobalModLoop", *vgMods[a]);
|
||||
for (CModule* pgMod : vgMods) {
|
||||
AddModLoop("GlobalModLoop", *pgMod);
|
||||
}
|
||||
|
||||
// User Mods
|
||||
if (IsLoggedIn()) {
|
||||
CModules& vMods = GetSession()->GetUser()->GetModules();
|
||||
|
||||
for (unsigned int a = 0; a < vMods.size(); a++) {
|
||||
AddModLoop("UserModLoop", *vMods[a]);
|
||||
for (CModule* pMod : vMods) {
|
||||
AddModLoop("UserModLoop", *pMod);
|
||||
}
|
||||
|
||||
vector<CIRCNetwork*> vNetworks = GetSession()->GetUser()->GetNetworks();
|
||||
vector<CIRCNetwork*>::iterator it;
|
||||
for (it = vNetworks.begin(); it != vNetworks.end(); ++it) {
|
||||
CModules& vnMods = (*it)->GetModules();
|
||||
for (CIRCNetwork* pNetwork : vNetworks) {
|
||||
CModules& vnMods = pNetwork->GetModules();
|
||||
|
||||
CTemplate& Row = m_Template.AddRow("NetworkModLoop");
|
||||
Row["NetworkName"] = (*it)->GetName();
|
||||
Row["NetworkName"] = pNetwork->GetName();
|
||||
|
||||
for (unsigned int a = 0; a < vnMods.size(); a++) {
|
||||
AddModLoop("ModLoop", *vnMods[a], &Row);
|
||||
for (CModule* pnMod : vnMods) {
|
||||
AddModLoop("ModLoop", *pnMod, &Row);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -415,9 +410,7 @@ bool CWebSock::AddModLoop(const CString& sLoopName, CModule& Module, CTemplate *
|
||||
|
||||
VWebSubPages& vSubPages = Module.GetSubPages();
|
||||
|
||||
for (unsigned int a = 0; a < vSubPages.size(); a++) {
|
||||
TWebSubPage& SubPage = vSubPages[a];
|
||||
|
||||
for (TWebSubPage& SubPage : vSubPages) {
|
||||
// bActive is whether or not the current url matches this subpage (params will be checked below)
|
||||
bool bActive = (m_sModName == Module.GetModName() && m_sPage == SubPage->GetName() && bActiveModule);
|
||||
|
||||
@@ -435,9 +428,7 @@ bool CWebSock::AddModLoop(const CString& sLoopName, CModule& Module, CTemplate *
|
||||
CString& sParams = SubRow["Params"];
|
||||
|
||||
const VPair& vParams = SubPage->GetParams();
|
||||
for (size_t b = 0; b < vParams.size(); b++) {
|
||||
pair<CString, CString> ssNV = vParams[b];
|
||||
|
||||
for (const pair<CString, CString>& ssNV : vParams) {
|
||||
if (!sParams.empty()) {
|
||||
sParams += "&";
|
||||
}
|
||||
@@ -750,9 +741,7 @@ CWebSock::EPageReqResult CWebSock::OnPageRequestInternal(const CString& sURI, CS
|
||||
|
||||
VWebSubPages& vSubPages = pModule->GetSubPages();
|
||||
|
||||
for (unsigned int a = 0; a < vSubPages.size(); a++) {
|
||||
TWebSubPage& SubPage = vSubPages[a];
|
||||
|
||||
for (TWebSubPage& SubPage : vSubPages) {
|
||||
bool bActive = (m_sModName == pModule->GetModName() && m_sPage == SubPage->GetName());
|
||||
|
||||
if (bActive && SubPage->RequiresAdmin() && !GetSession()->IsAdmin()) {
|
||||
|
||||
Reference in New Issue
Block a user