📄 webserver.cpp
字号:
else
{
sConnected = _GetPlainResString(IDS_DISCONNECTED);
if (IsSessionAdmin(Data,sSession)) sConnected+=_T(" (<small><a href=\"?ses=") + sSession + _T("&w=server&c=connect\">")+_GetPlainResString(IDS_CONNECTTOANYSERVER)+_T("</a></small>)");
}
Out.Replace(_T("[Connected]"), _T("<b>")+_GetPlainResString(IDS_PW_CONNECTION)+_T(":</b> ")+sConnected);
_stprintf(HTTPTempC, _GetPlainResString(IDS_UPDOWNSMALL),(float)theApp.uploadqueue->GetDatarate()/1024,(float)theApp.downloadqueue->GetDatarate()/1024);
// EC 25-12-2003
CString MaxUpload;
CString MaxDownload;
MaxUpload.Format(_T("%i"),thePrefs.GetMaxUpload());
MaxDownload.Format(_T("%i"),thePrefs.GetMaxDownload());
if (MaxUpload == _T("65535")) MaxUpload = GetResString(IDS_PW_UNLIMITED);
if (MaxDownload == _T("65535")) MaxDownload = GetResString(IDS_PW_UNLIMITED);
buffer.Format(_T("%s/%s"), MaxUpload, MaxDownload);
// EC Ends
Out.Replace(_T("[Speed]"), _T("<b>")+_GetPlainResString(IDS_DL_SPEED)+_T(":</b> ")+CString(HTTPTempC) + _T("<small> (") + _GetPlainResString(IDS_PW_CON_LIMITFRM) + _T(": ") + buffer + _T(")</small>"));
buffer=GetResString(IDS_KADEMLIA)+_T(": ");
if (!thePrefs.GetNetworkKademlia()) {
buffer.Append(GetResString(IDS_DISABLED));
}
else if ( !Kademlia::CKademlia::isRunning() ) {
buffer.Append(GetResString(IDS_DISCONNECTED));
if (IsSessionAdmin(Data,sSession))
buffer+=_T(" (<small><a href=\"?ses=") + sSession + _T("&w=kad&c=connect\">")+_GetPlainResString(IDS_MAIN_BTN_CONNECT)+_T("</a></small>)");
}
else if ( Kademlia::CKademlia::isRunning() && !Kademlia::CKademlia::isConnected() ) {
buffer.Append(GetResString(IDS_CONNECTING));
if (IsSessionAdmin(Data,sSession))
buffer+=_T(" (<small><a href=\"?ses=") + sSession + _T("&w=kad&c=disconnect\">")+_GetPlainResString(IDS_MAIN_BTN_DISCONNECT)+_T("</a></small>)");
}
else if (Kademlia::CKademlia::isFirewalled()) {
buffer.Append(GetResString(IDS_FIREWALLED));
if (IsSessionAdmin(Data,sSession))
buffer+=_T(" (<small><a href=\"?ses=") + sSession + _T("&w=kad&c=disconnect\">")+_GetPlainResString(IDS_IRC_DISCONNECT)+_T("</a></small>)");
}
else if (Kademlia::CKademlia::isConnected()) {
buffer.Append(GetResString(IDS_CONNECTED));
if (IsSessionAdmin(Data,sSession))
buffer+=_T(" (<small><a href=\"?ses=") + sSession + _T("&w=kad&c=disconnect\">")+_GetPlainResString(IDS_IRC_DISCONNECT)+_T("</a></small>)");
}
Out.Replace(_T("[KademliaInfo]"),buffer);
return Out;
}
CString CWebServer::_GetFooter(ThreadData Data)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return _T("");
return pThis->m_Templates.sFooter;
}
CString CWebServer::_GetServerList(ThreadData Data)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return _T("");
CString sSession = _ParseURL(Data.sURL, _T("ses"));
CString sAddServerBox = _T("");
CString sCmd = _ParseURL(Data.sURL, _T("c"));
if (sCmd == _T("connect") && IsSessionAdmin(Data,sSession) )
{
_ConnectToServer(_ParseURL(Data.sURL, _T("ip")),_tstoi(_ParseURL(Data.sURL, _T("port"))));
}
else if (sCmd == _T("disconnect") && IsSessionAdmin(Data,sSession))
{
theApp.emuledlg->SendMessage(WEB_DISCONNECT_SERVER, NULL);
}
else if (sCmd == _T("remove") && IsSessionAdmin(Data,sSession))
{
CString sIP = _ParseURL(Data.sURL, _T("ip"));
int nPort = _tstoi(_ParseURL(Data.sURL, _T("port")));
if(!sIP.IsEmpty())
_RemoveServer(sIP,nPort);
}
else if (sCmd == _T("options"))
{
sAddServerBox = _GetAddServerBox(Data);
}
CString sSort = _ParseURL(Data.sURL, _T("sort"));
if (sSort != _T(""))
{
if(sSort == _T("name"))
pThis->m_Params.ServerSort = SERVER_SORT_NAME;
else
if(sSort == _T("description"))
pThis->m_Params.ServerSort = SERVER_SORT_DESCRIPTION;
else
if(sSort == _T("ip"))
pThis->m_Params.ServerSort = SERVER_SORT_IP;
else
if(sSort == _T("users"))
pThis->m_Params.ServerSort = SERVER_SORT_USERS;
else
if(sSort == _T("files"))
pThis->m_Params.ServerSort = SERVER_SORT_FILES;
if(_ParseURL(Data.sURL, _T("sortreverse")) == _T(""))
pThis->m_Params.bServerSortReverse = false;
}
if (_ParseURL(Data.sURL, _T("sortreverse")) != _T(""))
{
pThis->m_Params.bServerSortReverse = (_ParseURL(Data.sURL, _T("sortreverse")) == _T("true"));
}
CString sServerSortRev;
if(pThis->m_Params.bServerSortReverse)
sServerSortRev = _T("false");
else
sServerSortRev = _T("true");
CString Out = pThis->m_Templates.sServerList;
Out.Replace(_T("[ConnectedServerData]"), _GetConnectedServer(Data));
Out.Replace(_T("[AddServerBox]"), sAddServerBox);
Out.Replace(_T("[Session]"), sSession);
if(pThis->m_Params.ServerSort == SERVER_SORT_NAME)
Out.Replace(_T("[SortName]"), _T("&sortreverse=") + sServerSortRev);
else
Out.Replace(_T("[SortName]"), _T(""));
if(pThis->m_Params.ServerSort == SERVER_SORT_DESCRIPTION)
Out.Replace(_T("[SortDescription]"), _T("&sortreverse=") + sServerSortRev);
else
Out.Replace(_T("[SortDescription]"), _T(""));
if(pThis->m_Params.ServerSort == SERVER_SORT_IP)
Out.Replace(_T("[SortIP]"), _T("&sortreverse=") + sServerSortRev);
else
Out.Replace(_T("[SortIP]"), _T(""));
if(pThis->m_Params.ServerSort == SERVER_SORT_USERS)
Out.Replace(_T("[SortUsers]"), _T("&sortreverse=") + sServerSortRev);
else
Out.Replace(_T("[SortUsers]"), _T(""));
if(pThis->m_Params.ServerSort == SERVER_SORT_FILES)
Out.Replace(_T("[SortFiles]"), _T("&sortreverse=") + sServerSortRev);
else
Out.Replace(_T("[SortFiles]"), _T(""));
CString sortimg;
if (pThis->m_Params.bServerSortReverse) sortimg=_T("<img src=\"l_up.gif\">");
else sortimg=_T("<img src=\"l_down.gif\">");
Out.Replace(_T("[ServerList]"), _GetPlainResString(IDS_SV_SERVERLIST));
Out.Replace(_T("[Servername]"), _GetPlainResString(IDS_SL_SERVERNAME)+CString((pThis->m_Params.ServerSort==SERVER_SORT_NAME)?sortimg:_T("")));
Out.Replace(_T("[Description]"), _GetPlainResString(IDS_DESCRIPTION)+CString((pThis->m_Params.ServerSort==SERVER_SORT_DESCRIPTION)?sortimg:_T("")));
Out.Replace(_T("[Address]"), _GetPlainResString(IDS_IP)+CString((pThis->m_Params.ServerSort==SERVER_SORT_IP)?sortimg:_T("")));
Out.Replace(_T("[Connect]"), _GetPlainResString(IDS_IRC_CONNECT));
Out.Replace(_T("[Users]"), _GetPlainResString(IDS_LUSERS)+CString((pThis->m_Params.ServerSort==SERVER_SORT_USERS)?sortimg:_T("")));
Out.Replace(_T("[Files]"), _GetPlainResString(IDS_LFILES)+CString((pThis->m_Params.ServerSort==SERVER_SORT_FILES)?sortimg:_T("")));
Out.Replace(_T("[Actions]"), _GetPlainResString(IDS_WEB_ACTIONS));
CString OutE = pThis->m_Templates.sServerLine;
OutE.Replace(_T("[Connect]"), _GetPlainResString(IDS_IRC_CONNECT));
OutE.Replace(_T("[RemoveServer]"), _GetPlainResString(IDS_REMOVETHIS));
OutE.Replace(_T("[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 = _T("");
for(int i = 0; i < ServerArray.GetCount(); i++)
{
CString HTTPProcessData = OutE; // Copy Entry Line to Temp
HTTPProcessData.Replace(_T("[1]"), ServerArray[i].sServerName);
HTTPProcessData.Replace(_T("[2]"), ServerArray[i].sServerDescription);
CString sPort; sPort.Format(_T(":%d"), ServerArray[i].nServerPort);
HTTPProcessData.Replace(_T("[3]"), ServerArray[i].sServerIP + sPort);
CString sT;
if(ServerArray[i].nServerUsers > 0)
{
if(ServerArray[i].nServerMaxUsers > 0)
sT.Format(_T("%d (%d)"), ServerArray[i].nServerUsers, ServerArray[i].nServerMaxUsers);
else
sT.Format(_T("%d"), ServerArray[i].nServerUsers);
}
HTTPProcessData.Replace(_T("[4]"), sT);
sT = _T("");
if(ServerArray[i].nServerFiles > 0)
sT.Format(_T("%d"), ServerArray[i].nServerFiles);
HTTPProcessData.Replace(_T("[5]"), sT);
CString sServerPort; sServerPort.Format(_T("%d"), ServerArray[i].nServerPort);
HTTPProcessData.Replace(_T("[6]"), IsSessionAdmin(Data,sSession)? CString(_T("?ses=") + sSession + _T("&w=server&c=connect&ip=") + ServerArray[i].sServerIP+_T("&port=")+sServerPort):GetPermissionDenied());
HTTPProcessData.Replace(_T("[LinkRemove]"), IsSessionAdmin(Data,sSession)?CString(_T("?ses=") + sSession + _T("&w=server&c=remove&ip=") + ServerArray[i].sServerIP+_T("&port=")+sServerPort):GetPermissionDenied());
sList += HTTPProcessData;
}
Out.Replace(_T("[ServersList]"), sList);
return Out;
}
CString CWebServer::_GetTransferList(ThreadData Data)
{
CWebServer *pThis = (CWebServer *)Data.pThis;
if(pThis == NULL)
return _T("");
CString sSession = _ParseURL(Data.sURL, _T("ses"));
int cat=_tstoi(_ParseURL(Data.sURL,_T("cat")));
bool clcompl=(_ParseURL(Data.sURL,_T("ClCompl"))==_T("yes") );
CString sCat; (cat!=0)?sCat.Format(_T("&cat=%i"),cat):sCat=_T("");
CString Out = _T("");
if (clcompl && IsSessionAdmin(Data,sSession))
theApp.emuledlg->transferwnd->downloadlistctrl.ClearCompleted(true);
if (_ParseURL(Data.sURL, _T("c")) != _T("") && IsSessionAdmin(Data,sSession))
{
CString HTTPTemp = _ParseURL(Data.sURL, _T("c"));
theApp.AddEd2kLinksToDownload(HTTPTemp,cat);
}
if (_ParseURL(Data.sURL, _T("op")) != _T("") &&
_ParseURL(Data.sURL, _T("file")) != _T(""))
{
uchar FileHash[16];
_GetFileHash(_ParseURL(Data.sURL, _T("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, _T("op")) == _T("pause") && IsSessionAdmin(Data,sSession))
{
if(found_file)
found_file->PauseFile();
}
else if(_ParseURL(Data.sURL, _T("op")) == _T("resume") && IsSessionAdmin(Data,sSession))
{
if(found_file)
found_file->ResumeFile();
}
else if(_ParseURL(Data.sURL, _T("op")) == _T("cancel") && IsSessionAdmin(Data,sSession))
{
if(found_file)
found_file->DeleteFile();
}
else if(_ParseURL(Data.sURL, _T("op")) == _T("prioup") && IsSessionAdmin(Data,sSession))
{
if(found_file) {
if (!found_file->IsAutoDownPriority())
switch (found_file->GetDownPriority()) {
case PR_LOW: found_file->SetAutoDownPriority(false); found_file->SetDownPriority(PR_NORMAL);break;
case PR_NORMAL: found_file->SetAutoDownPriority(false); found_file->SetDownPriority(PR_HIGH);break;
case PR_HIGH: found_file->SetAutoDownPriority(true); found_file->SetDownPriority(PR_HIGH);break;
}
else {found_file->SetAutoDownPriority(false); found_file->SetDownPriority(PR_LOW);}
}
}
else if(_ParseURL(Data.sURL, _T("op")) == _T("priodown") && IsSessionAdmin(Data,sSession))
{
if(found_file) {
if (!found_file->IsAutoDownPriority())
switch (found_file->GetDownPriority()) {
case PR_LOW: found_file->SetAutoDownPriority(true); found_file->SetDownPriority(PR_HIGH);break;
case PR_NORMAL: found_file->SetAutoDownPriority(false); found_file->SetDownPriority(PR_LOW);break;
case PR_HIGH: found_file->SetAutoDownPriority(false); found_file->SetDownPriority(PR_NORMAL);break;
}
else {found_file->SetAutoDownPriority(false); found_file->SetDownPriority(PR_HIGH);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -