📄 trblockingserver.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: TRBlockingServer.java
package org.gudy.azureus2.core3.tracker.server.impl.tcp.blocking;
import com.aelitis.azureus.core.networkmanager.admin.NetworkAdmin;
import java.net.*;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
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.security.SESecurityManager;
import org.gudy.azureus2.core3.tracker.server.TRTrackerServerException;
import org.gudy.azureus2.core3.tracker.server.impl.tcp.TRTrackerServerTCP;
import org.gudy.azureus2.core3.util.AEThread;
import org.gudy.azureus2.core3.util.Debug;
// Referenced classes of package org.gudy.azureus2.core3.tracker.server.impl.tcp.blocking:
// TRBlockingServerProcessor
public class TRBlockingServer extends TRTrackerServerTCP
{
private static final LogIDs LOGID;
private ServerSocket server_socket;
private volatile boolean closed;
public TRBlockingServer(String _name, int _port, InetAddress _bind_ip, boolean _ssl, boolean _apply_ip_filter, boolean _start_up_ready)
throws TRTrackerServerException
{
boolean ok;
super(_name, _port, _ssl, _apply_ip_filter, _start_up_ready);
ok = false;
InetAddress bind_ip = NetworkAdmin.getSingleton().getSingleHomedServiceBindAddress();
String tr_bind_ip = COConfigurationManager.getStringParameter("Bind IP for Tracker", "");
if (tr_bind_ip.length() >= 7)
try
{
bind_ip = InetAddress.getByName(tr_bind_ip);
}
catch (Throwable e)
{
Debug.printStackTrace(e);
}
if (_ssl)
{
if (_port == 0)
throw new TRTrackerServerException("port of 0 not currently supported for SSL");
try
{
SSLServerSocketFactory factory = SESecurityManager.getSSLServerSocketFactory();
if (factory == null)
throw new TRTrackerServerException("TRTrackerServer: failed to get SSL factory");
SSLServerSocket ssl_server_socket;
if (bind_ip == null)
ssl_server_socket = (SSLServerSocket)factory.createServerSocket(getPort(), 128);
else
ssl_server_socket = (SSLServerSocket)factory.createServerSocket(getPort(), 128, bind_ip);
String cipherSuites[] = ssl_server_socket.getSupportedCipherSuites();
ssl_server_socket.setEnabledCipherSuites(cipherSuites);
ssl_server_socket.setNeedClientAuth(false);
ssl_server_socket.setReuseAddress(true);
server_socket = ssl_server_socket;
Thread accept_thread = new AEThread("TRTrackerServer:accept.loop(ssl)") {
final TRBlockingServer this$0;
public void runSupport()
{
acceptLoop(server_socket);
}
{
this$0 = TRBlockingServer.this;
super(x0);
}
};
accept_thread.setDaemon(true);
accept_thread.start();
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServer: SSL listener established on port ").append(getPort()).toString()));
ok = true;
}
catch (Throwable e)
{
Logger.logTextResource(new LogAlert(false, 3, "Tracker.alert.listenfail"), new String[] {
(new StringBuilder()).append("").append(getPort()).toString()
});
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServer: SSL listener failed on port ").append(getPort()).toString(), e));
if (e instanceof TRTrackerServerException)
throw (TRTrackerServerException)e;
else
throw new TRTrackerServerException((new StringBuilder()).append("TRTrackerServer: accept fails: ").append(e.toString()).toString());
}
} else
{
try
{
int port = getPort();
ServerSocket ss;
if (_bind_ip != null)
ss = new ServerSocket(port, 1024, _bind_ip);
else
if (bind_ip == null)
ss = new ServerSocket(port, 1024);
else
ss = new ServerSocket(port, 1024, bind_ip);
if (port == 0)
setPort(ss.getLocalPort());
ss.setReuseAddress(true);
server_socket = ss;
Thread accept_thread = new AEThread("TRTrackerServer:accept.loop") {
final TRBlockingServer this$0;
public void runSupport()
{
acceptLoop(server_socket);
}
{
this$0 = TRBlockingServer.this;
super(x0);
}
};
accept_thread.setDaemon(true);
accept_thread.start();
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServer: listener established on port ").append(getPort()).toString()));
ok = true;
}
catch (Throwable e)
{
Logger.logTextResource(new LogAlert(false, 3, "Tracker.alert.listenfail"), new String[] {
(new StringBuilder()).append("").append(getPort()).toString()
});
throw new TRTrackerServerException("TRTrackerServer: accept fails", e);
}
}
if (!ok)
destroySupport();
break MISSING_BLOCK_LABEL_604;
Exception exception;
exception;
if (!ok)
destroySupport();
throw exception;
}
protected void acceptLoop(ServerSocket ss)
{
long successfull_accepts = 0L;
long failed_accepts = 0L;
do
{
if (closed)
break;
try
{
Socket socket = ss.accept();
successfull_accepts++;
String ip = socket.getInetAddress().getHostAddress();
if (!isIPFilterEnabled() || !ip_filter.isInRange(ip, "Tracker", null))
runProcessor(new TRBlockingServerProcessor(this, socket));
else
socket.close();
continue;
}
catch (Throwable e)
{
if (closed)
continue;
failed_accepts++;
Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerServer: listener failed on port ").append(getPort()).toString(), e));
}
if (failed_accepts <= 100L || successfull_accepts != 0L)
continue;
Logger.logTextResource(new LogAlert(false, 3, "Network.alert.acceptfail"), new String[] {
(new StringBuilder()).append("").append(getPort()).toString(), "TCP"
});
break;
} while (true);
}
protected void closeSupport()
{
closed = true;
try
{
server_socket.close();
}
catch (Throwable e) { }
destroySupport();
}
static
{
LOGID = LogIDs.TRACKER;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -