From cac29752cf19b6258273d58ed33bc94679a950af Mon Sep 17 00:00:00 2001 From: psychon Date: Thu, 1 Apr 2010 08:39:10 +0000 Subject: [PATCH] Add functions for modifing the ports on which znc listens Patch is based on a patch from BrianC, thanks a lot. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1866 726aef4b-f618-498e-8847-2d620e286838 --- znc.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ znc.h | 5 +++++ 2 files changed, 48 insertions(+) diff --git a/znc.cpp b/znc.cpp index 00599956..d0e7f1fe 100644 --- a/znc.cpp +++ b/znc.cpp @@ -1821,6 +1821,49 @@ bool CZNC::AddUser(CUser* pUser, CString& sErrorRet) { return true; } +CListener* CZNC::FindListener(u_short uPort, const CString& sBindHost, EAddrType eAddr) { + vector::iterator it; + + for (it = m_vpListeners.begin(); it < m_vpListeners.end(); ++it) { + if ((*it)->GetPort() != uPort) + continue; + if ((*it)->GetBindHost() != sBindHost) + continue; + if ((*it)->GetAddrType() != eAddr) + continue; + return *it; + } + return NULL; +} + +bool CZNC::AddListener(CListener* pListener) { + if (!pListener->GetRealListener()) { + // Listener doesnt actually listen + delete pListener; + return false; + } + + // We don't check if there is an identical listener already listening + // since one can't listen on e.g. the same port multiple times + + m_vpListeners.push_back(pListener); + return true; +} + +bool CZNC::DelListener(CListener* pListener) { + vector::iterator it; + + for (it = m_vpListeners.begin(); it < m_vpListeners.end(); ++it) { + if (*it == pListener) { + m_vpListeners.erase(it); + delete *it; + return true; + } + } + + return false; +} + CZNC& CZNC::Get() { static CZNC* pZNC = new CZNC; return *pZNC; diff --git a/znc.h b/znc.h index 5ae330e2..10ae0287 100644 --- a/znc.h +++ b/znc.h @@ -119,6 +119,11 @@ public: bool AddUser(CUser* pUser, CString& sErrorRet); const map & GetUserMap() const { return(m_msUsers); } + // Listener yummy + CListener* FindListener(u_short uPort, const CString& BindHost, EAddrType eAddr); + bool AddListener(CListener*); + bool DelListener(CListener*); + // Message of the Day void SetMotd(const CString& sMessage) { ClearMotd(); AddMotd(sMessage); } void AddMotd(const CString& sMessage) { if (!sMessage.empty()) { m_vsMotd.push_back(sMessage); } }