From 92a718e3a6b53c6502beffdd1341b37f88c4d3d5 Mon Sep 17 00:00:00 2001 From: psychon Date: Sat, 4 Oct 2008 20:55:50 +0000 Subject: [PATCH] Use CSocket in webadmin instead of directly using Csock This gets rid of some code duplication for managing the sockets. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1240 726aef4b-f618-498e-8847-2d620e286838 --- HTTPSock.cpp | 6 +++--- HTTPSock.h | 9 ++++----- modules/webadmin.cpp | 43 +++++++++++-------------------------------- 3 files changed, 18 insertions(+), 40 deletions(-) diff --git a/HTTPSock.cpp b/HTTPSock.cpp index 4edddb14..ad717bd3 100644 --- a/HTTPSock.cpp +++ b/HTTPSock.cpp @@ -11,7 +11,7 @@ #include "HTTPSock.h" #include "znc.h" -CHTTPSock::CHTTPSock() : Csock() { +CHTTPSock::CHTTPSock(CModule *pMod) : CSocket(pMod) { m_bSentHeader = false; m_bGotHeader = false; m_bLoggedIn = false; @@ -22,7 +22,7 @@ CHTTPSock::CHTTPSock() : Csock() { SetMaxBufferThreshold(10240); } -CHTTPSock::CHTTPSock(const CString& sHostname, unsigned short uPort, int iTimeout) : Csock(sHostname, uPort, iTimeout) { +CHTTPSock::CHTTPSock(CModule *pMod, const CString& sHostname, unsigned short uPort, int iTimeout) : CSocket(pMod, sHostname, uPort, iTimeout) { m_bSentHeader = false; m_bGotHeader = false; m_bLoggedIn = false; @@ -392,7 +392,7 @@ void CHTTPSock::ReachedMaxBuffer() { } Csock* CHTTPSock::GetSockObj(const CString& sHost, unsigned short uPort) { - CHTTPSock* pSock = new CHTTPSock; + CHTTPSock* pSock = new CHTTPSock(m_pModule); pSock->SetSockName("HTTP::CLIENT"); pSock->SetTimeout(120); diff --git a/HTTPSock.h b/HTTPSock.h index 768087e7..f64d7bc8 100644 --- a/HTTPSock.h +++ b/HTTPSock.h @@ -11,13 +11,12 @@ #ifndef _HTTPSOCK_H #define _HTTPSOCK_H -#include "Csocket.h" -#include "main.h" +#include "Modules.h" -class CHTTPSock : public Csock { +class CHTTPSock : public CSocket { public: - CHTTPSock(); - CHTTPSock(const CString& sHostname, unsigned short uPort, int iTimeout = 60); + CHTTPSock(CModule *pMod); + CHTTPSock(CModule *pMod, const CString& sHostname, unsigned short uPort, int iTimeout = 60); virtual ~CHTTPSock(); // Csocket derived members diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp index bc6e6bfd..d99f5a20 100644 --- a/modules/webadmin.cpp +++ b/modules/webadmin.cpp @@ -96,9 +96,10 @@ public: virtual Csock* GetSockObj(const CString& sHost, unsigned short uPort); bool IsAdmin(bool bAllowUserAdmin = true) const { return m_bAdmin; } + CWebAdminMod* GetModule() const { return (CWebAdminMod*) m_pModule; } + private: protected: - CWebAdminMod* m_pModule; CUser* m_pUser; CUser* m_pSessionUser; bool m_bAdmin; @@ -114,15 +115,6 @@ public: } virtual ~CWebAdminMod() { - while (m_spSocks.size()) { // Loop through the sockets that we have created - m_pManager->DelSockByAddr(*m_spSocks.begin()); // Delete each one which will call SockDestroyed() and erase it from the set - } // This way we don't want to erase it ourselves, that's why we're using the funky while loop - - m_spSocks.clear(); - } - - virtual bool OnBoot() { - return true; } virtual bool OnLoad(const CString& sArgStr, CString& sMessage) { @@ -180,14 +172,6 @@ public: return b; } - void AddSock(CWebAdminSock* pSock) { - m_spSocks.insert(pSock); - } - - void SockDestroyed(CWebAdminSock* pSock) { - m_spSocks.erase(pSock); - } - void SetSkinName(const CString& s) { m_sSkinName = s; SetNV("SkinName", m_sSkinName); @@ -219,14 +203,13 @@ public: private: unsigned short m_uPort; CString m_sSkinName; - set m_spSocks; CString m_sListenHost; map m_suSwitchCounters; }; CString CWebAdminSock::GetSkinDir() { CString sSkinDir = m_pModule->GetModDataDir() + "/skins/" - + m_pModule->GetSkinName() + "/"; + + GetModule()->GetSkinName() + "/"; if (CFile::IsDir(sSkinDir)) { return sSkinDir; @@ -302,35 +285,31 @@ void CWebAdminSock::ListUsersPage(CString& sPageRet) { } Csock* CWebAdminSock::GetSockObj(const CString& sHost, unsigned short uPort) { - CWebAdminSock* pSock = new CWebAdminSock(m_pModule, sHost, uPort); + CWebAdminSock* pSock = new CWebAdminSock(GetModule(), sHost, uPort); pSock->SetSockName("WebAdmin::Client"); pSock->SetTimeout(120); - m_pModule->AddSock(pSock); return pSock; } -CWebAdminSock::CWebAdminSock(CWebAdminMod* pModule) : CHTTPSock() { +CWebAdminSock::CWebAdminSock(CWebAdminMod* pModule) : CHTTPSock(pModule) { m_pModule = pModule; m_pUser = NULL; m_pSessionUser = NULL; m_bAdmin = false; - m_pModule->AddSock(this); SetDocRoot(GetSkinDir()); } -CWebAdminSock::CWebAdminSock(CWebAdminMod* pModule, const CString& sHostname, unsigned short uPort, int iTimeout) : CHTTPSock(sHostname, uPort, iTimeout) { +CWebAdminSock::CWebAdminSock(CWebAdminMod* pModule, const CString& sHostname, unsigned short uPort, int iTimeout) + : CHTTPSock(pModule, sHostname, uPort, iTimeout) { m_pModule = pModule; m_pUser = NULL; m_pSessionUser = NULL; m_bAdmin = false; - m_pModule->AddSock(this); SetDocRoot(GetSkinDir()); } CWebAdminSock::~CWebAdminSock() { - m_pModule->SockDestroyed(this); - if (!m_spAuth.IsNull()) { CWebAdminAuth* pAuth = (CWebAdminAuth*) &(*m_spAuth); pAuth->SetWebAdminSock(NULL); @@ -388,7 +367,7 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) { } } else if (sURI == "/switchuser") { unsigned int uCurCnt = GetParam("cnt").ToUInt(); - unsigned int uCounter = m_pModule->GetSwitchCounter(GetRemoteIP()); + unsigned int uCounter = GetModule()->GetSwitchCounter(GetRemoteIP()); if (!uCurCnt) { Redirect("/switchuser?cnt=" + CString(uCounter)); @@ -397,7 +376,7 @@ bool CWebAdminSock::OnPageRequest(const CString& sURI, CString& sPageRet) { if (uCurCnt >= uCounter) { m_bLoggedIn = false; - m_pModule->IncSwitchCounter(GetRemoteIP()); + GetModule()->IncSwitchCounter(GetRemoteIP()); ForceLogin(); } else { Redirect("/home"); @@ -557,7 +536,7 @@ bool CWebAdminSock::SettingsPage(CString& sPageRet) { CTemplate& l = m_Template.AddRow("SkinLoop"); l["Name"] = SubDir.GetShortName(); - if (SubDir.GetShortName() == m_pModule->GetSkinName()) { + if (SubDir.GetShortName() == GetModule()->GetSkinName()) { l["Checked"] = "true"; } } @@ -610,7 +589,7 @@ bool CWebAdminSock::SettingsPage(CString& sPageRet) { CZNC::Get().AddVHost(vsArgs[a].Trim_n()); } - m_pModule->SetSkinName(GetParam("skin")); + GetModule()->SetSkinName(GetParam("skin")); set ssArgs; GetParamValues("loadmod", ssArgs);