mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Add Timeout to CompletableFuture in GeyserBungeePingPassthrough to Prevent Memory Leak (#4858)
* fix: Add timeout for GeyserBungeePingPassthrough#getPingInformation Signed-off-by: ByteExceptionM <git@byteexception.eu> * fix: Use Geyser Logger instead of Bungee Logger Signed-off-by: ByteExceptionM <git@byteexception.eu> * Fix typo Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> * chore: Add ip suppression if configured Signed-off-by: ByteExceptionM <git@byteexception.eu> * Remove empty line Co-authored-by: chris <github@onechris.mozmail.com> * Remove empty line Co-authored-by: chris <github@onechris.mozmail.com> --------- Signed-off-by: ByteExceptionM <git@byteexception.eu> Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> Co-authored-by: chris <github@onechris.mozmail.com>
This commit is contained in:
parent
305495c923
commit
677a56cf6c
2 changed files with 15 additions and 3 deletions
|
@ -36,6 +36,7 @@ import net.md_5.bungee.api.event.ProxyPingEvent;
|
||||||
import net.md_5.bungee.api.plugin.Listener;
|
import net.md_5.bungee.api.plugin.Listener;
|
||||||
import net.md_5.bungee.protocol.ProtocolConstants;
|
import net.md_5.bungee.protocol.ProtocolConstants;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.ping.GeyserPingInfo;
|
import org.geysermc.geyser.ping.GeyserPingInfo;
|
||||||
import org.geysermc.geyser.ping.IGeyserPingPassthrough;
|
import org.geysermc.geyser.ping.IGeyserPingPassthrough;
|
||||||
|
|
||||||
|
@ -43,6 +44,7 @@ import java.net.InetSocketAddress;
|
||||||
import java.net.SocketAddress;
|
import java.net.SocketAddress;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, Listener {
|
public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, Listener {
|
||||||
|
@ -59,7 +61,17 @@ public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, List
|
||||||
future.complete(event);
|
future.complete(event);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
ProxyPingEvent event = future.join();
|
|
||||||
|
ProxyPingEvent event;
|
||||||
|
|
||||||
|
try {
|
||||||
|
event = future.get(100, TimeUnit.MILLISECONDS);
|
||||||
|
} catch (Throwable cause) {
|
||||||
|
String address = GeyserImpl.getInstance().getConfig().isLogPlayerIpAddresses() ? inetSocketAddress.toString() : "<IP address withheld>";
|
||||||
|
GeyserImpl.getInstance().getLogger().error("Failed to get ping information for " + address, cause);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
ServerPing response = event.getResponse();
|
ServerPing response = event.getResponse();
|
||||||
return new GeyserPingInfo(
|
return new GeyserPingInfo(
|
||||||
response.getDescriptionComponent().toLegacyText(),
|
response.getDescriptionComponent().toLegacyText(),
|
||||||
|
|
|
@ -35,10 +35,10 @@ import java.net.InetSocketAddress;
|
||||||
public interface IGeyserPingPassthrough {
|
public interface IGeyserPingPassthrough {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the MOTD of the server displayed on the multiplayer screen
|
* Gets the ping information, including the MOTD and player count, from the server
|
||||||
*
|
*
|
||||||
* @param inetSocketAddress the ip address of the client pinging the server
|
* @param inetSocketAddress the ip address of the client pinging the server
|
||||||
* @return string of the MOTD
|
* @return the ping information
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress);
|
GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress);
|
||||||
|
|
Loading…
Reference in a new issue