📄 webserver.h
字号:
#pragma once
#include "zlib/zlib.h"
#include "WebSocket.h"
#include "Partfile.h"
#define WEB_GRAPH_HEIGHT 120
#define WEB_GRAPH_WIDTH 500
#define SESSION_TIMEOUT_SECS 300 // 5 minutes session expiration
#define SHORT_FILENAME_LENGTH 40 // Max size of file name.
typedef struct { float download; float upload; } UpDown;
typedef struct { CTime startTime; long lSession; bool admin;} Session;
typedef struct
{
CString sFileName;
CString sFileStatus;
uint64 lFileSize;
long lFileTransferred;
long lFileSpeed;
long lSourceCount;
long lNotCurrentSourceCount;
long lTransferringSourceCount;
int nFileStatus;
CString sFileHash;
CString sED2kLink;
CString sFileInfo;
} DownloadFiles;
typedef struct
{
CString sFileName;
uint64 lFileSize;
uint32 nFileTransferred;
uint64 nFileAllTimeTransferred;
uint16 nFileRequests;
uint32 nFileAllTimeRequests;
uint16 nFileAccepts;
uint32 nFileAllTimeAccepts;
uint8 nFilePriority;
CString sFilePriority;
bool bFileAutoPriority;
CString sFileHash;
CString sED2kLink;
} SharedFiles;
typedef enum
{
DOWN_SORT_NAME,
DOWN_SORT_SIZE,
DOWN_SORT_TRANSFERRED,
DOWN_SORT_SPEED,
DOWN_SORT_PROGRESS
} DownloadSort;
typedef enum
{
SHARED_SORT_NAME,
SHARED_SORT_SIZE,
SHARED_SORT_TRANSFERRED,
SHARED_SORT_ALL_TIME_TRANSFERRED,
SHARED_SORT_REQUESTS,
SHARED_SORT_ALL_TIME_REQUESTS,
SHARED_SORT_ACCEPTS,
SHARED_SORT_ALL_TIME_ACCEPTS,
SHARED_SORT_PRIORITY
} SharedSort;
typedef struct
{
CString sServerName;
CString sServerDescription;
int nServerPort;
CString sServerIP;
int nServerUsers;
int nServerMaxUsers;
int nServerFiles;
} ServerEntry;
typedef enum
{
SERVER_SORT_NAME,
SERVER_SORT_DESCRIPTION,
SERVER_SORT_IP,
SERVER_SORT_USERS,
SERVER_SORT_FILES
} ServerSort;
typedef struct
{
uint32 nUsers;
DownloadSort DownloadSort;
bool bDownloadSortReverse;
ServerSort ServerSort;
bool bServerSortReverse;
SharedSort SharedSort;
bool bSharedSortReverse;
bool bShowUploadQueue;
CArray<UpDown, UpDown> PointsForWeb;
CArray<Session, Session> Sessions;
} GlobalParams;
typedef struct
{
CString sURL;
void *pThis;
CWebSocket *pSocket;
} ThreadData;
typedef struct
{
CString sHeader;
CString sHeaderMetaRefresh;
CString sHeaderStylesheet;
CString sFooter;
CString sServerList;
CString sServerLine;
CString sTransferImages;
CString sTransferList;
CString sTransferDownHeader;
CString sTransferDownFooter;
CString sTransferDownLine;
CString sTransferDownLineGood;
CString sTransferUpHeader;
CString sTransferUpFooter;
CString sTransferUpLine;
CString sTransferUpQueueShow;
CString sTransferUpQueueHide;
CString sTransferUpQueueLine;
CString sTransferBadLink;
CString sDownloadLink;
CString sSharedList;
CString sSharedLine;
CString sSharedLineChanged;
CString sGraphs;
CString sLog;
CString sServerInfo;
CString sDebugLog;
CString sStats;
CString sPreferences;
CString sLogin;
CString sConnectedServer;
CString sAddServerBox;
CString sWebSearch;
CString sResDir;
uint16 iProgressbarWidth;
} WebTemplates;
class CWebServer
{
friend class CWebSocket;
public:
CWebServer(void);
~CWebServer(void);
void StartServer(void);
void AddStatsLine(UpDown line);
void ReloadTemplates();
protected:
static void ProcessURL(ThreadData);
private:
static CString _GetHeader(ThreadData, long lSession);
static CString _GetFooter(ThreadData);
static CString _GetServerList(ThreadData);
static CString _GetTransferList(ThreadData);
static CString _GetDownloadLink(ThreadData);
static CString _GetSharedFilesList(ThreadData);
static CString _GetGraphs(ThreadData);
static CString _GetLog(ThreadData);
static CString _GetServerInfo(ThreadData);
static CString _GetDebugLog(ThreadData);
static CString _GetStats(ThreadData);
static CString _GetPreferences(ThreadData);
static CString _GetLoginScreen(ThreadData);
static CString _GetConnectedServer(ThreadData);
static CString _GetAddServerBox(ThreadData Data);
static void _RemoveServer(CString sIP);
static CString _GetWebSearch(ThreadData Data);
static CString _ParseURL(CString URL, CString fieldname);
static void _ConnectToServer(CString sIP);
static bool _IsLoggedIn(ThreadData Data, long lSession);
static bool _RemoveSession(ThreadData Data, long lSession);
static bool _GetFileHash(CString sHash, uchar *FileHash);
static CString _SpecialChars(CString str);
static CString _GetPlainResString(UINT nID, bool noquote = false);
static int _GzipCompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
static void _SetSharedFilePriority(CString hash, uint8 priority);
static CString _GetWebCharSet();
CString _LoadTemplate(CString sAll, CString sTemplateName);
static Session GetSessionByID(ThreadData Data,long sessionID);
static bool IsSessionAdmin(ThreadData Data,CString SsessionID);
static CString GetPermissionDenied();
static CString _GetDownloadGraph(ThreadData Data,CString filehash);
// Common data
GlobalParams m_Params;
WebTemplates m_Templates;
bool m_bServerWorking;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -