/* * This file is a part of Winix * and is distributed under the 2-Clause BSD licence. * Author: Tomasz Sowa */ /* * Copyright (c) 2008-2014, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ #ifndef headerfile_winix_core_sessionmanager #define headerfile_winix_core_sessionmanager #include #include #include "sessioncontainer.h" #include "ipbancontainer.h" #include "config.h" #include "request.h" #include "lastcontainer.h" #include "system.h" #include "synchro.h" #include "basethread.h" namespace Winix { class SessionManager : public BaseThread { public: SessionManager(); void SetCur(Cur * pcur); void SetConfig(Config * pconfig); void SetSystem(System * psystem); void SetLastContainer(LastContainer * plast_container); // can return a null pointer Session * FindSession(long id); void SetSession(); void DeleteSessions(); // deleting all sessions bool ChangeSessionId(long old_id); void InitBanList(); void InitTmpSession(); void UninitTmpSession(); Session * GetTmpSession(); Session * GetCurSession(); void LoadSessions(); void SaveSessions(); SessionContainer::Iterator SessionBegin(); SessionContainer::Iterator SessionEnd(); size_t Size(); size_t MarkAllSessionsToRemove(long user_id); IPBan & AddIPToBanList(int ip); size_t BanListSize(); IPBan & GetIPBan(size_t index); void RemoveIPBan(int ip); void ClearIPBanList(); private: Config * config; Cur * cur; System * system; LastContainer * last_container; // current session - set by SetSession() Session * session; SessionContainer session_tab; IPBanContainer ban_tab; IPBan * current_ip_ban; // session with id 0 Session temporary_session; bool IsSession(long s); long CreateSessionId(); void CreateSession(); bool SetSessionFromCookie(const std::wstring & cookie); void SetTemporarySession(); // second thread int deleted; virtual void Work(); void CheckSession(SessionContainer::Iterator & i); bool IsSessionOutdated(const Session & s) const; void DeleteSession(Session * del_session); void CheckWheterIPListIsSorted(); }; } // namespace Winix #endif