mirror of
https://github.com/PaperMC/Waterfall.git
synced 2025-02-26 08:41:28 +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: 8a80435e Minecraft 1.21.4 support 20a71b06 Minecraft 1.21.4-rc3 support b376f615 Minecraft 1.21.4-pre2 support 373dab05 Minecraft 1.21.4-pre1 support f6b40b11 #3758: Handle LoginPayloadResponse in UpstreamBridge 81b118a8 #3759: Remove unnecessary protocol version check for UnsignedClientCommand 7a42f127 #3760: Fix possible NPE when trying to get encoder/decoder protocol
147 lines
7.9 KiB
Diff
147 lines
7.9 KiB
Diff
From 204a28fabe424bb120b2c9c46adb0760ab10e5cf 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 7262a514..ecfce56e 100644
|
|
--- a/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
+++ b/proxy/src/main/java/net/md_5/bungee/UserConnection.java
|
|
@@ -429,7 +429,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 75d2bd0e..37e37aaf 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;
|
|
@@ -124,6 +125,12 @@ public class PipelineUtils
|
|
|
|
private static boolean epoll;
|
|
private static boolean io_uring;
|
|
+ // 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
|
|
{
|
|
@@ -154,6 +161,12 @@ public class PipelineUtils
|
|
}
|
|
}
|
|
}
|
|
+ // Waterfall start: netty reflection -> factory
|
|
+ serverChannelFactory = io_uring ? IOUringServerSocketChannel::new : epoll ? EpollServerSocketChannel::new : NioServerSocketChannel::new;
|
|
+ serverChannelDomainFactory = io_uring ? IOUringServerSocketChannel::new : epoll ? EpollServerDomainSocketChannel::new : null;
|
|
+ channelFactory = io_uring ? IOUringSocketChannel::new : epoll ? EpollSocketChannel::new : NioSocketChannel::new;
|
|
+ channelDomainFactory = io_uring ? IOUringSocketChannel::new : epoll ? EpollDomainSocketChannel::new : null;
|
|
+ // Waterfall end
|
|
}
|
|
|
|
public static EventLoopGroup newEventLoopGroup(int threads, ThreadFactory factory)
|
|
@@ -185,6 +198,34 @@ public class PipelineUtils
|
|
return io_uring ? IOUringSocketChannel.class : 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 io_uring ? IOUringDatagramChannel.class : epoll ? EpollDatagramChannel.class : NioDatagramChannel.class;
|
|
--
|
|
2.47.1
|
|
|