📄 httpnetworkmanager.java
字号:
final String url = (String)x[0];
final PeerManagerRegistration routing_data = (PeerManagerRegistration)x[1];
if (Logger.isEnabled()){
Logger.log(new LogEvent(LOGID, "HTTP connection from " + connection.getEndpoint().getNotionalAddress() + " routed successfully on '" + url + "'" ));
}
PeerManager.getSingleton().manualRoute(
routing_data,
connection,
new PeerManagerRoutingListener()
{
public boolean
routed(
PEPeerTransport peer )
{
if ( url.indexOf( "/webseed" ) != -1 ){
new HTTPNetworkConnectionWebSeed( HTTPNetworkManager.this, connection, peer, url );
return( true );
}else if ( url.indexOf( "/files/" ) != -1 ){
new HTTPNetworkConnectionFile( HTTPNetworkManager.this, connection, peer, url );
return( true );
}
return( false );
}
});
}
public boolean
autoCryptoFallback()
{
return( false );
}
},
new MessageStreamFactory() {
public MessageStreamEncoder createEncoder() { return new HTTPMessageEncoder(); }
public MessageStreamDecoder createDecoder() { return new HTTPMessageDecoder(); }
});
}
public boolean
isHTTPListenerEnabled()
{
return( http_incoming_manager.isEnabled());
}
public int
getHTTPListeningPortNumber()
{
return( http_incoming_manager.getTCPListeningPortNumber());
}
public void
setExplicitBindAddress(
InetAddress address )
{
http_incoming_manager.setExplicitBindAddress( address );
}
public void
clearExplicitBindAddress()
{
http_incoming_manager.clearExplicitBindAddress();
}
public boolean
isEffectiveBindAddress(
InetAddress address )
{
return( http_incoming_manager.isEffectiveBindAddress( address ));
}
protected String
getIndexPage()
{
return( "HTTP/1.1 200 OK" + NL +
"Connection: Close" + NL +
"Content-Length: 0" + NL +
NL );
}
protected String
getPingPage(
String url )
{
int pos = url.indexOf( ' ' );
if ( pos != -1 ){
url = url.substring( 0, pos );
}
pos = url.indexOf( '?' );
Map response = new HashMap();
boolean ok = false;
if ( pos != -1 ){
StringTokenizer tok = new StringTokenizer(url.substring(pos+1), "&");
while( tok.hasMoreTokens()){
String token = tok.nextToken();
pos = token.indexOf('=');
if ( pos != -1 ){
String lhs = token.substring(0,pos);
String rhs = token.substring(pos+1);
if ( lhs.equals( "check" )){
response.put( "check", rhs );
ok = true;
}
}
}
}
if ( ok ){
try{
byte[] bytes = BEncoder.encode( response );
byte[] length = new byte[4];
ByteBuffer.wrap( length ).putInt( bytes.length );
return( "HTTP/1.1 200 OK" + NL +
"Connection: Close" + NL +
"Content-Length: " + ( bytes.length + 4 )+ NL +
NL +
new String( length, "ISO-8859-1" ) + new String( bytes, "ISO-8859-1" ) );
}catch( Throwable e ){
}
}
return( getNotFound());
}
protected String
getTest503()
{
return( "HTTP/1.1 503 Service Unavailable" + NL +
"Connection: Close" + NL +
"Content-Length: 4" + NL +
NL +
"1234" );
}
protected String
getNotFound()
{
return( "HTTP/1.1 404 Not Found" + NL +
"Connection: Close" + NL +
"Content-Length: 0" + NL +
NL );
}
protected String
getRangeNotSatisfiable()
{
return( "HTTP/1.1 416 Not Satisfiable" + NL +
"Connection: Close" + NL +
"Content-Length: 0" + NL +
NL );
}
protected void
writeReply(
final NetworkConnection connection,
final TransportHelper transport,
final String data )
{
byte[] bytes;
try{
bytes = data.getBytes( "ISO-8859-1" );
}catch( UnsupportedEncodingException e ){
bytes = data.getBytes();
}
final ByteBuffer bb = ByteBuffer.wrap( bytes );
try{
transport.write( bb, false );
if ( bb.remaining() > 0 ){
transport.registerForWriteSelects(
new TransportHelper.selectListener()
{
public boolean
selectSuccess(
TransportHelper helper,
Object attachment )
{
try{
int written = helper.write( bb, false );
if ( bb.remaining() > 0 ){
helper.registerForWriteSelects( this, null );
}else{
if (Logger.isEnabled()){
Logger.log(new LogEvent(LOGID, "HTTP connection from " + connection.getEndpoint().getNotionalAddress() + " closed" ));
}
connection.close();
}
return( written > 0 );
}catch( Throwable e ){
helper.cancelWriteSelects();
if (Logger.isEnabled()){
Logger.log(new LogEvent(LOGID, "HTTP connection from " + connection.getEndpoint().getNotionalAddress() + " failed to write error '" + data + "'" ));
}
connection.close();
return( false );
}
}
public void
selectFailure(
TransportHelper helper,
Object attachment,
Throwable msg)
{
helper.cancelWriteSelects();
if (Logger.isEnabled()){
Logger.log(new LogEvent(LOGID, "HTTP connection from " + connection.getEndpoint().getNotionalAddress() + " failed to write error '" + data + "'" ));
}
connection.close();
}
},
null );
}else{
if (Logger.isEnabled()){
Logger.log(new LogEvent(LOGID, "HTTP connection from " + connection.getEndpoint().getNotionalAddress() + " closed" ));
}
connection.close();
}
}catch( Throwable e ){
if (Logger.isEnabled()){
Logger.log(new LogEvent(LOGID, "HTTP connection from " + connection.getEndpoint().getNotionalAddress() + " failed to write error '" + data + "'" ));
}
connection.close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -