📄 webserver.cpp
字号:
findLength = fieldname.GetLength() + 1;
}
if (Parameter.Find("&" + fieldname + "=") > -1) {
findPos = Parameter.Find("&" + fieldname + "=");
findLength = fieldname.GetLength() + 2;
}
if (findPos > -1) {
Parameter = Parameter.Mid(findPos + findLength, Parameter.GetLength());
if (Parameter.Find("&") > -1) {
Parameter = Parameter.Mid(0, Parameter.Find("&"));
}
value = Parameter;
// decode value ...
value.Replace("+", " ");
for (i = 0 ; i <= 255 ; i++) {
sprintf(fromReplace, "%%%02x", i);
toReplace[0] = (char)i;
toReplace[1] = NULL;
value.Replace(fromReplace, toReplace);
sprintf(fromReplace, "%%%02X", i);
value.Replace(fromReplace, toReplace);
}
}
}
return value;
}
CString CWebServer::_GetHeader(ThreadData Data, long lSession)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return "";
CString sSession; sSession.Format("%ld", lSession);
CString Out = pThis->m_Templates.sHeader;
Out.Replace("[CharSet]", _GetWebCharSet());
if(theApp.glob_prefs->GetWebPageRefresh() != 0)
{
CString sPage = _ParseURL(Data.sURL, "w");
if ((sPage == "transfer") ||
(sPage == "server") ||
(sPage == "graphs") ||
(sPage == "log") ||
(sPage == "sinfo") ||
(sPage == "debuglog") ||
(sPage == "stats"))
{
CString sT = pThis->m_Templates.sHeaderMetaRefresh;
CString sRefresh; sRefresh.Format("%d", theApp.glob_prefs->GetWebPageRefresh());
sT.Replace("[RefreshVal]", sRefresh);
sT.Replace("[wCommand]", _ParseURL(Data.sURL, "w"));
Out.Replace("[HeaderMeta]", sT);
}
}
Out.Replace("[Session]", sSession);
Out.Replace("[HeaderMeta]", ""); // In case there are no meta
Out.Replace("[eMuleAppName]", "eMule");
Out.Replace("[version]", CURRENT_VERSION_LONG);
Out.Replace("[StyleSheet]", pThis->m_Templates.sHeaderStylesheet);
Out.Replace("[WebControl]", _GetPlainResString(IDS_WEB_CONTROL));
Out.Replace("[Transfer]", _GetPlainResString(IDS_CD_TRANS));
Out.Replace("[Server]", _GetPlainResString(IDS_SV_SERVERLIST));
Out.Replace("[Shared]", _GetPlainResString(IDS_SHAREDFILES));
Out.Replace("[Download]", _GetPlainResString(IDS_SW_LINK));
Out.Replace("[Graphs]", _GetPlainResString(IDS_GRAPHS));
Out.Replace("[Log]", _GetPlainResString(IDS_SV_LOG));
Out.Replace("[ServerInfo]", _GetPlainResString(IDS_SV_SERVERINFO));
Out.Replace("[DebugLog]", _GetPlainResString(IDS_SV_DEBUGLOG));
Out.Replace("[Stats]", _GetPlainResString(IDS_SF_STATISTICS));
Out.Replace("[Options]", _GetPlainResString(IDS_EM_PREFS));
Out.Replace("[Logout]", _GetPlainResString(IDS_WEB_LOGOUT));
char HTTPTempC[100] = "";
CString sConnected = "";
if (theApp.serverconnect->IsConnected())
{
if(!theApp.serverconnect->IsLowID())
sConnected = _GetPlainResString(IDS_CONNECTED);
else
sConnected = _GetPlainResString(IDS_CONNECTED) + " (" + _GetPlainResString(IDS_IDLOW) + ")";
CServer* cur_server = theApp.serverconnect->GetCurrentServer();
sConnected += ": " + CString(cur_server->GetListName());
sprintf(HTTPTempC, "%i ", cur_server->GetUsers());
sConnected += " [" + CString(HTTPTempC) + _GetPlainResString(IDS_LUSERS) + "]";
}
else if (theApp.serverconnect->IsConnecting())
{
sConnected = _GetPlainResString(IDS_CONNECTING);
}
else
{
sConnected = _GetPlainResString(IDS_DISCONNECTED);
if (IsSessionAdmin(Data,sSession)) sConnected+=" (<small><a href=\"/?ses=" + sSession + "&w=server&c=connect\">"+_GetPlainResString(IDS_CONNECTTOANYSERVER)+"</a></small>)";
}
Out.Replace("[Connected]", "<b>"+_GetPlainResString(IDS_PW_CONNECTION)+":</b> "+sConnected);
sprintf(HTTPTempC, _GetPlainResString(IDS_UPDOWNSMALL),(float)theApp.uploadqueue->GetDatarate()/1024,(float)theApp.downloadqueue->GetDatarate()/1024);
CString sLimits;
// EC 25-12-2003
CString MaxUpload;
CString MaxDownload;
MaxUpload.Format("%i",theApp.glob_prefs->GetMaxUpload());
MaxDownload.Format("%i",theApp.glob_prefs->GetMaxDownload());
if (MaxUpload == "65535") MaxUpload = GetResString(IDS_PW_UNLIMITED);
if (MaxDownload == "65535") MaxDownload = GetResString(IDS_PW_UNLIMITED);
sLimits.Format("%s/%s", MaxUpload, MaxDownload);
// EC Ends
Out.Replace("[Speed]", "<b>"+_GetPlainResString(IDS_DL_SPEED)+":</b> "+CString(HTTPTempC) + "<small> (" + _GetPlainResString(IDS_PW_CON_LIMITFRM) + ": " + sLimits + ")</small>");
return Out;
}
CString CWebServer::_GetFooter(ThreadData Data)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return "";
return pThis->m_Templates.sFooter;
}
CString CWebServer::_GetServerList(ThreadData Data)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return "";
CString sSession = _ParseURL(Data.sURL, "ses");
CString sAddServerBox = "";
CString sCmd = _ParseURL(Data.sURL, "c");
if (sCmd == "connect" && IsSessionAdmin(Data,sSession) )
{
CString sIP = _ParseURL(Data.sURL, "ip");
if(sIP.IsEmpty())
theApp.emuledlg->SendMessage(WM_COMMAND, MP_CONNECT);
else
_ConnectToServer(sIP);
}
else if (sCmd == "disconnect" && IsSessionAdmin(Data,sSession))
{
theApp.emuledlg->SendMessage(WM_COMMAND, MP_DISCONNECT);
}
else if (sCmd == "remove" && IsSessionAdmin(Data,sSession))
{
CString sIP = _ParseURL(Data.sURL, "ip");
if(!sIP.IsEmpty())
_RemoveServer(sIP);
}
else if (sCmd == "options")
{
sAddServerBox = _GetAddServerBox(Data);
}
CString sSort = _ParseURL(Data.sURL, "sort");
if (sSort != "")
{
if(sSort == "name")
pThis->m_Params.ServerSort = SERVER_SORT_NAME;
else
if(sSort == "description")
pThis->m_Params.ServerSort = SERVER_SORT_DESCRIPTION;
else
if(sSort == "ip")
pThis->m_Params.ServerSort = SERVER_SORT_IP;
else
if(sSort == "users")
pThis->m_Params.ServerSort = SERVER_SORT_USERS;
else
if(sSort == "files")
pThis->m_Params.ServerSort = SERVER_SORT_FILES;
if(_ParseURL(Data.sURL, "sortreverse") == "")
pThis->m_Params.bServerSortReverse = false;
}
if (_ParseURL(Data.sURL, "sortreverse") != "")
{
pThis->m_Params.bServerSortReverse = (_ParseURL(Data.sURL, "sortreverse") == "true");
}
CString sServerSortRev;
if(pThis->m_Params.bServerSortReverse)
sServerSortRev = "false";
else
sServerSortRev = "true";
CString Out = pThis->m_Templates.sServerList;
Out.Replace("[ConnectedServerData]", _GetConnectedServer(Data));
Out.Replace("[AddServerBox]", sAddServerBox);
Out.Replace("[Session]", sSession);
if(pThis->m_Params.ServerSort == SERVER_SORT_NAME)
Out.Replace("[SortName]", "&sortreverse=" + sServerSortRev);
else
Out.Replace("[SortName]", "");
if(pThis->m_Params.ServerSort == SERVER_SORT_DESCRIPTION)
Out.Replace("[SortDescription]", "&sortreverse=" + sServerSortRev);
else
Out.Replace("[SortDescription]", "");
if(pThis->m_Params.ServerSort == SERVER_SORT_IP)
Out.Replace("[SortIP]", "&sortreverse=" + sServerSortRev);
else
Out.Replace("[SortIP]", "");
if(pThis->m_Params.ServerSort == SERVER_SORT_USERS)
Out.Replace("[SortUsers]", "&sortreverse=" + sServerSortRev);
else
Out.Replace("[SortUsers]", "");
if(pThis->m_Params.ServerSort == SERVER_SORT_FILES)
Out.Replace("[SortFiles]", "&sortreverse=" + sServerSortRev);
else
Out.Replace("[SortFiles]", "");
Out.Replace("[ServerList]", _GetPlainResString(IDS_SV_SERVERLIST));
Out.Replace("[Servername]", _GetPlainResString(IDS_SL_SERVERNAME));
Out.Replace("[Description]", _GetPlainResString(IDS_DESCRIPTION));
Out.Replace("[Address]", _GetPlainResString(IDS_IP));
Out.Replace("[Connect]", _GetPlainResString(IDS_IRC_CONNECT));
Out.Replace("[Users]", _GetPlainResString(IDS_LUSERS));
Out.Replace("[Files]", _GetPlainResString(IDS_LFILES));
Out.Replace("[Actions]", _GetPlainResString(IDS_WEB_ACTIONS));
CString OutE = pThis->m_Templates.sServerLine;
OutE.Replace("[Connect]", _GetPlainResString(IDS_IRC_CONNECT));
OutE.Replace("[RemoveServer]", _GetPlainResString(IDS_REMOVETHIS));
OutE.Replace("[ConfirmRemove]", _GetPlainResString(IDS_WEB_CONFIRM_REMOVE_SERVER));
CArray<ServerEntry, ServerEntry> ServerArray;
// Populating array
for (uint32 sc=0;sc<theApp.serverlist->GetServerCount();sc++)
{
CServer* cur_file = theApp.serverlist->GetServerAt(sc);
ServerEntry Entry;
Entry.sServerName = _SpecialChars(cur_file->GetListName());
Entry.sServerDescription = _SpecialChars(cur_file->GetDescription());
Entry.nServerPort = cur_file->GetPort();
Entry.sServerIP = cur_file->GetAddress();
Entry.nServerUsers = cur_file->GetUsers();
Entry.nServerMaxUsers = cur_file->GetMaxUsers();
Entry.nServerFiles = cur_file->GetFiles();
ServerArray.Add(Entry);
}
// Sorting (simple bubble sort, we don't have tons of data here)
bool bSorted = true;
for(int nMax = 0;bSorted && nMax < ServerArray.GetCount()*2; nMax++)
{
bSorted = false;
for(int i = 0; i < ServerArray.GetCount() - 1; i++)
{
bool bSwap = false;
switch(pThis->m_Params.ServerSort)
{
case SERVER_SORT_NAME:
bSwap = ServerArray[i].sServerName.CompareNoCase(ServerArray[i+1].sServerName) > 0;
break;
case SERVER_SORT_DESCRIPTION:
bSwap = ServerArray[i].sServerDescription.CompareNoCase(ServerArray[i+1].sServerDescription) < 0;
break;
case SERVER_SORT_IP:
bSwap = ServerArray[i].sServerIP.CompareNoCase(ServerArray[i+1].sServerIP) > 0;
break;
case SERVER_SORT_USERS:
bSwap = ServerArray[i].nServerUsers < ServerArray[i+1].nServerUsers;
break;
case SERVER_SORT_FILES:
bSwap = ServerArray[i].nServerFiles < ServerArray[i+1].nServerFiles;
break;
}
if(pThis->m_Params.bServerSortReverse)
{
bSwap = !bSwap;
}
if(bSwap)
{
bSorted = true;
ServerEntry TmpEntry = ServerArray[i];
ServerArray[i] = ServerArray[i+1];
ServerArray[i+1] = TmpEntry;
}
}
}
// Displaying
CString sList = "";
for(int i = 0; i < ServerArray.GetCount(); i++)
{
CString HTTPProcessData = OutE; // Copy Entry Line to Temp
HTTPProcessData.Replace("[1]", ServerArray[i].sServerName);
HTTPProcessData.Replace("[2]", ServerArray[i].sServerDescription);
CString sPort; sPort.Format(":%d", ServerArray[i].nServerPort);
HTTPProcessData.Replace("[3]", ServerArray[i].sServerIP + sPort);
CString sT;
if(ServerArray[i].nServerUsers > 0)
{
if(ServerArray[i].nServerMaxUsers > 0)
sT.Format("%d (%d)", ServerArray[i].nServerUsers, ServerArray[i].nServerMaxUsers);
else
sT.Format("%d", ServerArray[i].nServerUsers);
}
HTTPProcessData.Replace("[4]", sT);
sT = "";
if(ServerArray[i].nServerFiles > 0)
sT.Format("%d", ServerArray[i].nServerFiles);
HTTPProcessData.Replace("[5]", sT);
HTTPProcessData.Replace("[6]", IsSessionAdmin(Data,sSession)? CString("/?ses=" + sSession + "&w=server&c=connect&ip=" + ServerArray[i].sServerIP):GetPermissionDenied());
HTTPProcessData.Replace("[LinkRemove]", IsSessionAdmin(Data,sSession)?CString("/?ses=" + sSession + "&w=server&c=remove&ip=" + ServerArray[i].sServerIP):GetPermissionDenied());
sList += HTTPProcessData;
}
Out.Replace("[ServersList]", sList);
return Out;
}
CString CWebServer::_GetTransferList(ThreadData Data)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return "";
CString sSession = _ParseURL(Data.sURL, "ses");
CString Out = "";
if (_ParseURL(Data.sURL, "c") != "" && IsSessionAdmin(Data,sSession))
{
CString HTTPTemp = _ParseURL(Data.sURL, "c");
if (HTTPTemp.Right(1) != "/")
HTTPTemp += "/";
try
{
CED2KLink* pLink = CED2KLink::CreateLinkFromUrl(HTTPTemp);
_ASSERT( pLink !=0 );
if (pLink->GetKind() == CED2KLink::kFile)
theApp.downloadqueue->AddFileLinkToDownload(pLink->GetFileLink());
else
throw CString("bad link");
delete pLink;
}
catch(CString error)
{
char HTTPTempC[100] = "";
sprintf(HTTPTempC,_GetPlainResString(IDS_ERR_INVALIDLINK),error.GetBuffer());
Out += pThis->m_Templates.sTransferBadLink;
Out.Replace("[InvalidLink]", HTTPTempC);
Out.Replace("[Link]", HTTPTemp);
}
}
if (_ParseURL(Data.sURL, "op") != "" &&
_ParseURL(Data.sURL, "file") != "")
{
uchar FileHash[16];
_GetFileHash(_ParseURL(Data.sURL, "file"), FileHash);
CPartFile* found_file = NULL;
for (int fx=0;fx<theApp.downloadqueue->GetFileCount();fx++)
{
CPartFile* cur_file = theApp.downloadqueue->GetFileByIndex(fx);
bool bGood = true;
for(int i = 0; i < 16; i++)
{
if(cur_file->GetFileHash()[i] != FileHash[i])
{
bGood = false;
break;
}
}
if(bGood)
{
found_file = cur_file;
break;
}
}
if(_ParseURL(Data.sURL, "op") == "pause" && IsSessionAdmin(Data,sSession))
{
if(found_file)
found_file->PauseFile();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -