From e3b723de5b9610af00424c345260b95f4050e8d6 Mon Sep 17 00:00:00 2001 From: prozacx Date: Sun, 9 Oct 2005 23:19:07 +0000 Subject: [PATCH] Made multiple clients per user a config option git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@556 726aef4b-f618-498e-8847-2d620e286838 --- User.cpp | 28 +++++++++++++++++----------- User.h | 4 ++++ modules/webadmin.cpp | 2 ++ znc.cpp | 3 +++ 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/User.cpp b/User.cpp index e5822c52..f606e244 100644 --- a/User.cpp +++ b/User.cpp @@ -21,6 +21,7 @@ CUser::CUser(const CString& sUserName) { #endif m_RawBuffer.SetLineCount(100); // This should be more than enough raws, especially since we are buffering the MOTD separately m_MotdBuffer.SetLineCount(200); // This should be more than enough motd lines + m_bMultiClients = true; m_bBounceDCCs = true; m_bPassHashed = false; m_bUseClientIP = false; @@ -72,17 +73,6 @@ bool CUser::OnBoot() { } void CUser::IRCConnected(CIRCSock* pIRCSock) { - /*TSocketManager& Manager = CZNC::Get().GetManager(); - - for (unsigned int a = 0; a < Manager.size(); a++) { - CUserSock* pUserSock = (CUserSock*) Manager[a]; - const CString& sSockName = pUserSock->GetSockName(); - - if (sSockName == ("USR::" + GetUserName())) { - m_vUserSocks.push_back(pUserSock); - pUserSock->IRCConnected(pIRCSock); - } - }*/ } void CUser::IRCDisconnected() { @@ -91,7 +81,19 @@ void CUser::IRCDisconnected() { } } +void CUser::BounceAllClients() { + for (unsigned int a = 0; a < m_vUserSocks.size(); a++) { + m_vUserSocks[a]->BouncedOff(); + } + + m_vUserSocks.clear(); +} + void CUser::UserConnected(CUserSock* pUserSock) { + if (!MultiClients()) { + BounceAllClients(); + } + m_vUserSocks.push_back(pUserSock); CIRCSock* pIRCSock = GetIRCSock(); @@ -324,6 +326,7 @@ bool CUser::Clone(const CUser& User, CString& sErrorRet) { SetKeepBuffer(User.KeepBuffer()); SetAutoCycle(User.AutoCycle()); SetKeepNick(User.GetKeepNick()); + SetMultiClients(User.MultiClients()); SetBounceDCCs(User.BounceDCCs()); SetUseClientIP(User.UseClientIP()); SetDenyLoadMod(User.DenyLoadMod()); @@ -460,6 +463,7 @@ bool CUser::WriteConfig(CFile& File) { PrintLine(File, "Buffer", CString::ToString(GetBufferCount())); PrintLine(File, "KeepNick", CString((GetKeepNick()) ? "true" : "false")); PrintLine(File, "KeepBuffer", CString((KeepBuffer()) ? "true" : "false")); + PrintLine(File, "MultiClients", CString((MultiClients()) ? "true" : "false")); PrintLine(File, "BounceDCCs", CString((BounceDCCs()) ? "true" : "false")); PrintLine(File, "AutoCycle", CString((AutoCycle()) ? "true" : "false")); PrintLine(File, "DenyLoadMod", CString((DenyLoadMod()) ? "true" : "false")); @@ -842,6 +846,7 @@ void CUser::SetIdent(const CString& s) { m_sIdent = s; } void CUser::SetRealName(const CString& s) { m_sRealName = s; } void CUser::SetVHost(const CString& s) { m_sVHost = s; } void CUser::SetPass(const CString& s, bool bHashed) { m_sPass = s; m_bPassHashed = bHashed; } +void CUser::SetMultiClients(bool b) { m_bMultiClients = b; } void CUser::SetBounceDCCs(bool b) { m_bBounceDCCs = b; } void CUser::SetUseClientIP(bool b) { m_bUseClientIP = b; } void CUser::SetKeepNick(bool b) { m_bKeepNick = b; } @@ -910,6 +915,7 @@ bool CUser::UseClientIP() const { return m_bUseClientIP; } bool CUser::GetKeepNick() const { return m_bKeepNick; } bool CUser::DenyLoadMod() const { return m_bDenyLoadMod; } bool CUser::IsAdmin() const { return m_bAdmin; } +bool CUser::MultiClients() const { return m_bMultiClients; } bool CUser::BounceDCCs() const { return m_bBounceDCCs; } const CString& CUser::GetStatusPrefix() const { return m_sStatusPrefix; } const CString& CUser::GetDefaultChanModes() const { return m_sDefaultChanModes; } diff --git a/User.h b/User.h index 6816b29b..cefafbdb 100644 --- a/User.h +++ b/User.h @@ -90,6 +90,7 @@ public: void StartAwayNickTimer(); void DelAwayNickTimer(); void DelBackNickTimer(); + void BounceAllClients(); // Setters void SetUserName(const CString& s); @@ -101,6 +102,7 @@ public: void SetVHost(const CString& s); void SetPass(const CString& s, bool bHashed); void SetBounceDCCs(bool b); + void SetMultiClients(bool b); void SetUseClientIP(bool b); void SetKeepNick(bool b); void SetDenyLoadMod(bool b); @@ -142,6 +144,7 @@ public: bool DenyLoadMod() const; bool IsAdmin() const; bool BounceDCCs() const; + bool MultiClients() const; const CString& GetStatusPrefix() const; const CString& GetDefaultChanModes() const; const vector& GetChans() const; @@ -182,6 +185,7 @@ protected: CBuffer m_MotdBuffer; CBuffer m_QueryBuffer; + bool m_bMultiClients; bool m_bBounceDCCs; bool m_bPassHashed; bool m_bUseClientIP; diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index d913ffa6..40986c21 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -824,6 +824,7 @@ bool CWebAdminSock::UserPage(CString& sPageRet, CUser* pUser) { "KeepBuffer()) ? " CHECKED" : "") + ">  \r\n" "AutoCycle()) ? " CHECKED" : "") + ">  \r\n" "GetKeepNick()) ? " CHECKED" : "") + ">  \r\n" + "MultiClients()) ? " CHECKED" : "") + ">  \r\n" "BounceDCCs()) ? " CHECKED" : "") + ">  \r\n" "UseClientIP()) ? " CHECKED" : "") + ">  \r\n"; @@ -998,6 +999,7 @@ CUser* CWebAdminSock::GetNewUser(CString& sPageRet, CUser* pUser) { pNewUser->SetBufferCount(GetParam("bufsize").ToUInt()); pNewUser->SetKeepBuffer(GetParam("keepbuffer").ToBool()); + pNewUser->SetMultiClients(GetParam("multiclients").ToBool()); pNewUser->SetBounceDCCs(GetParam("bouncedccs").ToBool()); pNewUser->SetAutoCycle(GetParam("autocycle").ToBool()); pNewUser->SetKeepNick(GetParam("keepnick").ToBool()); diff --git a/znc.cpp b/znc.cpp index 6f3b436c..de549639 100644 --- a/znc.cpp +++ b/znc.cpp @@ -830,6 +830,9 @@ bool CZNC::ParseConfig(const CString& sConfig) { pUser->SetPass(sValue, false); } + continue; + } else if (sName.CaseCmp("MultiClients") == 0) { + pUser->SetMultiClients(sValue.CaseCmp("true") == 0); continue; } else if (sName.CaseCmp("BounceDCCs") == 0) { pUser->SetBounceDCCs(sValue.CaseCmp("true") == 0);