147 lines
4.1 KiB
C++
147 lines
4.1 KiB
C++
// FileZilla Server - a Windows ftp server
|
||
|
||
// Copyright (C) 2002-2004 - Tim Kosse <tim.kosse@gmx.de>
|
||
|
||
// This program is free software; you can redistribute it and/or
|
||
// modify it under the terms of the GNU General Public License
|
||
// as published by the Free Software Foundation; either version 2
|
||
// of the License, or (at your option) any later version.
|
||
|
||
// This program is distributed in the hope that it will be useful,
|
||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
// GNU General Public License for more details.
|
||
|
||
// You should have received a copy of the GNU General Public License
|
||
// along with this program; if not, write to the Free Software
|
||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||
|
||
#if !defined(AFX_SERVERTHREAD_H__4F566540_62DF_4338_85DE_EC699EB6640C__INCLUDED_)
|
||
#define AFX_SERVERTHREAD_H__4F566540_62DF_4338_85DE_EC699EB6640C__INCLUDED_
|
||
|
||
#include "Thread.h"
|
||
#if _MSC_VER > 1000
|
||
#pragma once
|
||
#endif // _MSC_VER > 1000
|
||
// ServerThread.h : Header-Datei
|
||
//
|
||
|
||
class CControlSocket;
|
||
class CServerThread;
|
||
class COptions;
|
||
class CPermissions;
|
||
class t_user;
|
||
class CExternalIpCheck;
|
||
class CAutoBanManager;
|
||
class CHashThread;
|
||
|
||
typedef struct
|
||
{
|
||
CControlSocket *pSocket;
|
||
CServerThread *pThread;
|
||
} t_socketdata;
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// Thread CServerThread
|
||
|
||
class CServerThread : public CThread
|
||
{
|
||
public:
|
||
virtual CStdString GetExternalIP(const CStdString& localIP);
|
||
virtual void ExternalIPFailed();
|
||
CServerThread(int nNotificationMessageId);
|
||
|
||
CPermissions *m_pPermissions;
|
||
COptions *m_pOptions;
|
||
CAutoBanManager* m_pAutoBanManager;
|
||
void IncRecvCount(int count);
|
||
void IncSendCount(int count);
|
||
void IncIpCount(const CStdString &ip);
|
||
void DecIpCount(const CStdString &ip);
|
||
int GetIpCount(const CStdString &ip) const;
|
||
BOOL IsReady();
|
||
static const int GetGlobalNumConnections();
|
||
void AddSocket(SOCKET sockethandle, bool ssl);
|
||
const int GetNumConnections();
|
||
|
||
struct t_Notification
|
||
{
|
||
WPARAM wParam;
|
||
LPARAM lParam;
|
||
};
|
||
|
||
void SendNotification(WPARAM wParam, LPARAM lParam);
|
||
|
||
/*
|
||
* The parameter should be an empty list, since m_pendingNotifications and
|
||
* list get swapped to increase performance.
|
||
*/
|
||
void GetNotifications(std::list<CServerThread::t_Notification>& list);
|
||
|
||
void AntiHammerIncrease(const CStdString& ip);
|
||
|
||
CHashThread& GetHashThread();
|
||
|
||
protected:
|
||
virtual ~CServerThread();
|
||
|
||
void GatherTransferedBytes();
|
||
void ProcessNewSlQuota();
|
||
virtual BOOL InitInstance();
|
||
virtual DWORD ExitInstance();
|
||
|
||
virtual int OnThreadMessage(UINT Msg, WPARAM wParam, LPARAM lParam);
|
||
void OnTimer(WPARAM wParam, LPARAM lParam);
|
||
|
||
void ProcessControlMessage(t_controlmessage *msg);
|
||
CControlSocket * GetControlSocket(int userid);
|
||
std::map<int, CControlSocket *> m_LocalUserIDs;
|
||
void AddNewSocket(SOCKET sockethandle, bool ssl);
|
||
static int CalcUserID();
|
||
static std::map<int, t_socketdata> m_userids;
|
||
static std::map<CStdString, int> m_userIPs;
|
||
void AntiHammerDecrease();
|
||
|
||
int m_nRecvCount;
|
||
int m_nSendCount;
|
||
UINT m_nRateTimer;
|
||
BOOL m_bQuit;
|
||
|
||
CCriticalSectionWrapper m_threadsync;
|
||
static CCriticalSectionWrapper m_GlobalThreadsync;
|
||
unsigned int m_timerid;
|
||
|
||
//Speed limit code
|
||
static std::list<CServerThread *> m_sInstanceList; //First instance is the SL master
|
||
BOOL m_bIsMaster;
|
||
int m_nLoopCount;
|
||
|
||
int m_lastLimits[2];
|
||
typedef struct {
|
||
int nBytesAllowedToTransfer;
|
||
int nTransferred;
|
||
} t_Quota;
|
||
t_Quota m_SlQuotas[2];
|
||
|
||
CStdString m_RawWelcomeMessage;
|
||
std::list<CStdString> m_ParsedWelcomeMessage;
|
||
CExternalIpCheck *m_pExternalIpCheck;
|
||
|
||
std::list<t_Notification> m_pendingNotifications;
|
||
int m_throttled;
|
||
|
||
int m_nNotificationMessageId;
|
||
|
||
static std::map<CStdString, int> m_antiHammerInfo;
|
||
int m_antiHammerTimer;
|
||
|
||
static CHashThread* m_hashThread;
|
||
};
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|
||
//{{AFX_INSERT_LOCATION}}
|
||
// Microsoft Visual C++ f<>gt unmittelbar vor der vorhergehenden Zeile zus<75>tzliche Deklarationen ein.
|
||
|
||
#endif // AFX_SERVERTHREAD_H__4F566540_62DF_4338_85DE_EC699EB6640C__INCLUDED_
|