Limit the number of web sessions per IP to 5

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@2263 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
psychon
2011-01-14 20:22:43 +00:00
parent 4556cc7c9b
commit 913a3c8ded
2 changed files with 8 additions and 0 deletions

View File

@@ -19,6 +19,8 @@ CWebSessionMap CWebSock::m_mspSessions(24 * 60 * 60 * 1000);
static std::multimap<CString, CWebSession*> mIPSessions; static std::multimap<CString, CWebSession*> mIPSessions;
typedef std::multimap<CString, CWebSession*>::iterator mIPSessionsIterator; typedef std::multimap<CString, CWebSession*>::iterator mIPSessionsIterator;
const unsigned int CWebSock::m_uiMaxSessions = 5;
CWebSession::~CWebSession() { CWebSession::~CWebSession() {
// Find our entry in mIPSessions // Find our entry in mIPSessions
pair<mIPSessionsIterator, mIPSessionsIterator> p = pair<mIPSessionsIterator, mIPSessionsIterator> p =
@@ -689,6 +691,11 @@ CSmartPtr<CWebSession> CWebSock::GetSession() {
return *pSession; return *pSession;
} }
if (mIPSessions.count(GetRemoteIP()) > m_uiMaxSessions) {
mIPSessionsIterator it = mIPSessions.find(GetRemoteIP());
mIPSessions.erase(it);
}
CString sSessionID; CString sSessionID;
do { do {
sSessionID = CString::RandomString(32); sSessionID = CString::RandomString(32);

View File

@@ -172,6 +172,7 @@ private:
CSmartPtr<CWebSession> m_spSession; CSmartPtr<CWebSession> m_spSession;
static CWebSessionMap m_mspSessions; static CWebSessionMap m_mspSessions;
static const unsigned int m_uiMaxSessions;
}; };
#endif // !_WEBMODULES_H #endif // !_WEBMODULES_H