Fix throttle to 1) Work, 2) Not throttle outbound connections
This commit is contained in:
parent
4c96880580
commit
fb94612315
@ -18,6 +18,7 @@ import net.md_5.bungee.config.Configuration;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.SocketAddress;
|
import java.net.SocketAddress;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
@ -194,9 +195,9 @@ public class BungeeCord extends ProxyServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private final Map<SocketAddress, Long> throttle = new HashMap<>();
|
private final Map<InetAddress, Long> throttle = new HashMap<>();
|
||||||
|
|
||||||
public void unThrottle(SocketAddress address)
|
public void unThrottle(InetAddress address)
|
||||||
{
|
{
|
||||||
if ( address != null )
|
if ( address != null )
|
||||||
{
|
{
|
||||||
@ -207,7 +208,7 @@ public class BungeeCord extends ProxyServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean throttle(SocketAddress address)
|
public boolean throttle(InetAddress address)
|
||||||
{
|
{
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
synchronized ( throttle )
|
synchronized ( throttle )
|
||||||
|
@ -153,7 +153,7 @@ public class InitialHandler extends PacketHandler implements PendingConnection
|
|||||||
+ "\00" + response.getMotd()
|
+ "\00" + response.getMotd()
|
||||||
+ "\00" + response.getCurrentPlayers()
|
+ "\00" + response.getCurrentPlayers()
|
||||||
+ "\00" + response.getMaxPlayers();
|
+ "\00" + response.getMaxPlayers();
|
||||||
BungeeCord.getInstance().unThrottle( getAddress() );
|
BungeeCord.getInstance().unThrottle( getAddress().getAddress() );
|
||||||
disconnect( kickMessage );
|
disconnect( kickMessage );
|
||||||
} catch ( Throwable t )
|
} catch ( Throwable t )
|
||||||
{
|
{
|
||||||
|
@ -6,6 +6,7 @@ import io.netty.channel.ChannelInboundHandlerAdapter;
|
|||||||
import io.netty.channel.MessageList;
|
import io.netty.channel.MessageList;
|
||||||
import io.netty.handler.timeout.ReadTimeoutException;
|
import io.netty.handler.timeout.ReadTimeoutException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import net.md_5.bungee.BungeeCord;
|
import net.md_5.bungee.BungeeCord;
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
@ -33,12 +34,6 @@ public class HandlerBoss extends ChannelInboundHandlerAdapter
|
|||||||
@Override
|
@Override
|
||||||
public void channelActive(ChannelHandlerContext ctx) throws Exception
|
public void channelActive(ChannelHandlerContext ctx) throws Exception
|
||||||
{
|
{
|
||||||
if ( BungeeCord.getInstance().throttle( ctx.channel().remoteAddress() ) )
|
|
||||||
{
|
|
||||||
ctx.channel().close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( handler != null )
|
if ( handler != null )
|
||||||
{
|
{
|
||||||
channel = new ChannelWrapper( ctx );
|
channel = new ChannelWrapper( ctx );
|
||||||
|
@ -7,6 +7,7 @@ import io.netty.channel.ChannelOption;
|
|||||||
import io.netty.handler.codec.bytes.ByteArrayEncoder;
|
import io.netty.handler.codec.bytes.ByteArrayEncoder;
|
||||||
import io.netty.handler.timeout.ReadTimeoutHandler;
|
import io.netty.handler.timeout.ReadTimeoutHandler;
|
||||||
import io.netty.util.AttributeKey;
|
import io.netty.util.AttributeKey;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import net.md_5.bungee.BungeeCord;
|
import net.md_5.bungee.BungeeCord;
|
||||||
import net.md_5.bungee.BungeeServerInfo;
|
import net.md_5.bungee.BungeeServerInfo;
|
||||||
@ -28,6 +29,12 @@ public class PipelineUtils
|
|||||||
@Override
|
@Override
|
||||||
protected void initChannel(Channel ch) throws Exception
|
protected void initChannel(Channel ch) throws Exception
|
||||||
{
|
{
|
||||||
|
if ( BungeeCord.getInstance().throttle( ( (InetSocketAddress) ch.remoteAddress() ).getAddress() ) )
|
||||||
|
{
|
||||||
|
ch.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BASE.initChannel( ch );
|
BASE.initChannel( ch );
|
||||||
ch.pipeline().get( HandlerBoss.class ).setHandler( new InitialHandler( ProxyServer.getInstance(), ch.attr( LISTENER ).get() ) );
|
ch.pipeline().get( HandlerBoss.class ).setHandler( new InitialHandler( ProxyServer.getInstance(), ch.attr( LISTENER ).get() ) );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user