Merge pull request #886 from jpnurmi/for-loops

C++11 range-based for loops
This commit is contained in:
Alexey Sokolov
2015-02-25 21:44:54 -08:00
4 changed files with 197 additions and 272 deletions

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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()) {