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

📄 trtrackerserverudp.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   TRTrackerServerUDP.java

package org.gudy.azureus2.core3.tracker.server.impl.udp;

import com.aelitis.azureus.core.networkmanager.admin.NetworkAdmin;
import java.net.*;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.ipfilter.IpFilter;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.tracker.server.TRTrackerServerRequestListener;
import org.gudy.azureus2.core3.tracker.server.impl.TRTrackerServerImpl;
import org.gudy.azureus2.core3.util.AEThread;
import org.gudy.azureus2.core3.util.ThreadPool;

// Referenced classes of package org.gudy.azureus2.core3.tracker.server.impl.udp:
//			TRTrackerServerProcessorUDP

public class TRTrackerServerUDP extends TRTrackerServerImpl
{

	private static final LogIDs LOGID;
	private static final int THREAD_POOL_SIZE = 10;
	private ThreadPool thread_pool;
	private int port;
	private DatagramSocket dg_socket;
	private volatile boolean closed;

	public TRTrackerServerUDP(String _name, int _port, boolean _start_up_ready)
	{
		super(_name, _start_up_ready);
		port = _port;
		thread_pool = new ThreadPool((new StringBuilder()).append("TrackerServer:UDP:").append(port).toString(), 10);
		try
		{
			InetAddress bind_ip = NetworkAdmin.getSingleton().getSingleHomedServiceBindAddress();
			InetSocketAddress address;
			DatagramSocket socket;
			if (bind_ip == null)
			{
				address = new InetSocketAddress(InetAddress.getByName("127.0.0.1"), port);
				socket = new DatagramSocket(port);
			} else
			{
				address = new InetSocketAddress(bind_ip, port);
				socket = new DatagramSocket(address);
			}
			socket.setReuseAddress(true);
			dg_socket = socket;
			InetSocketAddress f_address = address;
			Thread recv_thread = new AEThread(f_address) {

				final InetSocketAddress val$f_address;
				final TRTrackerServerUDP this$0;

				public void runSupport()
				{
					recvLoop(dg_socket, f_address);
				}

			
			{
				this$0 = TRTrackerServerUDP.this;
				f_address = inetsocketaddress;
				super(x0);
			}
			};
			recv_thread.setDaemon(true);
			recv_thread.start();
			Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServerUDP: recv established on port ").append(port).toString()));
		}
		catch (Throwable e)
		{
			Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServerUDP: DatagramSocket bind failed on port ").append(port).toString(), e));
		}
	}

	protected void recvLoop(DatagramSocket socket, InetSocketAddress address)
	{
		long successful_accepts = 0L;
		long failed_accepts = 0L;
		do
		{
			if (closed)
				break;
			try
			{
				byte buf[] = new byte[8192];
				DatagramPacket packet = new DatagramPacket(buf, buf.length, address);
				socket.receive(packet);
				successful_accepts++;
				failed_accepts = 0L;
				String ip = packet.getAddress().getHostAddress();
				if (!ip_filter.isInRange(ip, "Tracker", null))
					thread_pool.run(new TRTrackerServerProcessorUDP(this, socket, packet));
				continue;
			}
			catch (Throwable e)
			{
				if (closed)
					continue;
				failed_accepts++;
				Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServer: receive failed on port ").append(port).toString(), e));
			}
			if ((failed_accepts <= 100L || successful_accepts != 0L) && failed_accepts <= 1000L)
				continue;
			Logger.logTextResource(new LogAlert(false, 3, "Network.alert.acceptfail"), new String[] {
				(new StringBuilder()).append("").append(port).toString(), "UDP"
			});
			break;
		} while (true);
	}

	public int getPort()
	{
		return port;
	}

	public String getHost()
	{
		return COConfigurationManager.getStringParameter("Tracker IP", "");
	}

	public boolean isSSL()
	{
		return false;
	}

	public void addRequestListener(TRTrackerServerRequestListener trtrackerserverrequestlistener)
	{
	}

	public void removeRequestListener(TRTrackerServerRequestListener trtrackerserverrequestlistener)
	{
	}

	protected void closeSupport()
	{
		closed = true;
		try
		{
			dg_socket.close();
		}
		catch (Throwable e) { }
		destroySupport();
	}

	static 
	{
		LOGID = LogIDs.TRACKER;
	}

}

⌨️ 快捷键说明

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