⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webserver.cpp

📁 非常出名开源客户端下载的程序emule
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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 + -