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