📄 trtrackerserverudp.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 + -