mirror of
https://github.com/PaperMC/Waterfall.git
synced 2025-02-15 03:11:45 +01:00
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing BungeeCord Changes: d0fa62d4 Minecraft 24w06a support 464ed018 Improve cookie support during login eda268b4 Fix 24w05b spectate packet ID 3e100752 #3612: Error when disconnecting player on PostLoginEvent b52b1469 Add PendingConnection#isTransferred API method 94d5b0d0 Minecraft 24w05b support c3f228f6 #3610, 3611: inverted isEmpty method on ComponentStyle 02c5c1ee #3602: Minecraft 24w04a support c69acf72 Add JetBrains java-annotations a1cd6943 Bump version to 1.20-R0.3-SNAPSHOT 3e2bc8e2 Release 1.20-R0.2 ad7163d2 #3600: Bump io.netty:netty-bom from 4.1.104.Final to 4.1.106.Final
147 lines
7.8 KiB
Diff
147 lines
7.8 KiB
Diff
From bae0045a3b7394ba2071ab4e5ac2d7fe8fa5a157 Mon Sep 17 00:00:00 2001
|
|
From: Janmm14 <gitconfig1@janmm14.de>
|
|
Date: Mon, 21 Jun 2021 23:43:39 +0200
|
|
Subject: [PATCH] Replace reflection inside netty with ChannelFactory.
|
|
|
|
Thanks for pointing it out @MrIvanPlays
|
|
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
index b4e101ac..9b93d2c3 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
|
|
@@ -361,7 +361,7 @@ public class BungeeCord extends ProxyServer
|
|
}
|
|
};
|
|
new ServerBootstrap()
|
|
- .channel( PipelineUtils.getServerChannel( info.getSocketAddress() ) )
|
|
+ .channelFactory( PipelineUtils.getServerChannelFactory( info.getSocketAddress() ) ) // Waterfall - netty reflection -> factory
|
|
.option( ChannelOption.SO_REUSEADDR, true ) // TODO: Move this elsewhere!
|
|
.childAttr( PipelineUtils.LISTENER, info )
|
|
.childHandler( PipelineUtils.SERVER_CHILD )
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java b/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java
|
|
index 377df7ec..8f531f85 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeServerInfo.java
|
|
@@ -184,7 +184,7 @@ public class BungeeServerInfo implements ServerInfo
|
|
}
|
|
};
|
|
new Bootstrap()
|
|
- .channel( PipelineUtils.getChannel( socketAddress ) )
|
|
+ .channelFactory( PipelineUtils.getChannelFactory( socketAddress ) ) // Waterfall - netty reflection -> factory
|
|
.group( BungeeCord.getInstance().workerEventLoopGroup )
|
|
.handler( PipelineUtils.BASE_SERVERSIDE )
|
|
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, BungeeCord.getInstance().getConfig().getRemotePingTimeout() )
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/UserConnection.java b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
index f29a6f62..1d009633 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
@@ -414,7 +414,7 @@ public final class UserConnection implements ProxiedPlayer
|
|
}
|
|
};
|
|
Bootstrap b = new Bootstrap()
|
|
- .channel( PipelineUtils.getChannel( target.getAddress() ) )
|
|
+ .channelFactory( PipelineUtils.getChannelFactory( target.getAddress() ) ) // Waterfall - netty reflection -> factory
|
|
.group( ch.getHandle().eventLoop() )
|
|
.handler( initializer )
|
|
.option( ChannelOption.CONNECT_TIMEOUT_MILLIS, request.getConnectTimeout() )
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java b/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java
|
|
index 37337429..c3683c30 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/http/HttpClient.java
|
|
@@ -111,7 +111,8 @@ public class HttpClient
|
|
|
|
private static void getWithNettyResolver(EventLoop eventLoop, URI uri, int port, ChannelFutureListener future, Callback<String> callback, boolean ssl) {
|
|
java.net.InetSocketAddress address = java.net.InetSocketAddress.createUnresolved(uri.getHost(), port);
|
|
- new Bootstrap().channel( PipelineUtils.getChannel( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
|
+ // Waterfall - netty reflection -> factory
|
|
+ new Bootstrap().channelFactory( PipelineUtils.getChannelFactory( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
|
option( ChannelOption.CONNECT_TIMEOUT_MILLIS, TIMEOUT ).resolver(dnsResolverGroup).remoteAddress( address ).connect().addListener( future );
|
|
}
|
|
|
|
@@ -130,7 +131,8 @@ public class HttpClient
|
|
}
|
|
addressCache.put( uri.getHost(), inetHost );
|
|
}
|
|
- new Bootstrap().channel( PipelineUtils.getChannel( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
|
+ // Waterfall - netty reflection -> factory
|
|
+ new Bootstrap().channelFactory( PipelineUtils.getChannelFactory( null ) ).group( eventLoop ).handler( new HttpInitializer( callback, ssl, uri.getHost(), port ) ).
|
|
option( ChannelOption.CONNECT_TIMEOUT_MILLIS, TIMEOUT ).remoteAddress( inetHost, port ).connect().addListener( future );
|
|
}
|
|
// Waterfall End
|
|
diff --git a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
|
index af65e192..6a045d16 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/netty/PipelineUtils.java
|
|
@@ -5,6 +5,7 @@ import io.github.waterfallmc.waterfall.event.ConnectionInitEvent;
|
|
import io.netty.buffer.PooledByteBufAllocator;
|
|
import io.netty.channel.Channel;
|
|
import io.netty.channel.ChannelException;
|
|
+import io.netty.channel.ChannelFactory;
|
|
import io.netty.channel.ChannelInitializer;
|
|
import io.netty.channel.ChannelOption;
|
|
import io.netty.channel.EventLoopGroup;
|
|
@@ -119,6 +120,12 @@ public class PipelineUtils
|
|
public static final String LEGACY_KICKER = "legacy-kick";
|
|
|
|
private static boolean epoll;
|
|
+ // Waterfall start: netty reflection -> factory
|
|
+ private static final ChannelFactory<? extends ServerChannel> serverChannelFactory;
|
|
+ private static final ChannelFactory<? extends ServerChannel> serverChannelDomainFactory;
|
|
+ private static final ChannelFactory<? extends Channel> channelFactory;
|
|
+ private static final ChannelFactory<? extends Channel> channelDomainFactory;
|
|
+ // Waterfall end
|
|
|
|
static
|
|
{
|
|
@@ -134,6 +141,12 @@ public class PipelineUtils
|
|
ProxyServer.getInstance().getLogger().log( Level.WARNING, "Epoll is not working, falling back to NIO: {0}", Util.exception( Epoll.unavailabilityCause() ) );
|
|
}
|
|
}
|
|
+ // Waterfall start: netty reflection -> factory
|
|
+ serverChannelFactory = epoll ? EpollServerSocketChannel::new : NioServerSocketChannel::new;
|
|
+ serverChannelDomainFactory = epoll ? EpollServerDomainSocketChannel::new : null;
|
|
+ channelFactory = epoll ? EpollSocketChannel::new : NioSocketChannel::new;
|
|
+ channelDomainFactory = epoll ? EpollDomainSocketChannel::new : null;
|
|
+ // Waterfall end
|
|
}
|
|
|
|
public static EventLoopGroup newEventLoopGroup(int threads, ThreadFactory factory)
|
|
@@ -165,6 +178,34 @@ public class PipelineUtils
|
|
return epoll ? EpollSocketChannel.class : NioSocketChannel.class;
|
|
}
|
|
|
|
+ // Waterfall start: netty reflection -> factory
|
|
+ public static ChannelFactory<? extends ServerChannel> getServerChannelFactory(SocketAddress address)
|
|
+ {
|
|
+ if ( address instanceof DomainSocketAddress )
|
|
+ {
|
|
+ ChannelFactory<? extends ServerChannel> factory = PipelineUtils.serverChannelDomainFactory;
|
|
+ Preconditions.checkState( factory != null, "Epoll required to have UNIX sockets" );
|
|
+
|
|
+ return factory;
|
|
+ }
|
|
+
|
|
+ return serverChannelFactory;
|
|
+ }
|
|
+
|
|
+ public static ChannelFactory<? extends Channel> getChannelFactory(SocketAddress address)
|
|
+ {
|
|
+ if ( address instanceof DomainSocketAddress )
|
|
+ {
|
|
+ ChannelFactory<? extends Channel> factory = PipelineUtils.channelDomainFactory;
|
|
+ Preconditions.checkState( factory != null, "Epoll required to have UNIX sockets" );
|
|
+
|
|
+ return factory;
|
|
+ }
|
|
+
|
|
+ return channelFactory;
|
|
+ }
|
|
+ // Waterfall end
|
|
+
|
|
public static Class<? extends DatagramChannel> getDatagramChannel()
|
|
{
|
|
return epoll ? EpollDatagramChannel.class : NioDatagramChannel.class;
|
|
--
|
|
2.43.0.windows.1
|
|
|