Exemplo n.º 1
0
CIncrementalPlot::CIncrementalPlot(const QColor& Back, const QColor& Front, const QColor& Grid, const QString& yAxis, EUnits eUnits, QWidget *parent)
:QWidget(parent)
{
	m_bReplotPending = false;
	m_iLimit = HR2S(1);

	m_pMainLayout = new QVBoxLayout();
	m_pMainLayout->setMargin(0);

	m_pChart = new QwtPlot();

	m_pMainLayout->addWidget(m_pChart);

	setLayout(m_pMainLayout);

	m_pChart->setStyleSheet(QString("color: rgb(%1, %2, %3); background-color: rgb(%4, %5, %6);")
		.arg(Front.red()).arg(Front.green()).arg(Front.blue())
		.arg(Back.red()).arg(Back.green()).arg(Back.blue()));

	QFont smallerFont(QApplication::font());
	m_pChart->setAxisScaleDraw(QwtPlot::xBottom, new CDateScale);
	switch(eUnits)
	{
	case eBytes: m_pChart->setAxisScaleDraw(QwtPlot::yLeft, new CRateScale);
	}
	m_pChart->setAxisFont(QwtPlot::yLeft,smallerFont);
	m_pChart->setAxisFont(QwtPlot::xBottom,smallerFont);

	m_pChart->plotLayout()->setAlignCanvasToScales(true);

	QwtLegendEx* pLegend = new QwtLegendEx;
	pLegend->setStyleSheet(QString("color: rgb(%1, %2, %3);")
		.arg(Front.red()).arg(Front.green()).arg(Front.blue()));
	m_pChart->insertLegend(pLegend, QwtPlot::BottomLegend);

	QwtPlotGrid *pGrid = new QwtPlotGrid;
	pGrid->setMajorPen(QPen(Grid,0,Qt::DotLine));
	pGrid->attach(m_pChart);

	QwtPlotPanner *pPanner = new QwtPlotPanner(m_pChart->canvas());
	pPanner->setAxisEnabled(QwtPlot::yRight,false);
	pPanner->setAxisEnabled(QwtPlot::xTop,false);
	pPanner->setMouseButton(Qt::MidButton);
	
	m_pChart->setAxisAutoScale(QwtPlot::yLeft);
	m_pChart->setAxisAutoScale(QwtPlot::xBottom);
	m_pChart->setAxisTitle(QwtPlot::yLeft,yAxis);
	//m_pChart->setAxisTitle(QwtPlot::xBottom,tr("Time"));
}
Exemplo n.º 2
0
QMap<QString, CSettings::SSetting> CNeoCore::GetDefaultCoreSettings()
{
	QMap<QString, CSettings::SSetting> Settings;

	// For values with limits is Default, Minimum, Maximum

	Settings.insert("Log/Merge", CSettings::SSetting(true));
	Settings.insert("Log/Store", CSettings::SSetting(false));
	Settings.insert("Log/Limit", CSettings::SSetting(10000,1000,100000));
	Settings.insert("Log/Level", CSettings::SSetting(1)); // 0 basic, 1 normal, 2 verbose

#ifdef _DEBUG
	Settings.insert("Modules/AutoStart",CSettings::SSetting(0));
#else
	Settings.insert("Modules/AutoStart",CSettings::SSetting(1));
#endif
	Settings.insert("Modules/NeoKad",CSettings::SSetting("NeoKad"));
	Settings.insert("Modules/MuleKad",CSettings::SSetting("MuleKad"));

	Settings.insert("Content/SaveInterval", CSettings::SSetting(MIN2S(5)));
	Settings.insert("Content/Temp", CSettings::SSetting(""));
	Settings.insert("Content/Incoming", CSettings::SSetting(""));
	Settings.insert("Content/UnifyedDirs", CSettings::SSetting(0));
	Settings.insert("Content/Shared", CSettings::SSetting(QStringList("")));
	Settings.insert("Content/VerifyTime", CSettings::SSetting(30));
	Settings.insert("Content/VerifySize", CSettings::SSetting(MB2B(5)));
	Settings.insert("Content/CacheLimit", CSettings::SSetting(MB2B(256), MB2B(128), MB2B(1024)));
	Settings.insert("Content/AddPaused", CSettings::SSetting(false));
	Settings.insert("Content/ShareNew", CSettings::SSetting(true));
	//Settings.insert("Content/ShowTemp", CSettings::SSetting(false));
	Settings.insert("Content/MagnetDomain", CSettings::SSetting("http://link.neoloader.to/"));
	Settings.insert("Content/MagnetRetry", CSettings::SSetting(MIN2S(10)));
#ifdef DECODER
	Settings.insert("Content/MagnetTimeLimit", CSettings::SSetting(MIN2S(60)));
	Settings.insert("Content/MagnetVolumeLimit", CSettings::SSetting(15));
	Settings.insert("Content/MagnetAllowDisplay", true);
#endif
	Settings.insert("Content/EndGameVolume", CSettings::SSetting(5,0,10));
	//Settings.insert("Content/AlwaysEndGame", CSettings::SSetting(true));
	Settings.insert("Content/FuseMount", CSettings::SSetting(""));
#ifndef WIN32
    Settings.insert("Content/FuseOptions", CSettings::SSetting("-o|allow_other"));
#endif
	Settings.insert("Content/IgnoreLastModified", CSettings::SSetting(0));
	Settings.insert("Content/ShareRatio", CSettings::SSetting(0)); // 0 means no ratio
	Settings.insert("Content/ShareTime", CSettings::SSetting(0)); // 0 means no limit
	Settings.insert("Content/AutoP2P", CSettings::SSetting(false));
	Settings.insert("Content/PreparePreview", CSettings::SSetting(false));
	Settings.insert("Content/Streamable", CSettings::SSetting("(mp4|m4v|divx|avi|mkv|mov|wmv|asf|mped|mpg|flv)"));
	Settings.insert("Content/FrontLoadSize", CSettings::SSetting(MB2B(8)));
	Settings.insert("Content/BackLoadSize", CSettings::SSetting(MB2B(2)));

	Settings.insert("Content/Preallocation", CSettings::SSetting(MB2B(100)));
	Settings.insert("Content/CalculateHashes", CSettings::SSetting(true));

	Settings.insert("Content/SaveSearch", CSettings::SSetting(true));

#ifdef _DEBUG
	Settings.insert("Other/PreventStandby", CSettings::SSetting(false));
#else
	Settings.insert("Other/PreventStandby", CSettings::SSetting(true));
#endif

	Settings.insert("Bandwidth/Upload", CSettings::SSetting(-1));
	Settings.insert("Bandwidth/Download", CSettings::SSetting(-1));
#ifdef _DEBUG
	Settings.insert("Bandwidth/UseUPnP",CSettings::SSetting(false));
#else
	Settings.insert("Bandwidth/UseUPnP",CSettings::SSetting(true));
#endif
	Settings.insert("Bandwidth/UseIPv6",CSettings::SSetting(false));
	Settings.insert("Bandwidth/DefaultNIC",CSettings::SSetting(""));
	Settings.insert("Bandwidth/WebProxy", CSettings::SSetting(""));
	Settings.insert("Bandwidth/MaxConnections", CSettings::SSetting(2500));
	Settings.insert("Bandwidth/MaxNewPer5Sec", CSettings::SSetting(250));
	Settings.insert("Bandwidth/TransportLimiting", CSettings::SSetting(true));
	Settings.insert("Bandwidth/FrameOverhead", CSettings::SSetting(18));

	Settings.insert("Upload/HistoryDepth", CSettings::SSetting(10,50,100));
	Settings.insert("Upload/UpWaitTime", CSettings::SSetting(HR2S(3),HR2S(1),HR2S(5)));
	Settings.insert("Upload/SlotSpeed", CSettings::SSetting(KB2B(8)));
	//Settings.insert("Upload/SlotFocus", CSettings::SSetting(false));
	Settings.insert("Upload/TrickleVolume", CSettings::SSetting(2));
	Settings.insert("Upload/TrickleSpeed", CSettings::SSetting(KB2B(1)));
	Settings.insert("Upload/DropBlocking", CSettings::SSetting(false));

	Settings.insert("Pinger/MinSpeed", CSettings::SSetting(KB2B(10))); // 10 kb/s
	Settings.insert("Pinger/MaxSpeed", CSettings::SSetting(-1));
	Settings.insert("Pinger/HostsToTrace", CSettings::SSetting(10));
	Settings.insert("Pinger/MaxFails", CSettings::SSetting(60));
	Settings.insert("Pinger/InitialPings", CSettings::SSetting(10));
	Settings.insert("Pinger/ToleranceVal", CSettings::SSetting(""));
	Settings.insert("Pinger/UpDivider", CSettings::SSetting(10));
	Settings.insert("Pinger/DownDivider", CSettings::SSetting(10));
	Settings.insert("Pinger/Average", CSettings::SSetting(3));
	Settings.insert("Pinger/Host", CSettings::SSetting(""));


	Settings.insert("PeerWatch/Enable",CSettings::SSetting(2));
	Settings.insert("PeerWatch/BlockTime", CSettings::SSetting(MIN2S(10),MIN2S(5),MIN2S(60)));
	Settings.insert("PeerWatch/BanTime", CSettings::SSetting(HR2S(2),HR2S(1),HR2S(6)));
	//Settings.insert("PeerWatch/IPFilter",CSettings::SSetting(""));

	Settings.insert("NeoShare/IdleTimeout",CSettings::SSetting(MIN2S(2),MIN2S(1),MIN2S(5)));
	Settings.insert("NeoShare/KeepAlive",CSettings::SSetting(60,30,MIN2S(3)));
	Settings.insert("NeoShare/ConnectTimeout",CSettings::SSetting(20,10,120));
	Settings.insert("NeoShare/RouteTimeout", CSettings::SSetting(MIN2S(5),MIN2S(1),MIN2S(15)));
	Settings.insert("NeoShare/MaxEntities", CSettings::SSetting(250));
	Settings.insert("NeoShare/RequestInterval",CSettings::SSetting(MIN2S(20),MIN2S(10),MIN2S(60)));
	Settings.insert("NeoShare/RequestLimit",CSettings::SSetting(100,10,250));
	Settings.insert("NeoShare/SaveInterval", CSettings::SSetting(MIN2S(5)));
	Settings.insert("NeoShare/SaveEntities",CSettings::SSetting(false));
	Settings.insert("NeoShare/KadPublishmentVolume",CSettings::SSetting(10,5,100));
	Settings.insert("NeoShare/KadLookupVolume",CSettings::SSetting(20,5,100));
	Settings.insert("NeoShare/KadLookupInterval",CSettings::SSetting(MIN2S(20),MIN2S(10),MIN2S(60)));
	Settings.insert("NeoShare/HubCheckoutInterval",CSettings::SSetting(MIN2S(40),MIN2S(20),MIN2S(120)));
	Settings.insert("NeoShare/LoadTreshold", CSettings::SSetting(75,50,100));
	Settings.insert("NeoShare/SaturationLimit", CSettings::SSetting(10,5,20));
	Settings.insert("NeoShare/Enable", CSettings::SSetting(true));
	Settings.insert("NeoShare/Anonymity", CSettings::SSetting(0, 0, 4));
	Settings.insert("NeoShare/Upload", CSettings::SSetting(-1));
	Settings.insert("NeoShare/Download", CSettings::SSetting(-1));
	Settings.insert("NeoShare/Priority", CSettings::SSetting(0));

	Settings.insert("NeoKad/Port", CSettings::SSetting(GetRandomInt(9000, 9999)));
	Settings.insert("NeoKad/TargetID", CSettings::SSetting(""));
	Settings.insert("NeoKad/LastDistance", CSettings::SSetting(0));
	Settings.insert("NeoKad/EntityKey", CSettings::SSetting(""));
	Settings.insert("NeoKad/StoreKey", CSettings::SSetting(""));

	Settings.insert("BitTorrent/Tracking", CSettings::SSetting("All-Tiers")); // "No-Trackers" "One-Tracker" "All-Trackers" "All-Tiers"
	Settings.insert("BitTorrent/MaxPeers", CSettings::SSetting(500, 10, 1000));
	Settings.insert("BitTorrent/ServerPort", CSettings::SSetting(GetRandomInt(6800, 6900)));
	Settings.insert("BitTorrent/AnnounceInterval",CSettings::SSetting(MIN2S(5),MIN2S(1),MIN2S(60)));
	Settings.insert("BitTorrent/AnnounceWanted",CSettings::SSetting(200,1,1000));
	Settings.insert("BitTorrent/ConnectTimeout",CSettings::SSetting(20,10,30));
	Settings.insert("BitTorrent/IdleTimeout",CSettings::SSetting(90,15,320));
	Settings.insert("BitTorrent/KeepAlive",CSettings::SSetting(30,15,60));
	Settings.insert("BitTorrent/RequestTimeout",CSettings::SSetting(60,15,120));
	Settings.insert("BitTorrent/RequestLimit",CSettings::SSetting(250,100,250));
	//Settings.insert("BitTorrent/RetryInterval",CSettings::SSetting(MIN2S(10),MIN2S(1),MIN2S(58)));
	Settings.insert("BitTorrent/Encryption", CSettings::SSetting("Support"));
	Settings.insert("BitTorrent/uTP", CSettings::SSetting(true));
	Settings.insert("BitTorrent/MaxRendezvous", CSettings::SSetting(5,3,10));
	Settings.insert("BitTorrent/CryptTCPPaddingLength",CSettings::SSetting(127,0,511));
	Settings.insert("BitTorrent/EnableTracker",CSettings::SSetting(1)); // 0 off, 1 on, 2 on but only for own torrents
	Settings.insert("BitTorrent/SavePeers",CSettings::SSetting(false));
	Settings.insert("BitTorrent/Enable", CSettings::SSetting(true));
	Settings.insert("BitTorrent/MaxTorrents", CSettings::SSetting(5));
	Settings.insert("BitTorrent/Upload", CSettings::SSetting(-1));
	Settings.insert("BitTorrent/Download", CSettings::SSetting(-1));
	Settings.insert("BitTorrent/Priority", CSettings::SSetting(0));

	Settings.insert("MainlineDHT/NodeID", CSettings::SSetting(""));
	Settings.insert("MainlineDHT/Address", CSettings::SSetting(""));
	Settings.insert("MainlineDHT/RouterNodes", CSettings::SSetting(QString("router.bittorrent.com:6881|router.utorrent.com:6881").split("|")));

	Settings.insert("Ed2kMule/UserHash", CSettings::SSetting(""));
	Settings.insert("Ed2kMule/NickName", CSettings::SSetting("http://neoloader.to"));
	Settings.insert("Ed2kMule/MaxSources", CSettings::SSetting(500, 50, 5000));
	Settings.insert("Ed2kMule/TCPPort", CSettings::SSetting(GetRandomInt(4600, 4700)));
	Settings.insert("Ed2kMule/UDPPort", CSettings::SSetting(GetRandomInt(4700, 4800)));
	Settings.insert("Ed2kMule/CheckFWInterval", CSettings::SSetting(MIN2S(15), MIN2S(10), MIN2S(60)));
	Settings.insert("Ed2kMule/ConnectTimeout",CSettings::SSetting(20,10,30));
	Settings.insert("Ed2kMule/IdleTimeout",CSettings::SSetting(60,15,320));
	Settings.insert("Ed2kMule/IncomingTimeOut",CSettings::SSetting(MIN2S(10),MIN2S(5),MIN2S(60)));
	Settings.insert("Ed2kMule/ReaskInterval",CSettings::SSetting(MIN2S(29),MIN2S(10),MIN2S(58)));
	Settings.insert("Ed2kMule/LanMode", CSettings::SSetting(false));
	Settings.insert("Ed2kMule/Obfuscation", CSettings::SSetting("Support"));
	Settings.insert("Ed2kMule/CryptTCPPaddingLength",CSettings::SSetting(127,0,254));
	Settings.insert("Ed2kMule/NatTraversal", CSettings::SSetting(true));
	Settings.insert("Ed2kMule/KadLookupInterval",CSettings::SSetting(MIN2S(29),MIN2S(10),MIN2S(58)));
	Settings.insert("Ed2kMule/KadMaxLookup",CSettings::SSetting(5,5,50));
	Settings.insert("Ed2kMule/SXInterval",CSettings::SSetting(MIN2S(10),MIN2S(5),MIN2S(40)));
	Settings.insert("Ed2kMule/SXVolume",CSettings::SSetting(20,5,50));
	Settings.insert("Ed2kMule/SaveSources",CSettings::SSetting(false));
	Settings.insert("Ed2kMule/Enable", CSettings::SSetting(true));
	Settings.insert("Ed2kMule/ShareDefault", CSettings::SSetting(false));
	Settings.insert("Ed2kMule/Upload", CSettings::SSetting(-1));
	Settings.insert("Ed2kMule/Download", CSettings::SSetting(-1));
	Settings.insert("Ed2kMule/Priority", CSettings::SSetting(0));
	Settings.insert("Ed2kMule/HashMode", CSettings::SSetting("Random-Secure")); // Random, Static, Random-Secure, Static-Secure
	Settings.insert("Ed2kMule/SUIKey", CSettings::SSetting(""));
	Settings.insert("Ed2kMule/HashAge", CSettings::SSetting(""));
	Settings.insert("Ed2kMule/UseServers", CSettings::SSetting("Static")); // None, Custom, Static, One, Booth
	Settings.insert("Ed2kMule/StaticServers", CSettings::SSetting(QString("ed2k://|server|91.200.42.46|1176|/\r\ned2k://|server|91.200.42.47|3883|/\r\ned2k://|server|91.200.42.119|9939|/\r\ned2k://|server|176.103.48.36|4184|/\r\ned2k://|server|77.120.115.66|5041|/\r\ned2k://|server|46.105.126.71|4661|/").split("\r\n")));
	Settings.insert("Ed2kMule/KeepServers",CSettings::SSetting(MIN2S(10),MIN2S(5),MIN2S(58)));
	Settings.insert("Ed2kMule/MinHordeSlots",CSettings::SSetting(1,0,10));

	Settings.insert("Hoster/MinWebTasks", CSettings::SSetting(10));
	Settings.insert("Hoster/MaxNewPer5Sec", CSettings::SSetting(25));
	Settings.insert("Hoster/MaxWebTasks", CSettings::SSetting(100));
	Settings.insert("Hoster/AccessFailedTimeOut", CSettings::SSetting(10));
	Settings.insert("Hoster/ServerBanTime", CSettings::SSetting(HR2S(2)));
	Settings.insert("Hoster/ServerBanTreshold", CSettings::SSetting(20));
	Settings.insert("Hoster/ServerDownTreshold", CSettings::SSetting(4));
	Settings.insert("Hoster/MaxUploads", CSettings::SSetting(1));
	Settings.insert("Hoster/MaxDownloads", CSettings::SSetting(5));
	Settings.insert("Hoster/MaxChecks", CSettings::SSetting(5));
	Settings.insert("Hoster/ReCheckInterval", CSettings::SSetting(HR2S(24),HR2S(1),HR2S(240)));
	Settings.insert("Hoster/AutoReUpload", CSettings::SSetting(true));
	Settings.insert("Hoster/MaxCheckouts", CSettings::SSetting(3));
	Settings.insert("Hoster/CheckoutInterval", CSettings::SSetting(MIN2S(60),MIN2S(30),HR2S(6)));
	Settings.insert("Hoster/MaxTransferRetry", CSettings::SSetting(3));
	Settings.insert("Hoster/ServerRetryDelay", CSettings::SSetting(MIN2S(2)));
	Settings.insert("Hoster/CaptchaRetryDelay", CSettings::SSetting(MIN2S(20)));
	Settings.insert("Hoster/MaxBadCaptcha", CSettings::SSetting(3));
	Settings.insert("Hoster/ManualCaptcha", CSettings::SSetting(1));
	Settings.insert("Hoster/AutoCleanUp", CSettings::SSetting(true));
	Settings.insert("Hoster/Encap", CSettings::SSetting("7z"));
	Settings.insert("Hoster/RarPath", CSettings::SSetting(""));
	Settings.insert("Hoster/RarComment", CSettings::SSetting(""));
#ifdef CRAWLER
	Settings.insert("Hoster/DecapCleanup", CSettings::SSetting("*.url;*.lnk;thumbs.db"));
	Settings.insert("Hoster/KeepSingleArchives", CSettings::SSetting(false));
#else
	Settings.insert("Hoster/KeepSingleArchives", CSettings::SSetting(true));
#endif
	Settings.insert("Hoster/EncryptUploads", CSettings::SSetting("RC4"));
	Settings.insert("Hoster/ProtectLinks", CSettings::SSetting(true));
	Settings.insert("Hoster/Enable", CSettings::SSetting(true));
	Settings.insert("Hoster/UseCaptcha", CSettings::SSetting(false));
	Settings.insert("Hoster/PartSize", CSettings::SSetting(0));
	Settings.insert("Hoster/MaxArcTasks", CSettings::SSetting(5));
	Settings.insert("Hoster/Upload", CSettings::SSetting(-1));
	Settings.insert("Hoster/Download", CSettings::SSetting(-1));
	Settings.insert("Hoster/Priority", CSettings::SSetting(0));

	Settings.insert("HosterCache/CacheMode", CSettings::SSetting("Off")); // Off, On, All
	Settings.insert("HosterCache/SelectionMode", CSettings::SSetting("Auto")); // All, Auto, Selected - hosters
	Settings.insert("HosterCache/PartSize", CSettings::SSetting(MB2B(100)));
	Settings.insert("HosterCache/MaxAvail", CSettings::SSetting(3));
	Settings.insert("HosterCache/MaxJoints", CSettings::SSetting(1));

	Settings.insert("HashInspector/Majority",CSettings::SSetting(90,80,100));
	Settings.insert("HashInspector/Quorum",CSettings::SSetting(10,5,20));

	Settings.insert("CorruptionLogger/MonitorTime", CSettings::SSetting(HR2S(4),HR2S(2),HR2S(16)));
	Settings.insert("CorruptionLogger/DropRatio", CSettings::SSetting(40, 10, 100));

	//Settings.insert("Script/AutoUpdate", CSettings::SSetting(true));
	//Settings.insert("Script/UserName", CSettings::SSetting(""));
	//Settings.insert("Script/Password", CSettings::SSetting(""));

	Settings.insert("Browser/MaxRetries", CSettings::SSetting(3));
	Settings.insert("Browser/TimeoutSecs", CSettings::SSetting(30));
	Settings.insert("Browser/ReplyBuffer", CSettings::SSetting(MB2B(4),KB2B(256),MB2B(64)));
	Settings.insert("Browser/TransferBuffer",CSettings::SSetting(KB2B(16),KB2B(4),KB2B(256)));

	return Settings;
}
Exemplo n.º 3
0
void CWebAPI::OnRequestCompleted()
{
	CHttpSocket* pRequest = (CHttpSocket*)sender();
	ASSERT(pRequest->GetState() == CHttpSocket::eHandling);
	QString Path = pRequest->GetPath();
	TArguments Cookies = GetArguments(pRequest->GetHeader("Cookie"));
	TArguments Arguments = GetArguments(pRequest->GetQuery().mid(1),'&');

	switch(pRequest->GetType())
	{
		case CHttpSocket::eDELETE:
			pRequest->RespondWithError(501);
		case CHttpSocket::eHEAD:
		case CHttpSocket::eOPTIONS:
			pRequest->SendResponse();
			return;
	}

	if(Path.compare("/WebAPI/") == 0)
		pRequest->RespondWithError(403);

	else if(Path.left(14).compare("/WebAPI/Icons/") == 0)
	{
		int Size;
		if(Arguments["Size"] == "Small")
			Size = 16;
		else // if(Arguments["Size"] == "Large")
			Size = 32;
		QString Ext = Split2(Path.mid(14), ".").first;
		QString IconPath = theCore->Cfg()->GetSettingsDir() + "/Cache/Icons/" + Ext + QString::number(Size) + ".png";
		if(!QFile::exists(IconPath))
		{
			if(theLoader)
				QMetaObject::invokeMethod(theLoader, "CreateFileIcon", Qt::BlockingQueuedConnection, Q_ARG(QString, Ext));
			else
				IconPath = ":/Icon" + QString::number(Size) + ".png";
		}
		pRequest->SetCaching(HR2S(48));
		pRequest->RespondWithFile(IconPath);
	}
	else if(Path.left(11).compare("/WebAPI/FS/") == 0)
	{
		StrPair CmdExt = Split2(Path.mid(11),".");

		QVariantMap Result;

		if(CmdExt.first.compare("dir", Qt::CaseInsensitive) == 0)
		{
			QVariantList Entrys;
			QString DirPath = Arguments["Path"];
			QDir Dir(DirPath);
			foreach (const QString& Name, Dir.entryList())
			{
				if (Name.compare(".") == 0 || Name.compare("..") == 0)
					continue;

				QVariantMap Entry;
				QFileInfo Info(DirPath + "/" + Name);
				Entry["Name"] = Info.fileName();
				Entry["Created"] = Info.created();
				Entry["Modifyed"] = Info.lastModified();
				if (Info.isDir())
					Entry["Size"] = "dir";
				else
					Entry["Size"] = Info.size();
				Entrys.append(Entry);
			}
			Result["List"] = Entrys;
		}
Exemplo n.º 4
0
void CServerList::ServerStats()
{
	uint32 tNow = ::GetTickCount();

	if (theApp->IsConnectedED2K() && m_servers.size() > 0) {
		CServer* ping_server = GetNextStatServer();
		CServer* test = ping_server;
		if (!ping_server) {
			return;
		}

		while (ping_server->GetLastPingedTime() && (tNow - ping_server->GetLastPingedTime()) < UDPSERVSTATREASKTIME) {
			ping_server = GetNextStatServer();
			if (ping_server == test) {
				return;
			}
		}
		
		if (ping_server->GetFailedCount() >= thePrefs::GetDeadserverRetries() && thePrefs::DeadServer() && !ping_server->IsStaticMember()) {
			RemoveServer(ping_server);
			return;
		}
				
		srand((unsigned)time(NULL));
		ping_server->SetRealLastPingedTime(tNow); // this is not used to calcualte the next ping, but only to ensure a minimum delay for premature pings		
		if (!ping_server->GetCryptPingReplyPending() && (!ping_server->GetLastPingedTime() || (tNow - ping_server->GetLastPingedTime()) >= UDPSERVSTATREASKTIME) && theApp->GetPublicIP() && thePrefs::IsServerCryptLayerUDPEnabled()) {
			// We try a obfsucation ping first and wait 20 seconds for an answer
			// if it doesn't get responsed, we don't count it as error but continue with a normal ping
			ping_server->SetCryptPingReplyPending(true);
			uint32 nPacketLen = 4 + (uint8)(rand() % 16); // max padding 16 bytes
			CScopedArray<byte> pRawPacket(nPacketLen);
			uint32 dwChallenge = (rand() << 17) | (rand() << 2) | (rand() & 0x03);
			if (dwChallenge == 0) {
				dwChallenge++;
			}
			
			memcpy(pRawPacket.get(), &dwChallenge, sizeof(uint32));
			for (uint32 i = 4; i < nPacketLen; i++) { // fillng up the remaining bytes with random data
				pRawPacket[i] = (uint8)rand();
			}

			ping_server->SetChallenge(dwChallenge);
			ping_server->SetLastPinged(tNow);
			ping_server->SetLastPingedTime((tNow - (uint32)UDPSERVSTATREASKTIME) + 20); // give it 20 seconds to respond
			
			AddDebugLogLineN(logServerUDP, CFormat(wxT(">> Sending OP__GlobServStatReq (obfuscated) to server %s:%u")) % ping_server->GetAddress() % ping_server->GetPort());

			CPacket* packet = new CPacket(pRawPacket[1], nPacketLen - 2, pRawPacket[0]);
			packet->CopyToDataBuffer(0, pRawPacket.get() + 2, nPacketLen - 2);
			
			theStats::AddUpOverheadServer(packet->GetPacketSize());
			theApp->serverconnect->SendUDPPacket(packet, ping_server, true, true /*raw packet*/, 12 /* Port offset is 12 for obfuscated encryption*/);
		} else if (ping_server->GetCryptPingReplyPending() || theApp->GetPublicIP() == 0 || !thePrefs::IsServerCryptLayerUDPEnabled()){
			// our obfsucation ping request was not answered, so probably the server doesn'T supports obfuscation
			// continue with a normal request
			if (ping_server->GetCryptPingReplyPending() && thePrefs::IsServerCryptLayerUDPEnabled()) {
				AddDebugLogLineN(logServerUDP, wxT("CryptPing failed for server ") + ping_server->GetListName());
			} else if (thePrefs::IsServerCryptLayerUDPEnabled()) {
				AddDebugLogLineN(logServerUDP, wxT("CryptPing skipped because our public IP is unknown for server ") + ping_server->GetListName());
			}
			
			ping_server->SetCryptPingReplyPending(false);			
			
			CPacket* packet = new CPacket(OP_GLOBSERVSTATREQ, 4, OP_EDONKEYPROT);
			uint32 challenge = 0x55AA0000 + (uint16)rand();
			ping_server->SetChallenge(challenge);
			packet->CopyUInt32ToDataBuffer(challenge);
			ping_server->SetLastPinged(tNow);
			ping_server->SetLastPingedTime(tNow - (rand() % HR2S(1)));
			ping_server->AddFailedCount();
			Notify_ServerRefresh(ping_server);
			theStats::AddUpOverheadServer(packet->GetPacketSize());
			theApp->serverconnect->SendUDPPacket(packet, ping_server, true);
		} else {
			wxFAIL;
		}
	}
}
Exemplo n.º 5
0
void CServerList::ServerStats()
{
	// Update the server list even if we are connected to Kademlia only. The idea is for both networks to keep 
	// each other up to date.. Kad network can get you back into the ED2K network.. And the ED2K network can get 
	// you back into the Kad network..
	if (theApp.IsConnected() && theApp.serverconnect->IsUDPSocketAvailable() && list.GetCount() > 0)
	{
		CServer* ping_server = GetNextStatServer();
		if (!ping_server)
			return;

		uint32 tNow = (uint32)time(NULL);
		const CServer* test = ping_server;
        while (ping_server->GetLastPingedTime() != 0 && (tNow - ping_server->GetLastPingedTime()) < UDPSERVSTATREASKTIME)
		{
			ping_server = GetNextStatServer();
			if (ping_server == test)
				return;
		}
		// IP-filter: We do not need to IP-filter any servers here, even dynIP-servers are not
		// needed to get filtered here. See also comments in 'CServerSocket::ConnectTo'.
		if (ping_server->GetFailedCount() >= thePrefs.GetDeadServerRetries()) {
			//Xman
			// Mighty Knife: Static server handling
			// Static servers can be prevented from being removed from the list.
			if ((!ping_server->IsStaticMember()) || (!thePrefs.GetDontRemoveStaticServers())) {
				theApp.emuledlg->serverwnd->serverlistctrl.RemoveServer(ping_server);
				return;
			}
			//Xman end
		}
		srand(tNow);
		ping_server->SetRealLastPingedTime(tNow); // this is not used to calcualte the next ping, but only to ensure a minimum delay for premature pings
		if (!ping_server->GetCryptPingReplyPending() && (tNow - ping_server->GetLastPingedTime()) >= UDPSERVSTATREASKTIME && theApp.GetPublicIP() != 0 && thePrefs.IsServerCryptLayerUDPEnabled()){
			// we try a obfsucation ping first and wait 20 seconds for an answer
			// if it doesn'T get responsed, we don't count it as error but continue with a normal ping
			ping_server->SetCryptPingReplyPending(true);
			uint32 nPacketLen = 4 + (uint8)(rand() % 16); // max padding 16 bytes
			BYTE* pRawPacket = new BYTE[nPacketLen];
			uint32 dwChallenge = (rand() << 17) | (rand() << 2) | (rand() & 0x03);
			if (dwChallenge == 0)
				dwChallenge++;
			PokeUInt32(pRawPacket, dwChallenge);
			for (uint32 i = 4; i < nPacketLen; i++) // fillung up the remaining bytes with random data
				pRawPacket[i] = (uint8)rand();

			ping_server->SetChallenge(dwChallenge);
			ping_server->SetLastPinged(GetTickCount());
			ping_server->SetLastPingedTime((tNow - (uint32)UDPSERVSTATREASKTIME) + 20); // give it 20 seconds to respond
			
			if (thePrefs.GetDebugServerUDPLevel() > 0)
				Debug(_T(">>> Sending OP__GlobServStatReq (obfuscated) to server %s:%u\n"), ping_server->GetAddress(), ping_server->GetPort());

			theStats.AddUpDataOverheadServer(nPacketLen);
			theApp.serverconnect->SendUDPPacket(NULL, ping_server, true, ping_server->GetPort() + 12, pRawPacket, nPacketLen);
		}
		else if (ping_server->GetCryptPingReplyPending() || theApp.GetPublicIP() == 0 || !thePrefs.IsServerCryptLayerUDPEnabled()){
			// our obfsucation ping request was not answered, so probably the server doesn'T supports obfuscation
			// continue with a normal request
			if (ping_server->GetCryptPingReplyPending() && thePrefs.IsServerCryptLayerUDPEnabled())
				DEBUG_ONLY(DebugLog(_T("CryptPing failed for server %s"), ping_server->GetListName()));
			else if (thePrefs.IsServerCryptLayerUDPEnabled())
				DEBUG_ONLY(DebugLog(_T("CryptPing skipped because our public IP is unknown for server %s"), ping_server->GetListName()));
			
			ping_server->SetCryptPingReplyPending(false);			
			Packet* packet = new Packet(OP_GLOBSERVSTATREQ, 4);
			uint32 uChallenge = 0x55AA0000 + GetRandomUInt16();
			ping_server->SetChallenge(uChallenge);
			PokeUInt32(packet->pBuffer, uChallenge);
			ping_server->SetLastPinged(GetTickCount());
			ping_server->SetLastPingedTime(tNow - (rand() % HR2S(1)));
			ping_server->AddFailedCount();
			theApp.emuledlg->serverwnd->serverlistctrl.RefreshServer(ping_server);
			if (thePrefs.GetDebugServerUDPLevel() > 0)
				Debug(_T(">>> Sending OP__GlobServStatReq (not obfuscated) to server %s:%u\n"), ping_server->GetAddress(), ping_server->GetPort());
			theStats.AddUpDataOverheadServer(packet->size);
			theApp.serverconnect->SendUDPPacket(packet, ping_server, true);
		}
		else
			ASSERT( false );
	}
}