diff --git a/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar b/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar index 9afd838..1437192 100644 Binary files a/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar and b/gateway/EaglercraftXBungee/EaglerXBungee-Latest.jar differ diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java index 2125159..7b437ba 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/handlers/EaglerPacketEventListener.java @@ -1,6 +1,7 @@ package net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.handlers; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.logging.Level; import org.apache.commons.codec.binary.Base64; @@ -19,6 +20,7 @@ import net.md_5.bungee.UserConnection; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.connection.Server; import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.event.PluginMessageEvent; import net.md_5.bungee.api.event.PostLoginEvent; @@ -71,6 +73,16 @@ public class EaglerPacketEventListener implements Listener { event.getSender().disconnect(new TextComponent("Cannot send \"" + SkinService.CHANNEL + "\" on a non-eagler connection!")); } } + }else if(event.getSender() instanceof Server && event.getReceiver() instanceof UserConnection) { + UserConnection player = (UserConnection)event.getReceiver(); + if("EAG|GetDomain".equals(event.getTag()) && player.getPendingConnection() instanceof EaglerInitialHandler) { + String domain = ((EaglerInitialHandler)player.getPendingConnection()).getOrigin(); + if(domain == null) { + ((Server)event.getSender()).sendData("EAG|Domain", new byte[] { 0 }); + }else { + ((Server)event.getSender()).sendData("EAG|Domain", domain.getBytes(StandardCharsets.UTF_8)); + } + } } } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java index 8a6ea32..3b6f000 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/EaglerInitialHandler.java @@ -223,4 +223,8 @@ public class EaglerInitialHandler extends InitialHandler { return eaglerUnsafe; } + public String getOrigin() { + return origin; + } + } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpHandshakeHandler.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpHandshakeHandler.java index 72b40ce..7078554 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpHandshakeHandler.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpHandshakeHandler.java @@ -5,6 +5,7 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; +import java.util.logging.Level; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelFuture; @@ -167,7 +168,7 @@ public class HttpHandshakeHandler extends ChannelInboundHandlerAdapter { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { if (ctx.channel().isActive()) { - EaglerXBungee.logger().severe("[" + ctx.channel().remoteAddress() + "]: Exception Caught: " + cause.toString()); + EaglerXBungee.logger().log(Level.WARNING, "[Pre][" + ctx.channel().remoteAddress() + "]: Exception Caught: " + cause.toString(), cause); ctx.close(); } } diff --git a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java index a1c6bb4..908dddd 100644 --- a/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java +++ b/gateway/EaglercraftXBungee/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_bungeecord/server/HttpWebSocketHandler.java @@ -135,7 +135,7 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { if (ctx.channel().isActive()) { - EaglerXBungee.logger().warning("[" + ctx.channel().remoteAddress() + "]: Exception Caught: " + cause.toString()); + EaglerXBungee.logger().warning("[Yee][" + ctx.channel().remoteAddress() + "]: Exception Caught: " + cause.toString()); } } @@ -153,6 +153,31 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { hasFirstPacket = true; hasBinaryConnection = true; + BungeeCord bungus = BungeeCord.getInstance(); + int limit = bungus.config.getPlayerLimit(); + if (limit > 0 && bungus.getOnlineCount() >= limit) { + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, bungus.getTranslation("proxy_full")) + .addListener(ChannelFutureListener.CLOSE); + connectionClosed = true; + return; + } + + if(conf.getMaxPlayer() > 0) { + int i = 0; + for(ProxiedPlayer p : bungus.getPlayers()) { + if(p.getPendingConnection().getListener() == conf) { + ++i; + } + } + + if (i >= conf.getMaxPlayer()) { + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, bungus.getTranslation("proxy_full")) + .addListener(ChannelFutureListener.CLOSE); + connectionClosed = true; + return; + } + } + SocketAddress localSocketAddr = ctx.channel().remoteAddress(); InetAddress addr = ctx.channel().attr(EaglerPipeline.REAL_ADDRESS).get(); @@ -692,6 +717,32 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { private void finish(final ChannelHandlerContext ctx) { final BungeeCord bungee = BungeeCord.getInstance(); + + // verify player counts a second time after handshake just to be safe + int limit = bungee.config.getPlayerLimit(); + if (limit > 0 && bungee.getOnlineCount() >= limit) { + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, bungee.getTranslation("proxy_full")) + .addListener(ChannelFutureListener.CLOSE); + connectionClosed = true; + return; + } + + if(conf.getMaxPlayer() > 0) { + int i = 0; + for(ProxiedPlayer p : bungee.getPlayers()) { + if(p.getPendingConnection().getListener() == conf) { + ++i; + } + } + + if (i >= conf.getMaxPlayer()) { + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, bungee.getTranslation("proxy_full")) + .addListener(ChannelFutureListener.CLOSE); + connectionClosed = true; + return; + } + } + final String usernameStr = clientUsername.toString(); final ProxiedPlayer oldName = bungee.getPlayer(usernameStr); if (oldName != null) { diff --git a/gateway/EaglercraftXBungee/src/main/resources/plugin.yml b/gateway/EaglercraftXBungee/src/main/resources/plugin.yml index 2d050ae..41036da 100644 --- a/gateway/EaglercraftXBungee/src/main/resources/plugin.yml +++ b/gateway/EaglercraftXBungee/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EaglercraftXBungee main: net.lax1dude.eaglercraft.v1_8.plugin.gateway_bungeecord.EaglerXBungee -version: 1.0.4 +version: 1.0.5 description: Plugin to allow EaglercraftX 1.8 players to join your network, or allow EaglercraftX 1.8 players to use your network as a proxy to join other networks author: lax1dude \ No newline at end of file diff --git a/gateway_version b/gateway_version index a6a3a43..1464c52 100644 --- a/gateway_version +++ b/gateway_version @@ -1 +1 @@ -1.0.4 \ No newline at end of file +1.0.5 \ No newline at end of file