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

📄 udpfirewalltester.h

📁 电驴的MAC源代码
💻 H
字号:
//								-*- C++ -*-// This file is part of the aMule Project.//// Copyright (c) 2008 Dévai Tamás ( gonosztopi@amule.org )// Copyright (c) 2008 aMule Team ( admin@amule.org / http://www.amule.org )// Copyright (c) 2002-2008 Merkur ( strEmail.Format("%s@%s", "devteam", "emule-project.net") / http://www.emule-project.net )//// Any parts of this program derived from the xMule, lMule or eMule project,// or contributed by third-party developers are copyrighted by their// respective authors.//// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// // You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA//#ifndef KADEMLIA_KADEMLIA_UDPFIREWALLTESTER_H#define KADEMLIA_KADEMLIA_UDPFIREWALLTESTER_H#include "../routing/Contact.h"#include <list>namespace Kademlia{class CUInt128;class CKadUDPKey;struct UsedClient_Struct {	CContact	contact;	bool		answered;};#define UDP_FIREWALLTEST_CLIENTSTOASK	2	// more clients increase the chance of a false positive, while less the chance of a false negativeclass CUDPFirewallTester{      public:	static bool	IsFirewalledUDP(bool lastStateIfTesting); // Are we UDP firewalled - if unknown open is assumed unless onlyVerified == true	static void	SetUDPFWCheckResult(bool succeeded, bool testCancelled, uint32_t fromIP, uint16_t incomingPort);	static void	ReCheckFirewallUDP(bool setUnverified);	static bool	IsFWCheckUDPRunning() throw()		{ return m_fwChecksFinishedUDP < UDP_FIREWALLTEST_CLIENTSTOASK; }	static bool	IsVerified() throw()			{ return m_isFWVerifiedUDP; }	static void	AddPossibleTestContact(const CUInt128& clientID, uint32_t ip, uint16_t port, uint16_t tport, const CUInt128& target, uint8_t version, const CKadUDPKey& udpKey, bool ipVerified)	{		if (!IsFWCheckUDPRunning()) {			return;		}		// add the possible contact to our list - no checks in advance		m_possibleTestClients.push_front(CContact(clientID, ip, port, tport, version, udpKey, ipVerified, target));		QueryNextClient();	}	static void	Reset(); // when stopping Kad	static void	Connected();	static void	QueryNextClient(); // try the next available client for the firewallcheck      private:	// are we in search for testclients	static bool	GetUDPCheckClientsNeeded() throw()	{ return (m_fwChecksRunningUDP + m_fwChecksFinishedUDP) < UDP_FIREWALLTEST_CLIENTSTOASK; }	static bool	m_firewalledUDP;	static bool	m_firewalledLastStateUDP;	static bool	m_isFWVerifiedUDP;	static bool	m_nodeSearchStarted;	static bool	m_timedOut;	static uint8_t	m_fwChecksRunningUDP;	static uint8_t	m_fwChecksFinishedUDP;	static uint32_t	m_testStart;	static uint32_t	m_lastSucceededTime;	typedef std::list<CContact> PossibleClientList;	typedef std::list<UsedClient_Struct> UsedClientList;	static PossibleClientList m_possibleTestClients;	static UsedClientList	m_usedTestClients;};#ifndef need_UDP_FIREWALLTEST_CLIENTSTOASK#	undef UDP_FIREWALLTEST_CLIENTSTOASK#endif} // namespace Kademlia#endif /* KADEMLIA_KADEMLIA_UDPFIREWALLTESTER */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -