Search in sources :

Example 1 with ServerLoginPacketListenerImplAccessor

use of org.spongepowered.common.accessor.server.network.ServerLoginPacketListenerImplAccessor in project SpongeCommon by SpongePowered.

the class VelocityForwardingInfo method sendQuery.

public static void sendQuery(final ServerLoginPacketListenerImpl mcConn) {
    final EngineConnection conn = (EngineConnection) mcConn;
    VelocityChannel.CHANNEL.sendTo(conn, cbuf -> {
    }).whenComplete((response, error) -> {
        if (error != null) {
            if (error instanceof NoResponseException) {
                conn.close(Component.text("This server requires you to connect with Velocity."));
            }
            return;
        }
        if (!VelocityForwardingInfo.checkIntegrity(response)) {
            conn.close(Component.text("Unable to verify player details. Is your forwarding secret correct?"));
            return;
        }
        final ConnectionAccessor connectionAccessor = (ConnectionAccessor) mcConn.getConnection();
        connectionAccessor.accessor$address(new InetSocketAddress(VelocityForwardingInfo.readAddress(response), ((InetSocketAddress) mcConn.getConnection().getRemoteAddress()).getPort()));
        ((ServerLoginPacketListenerImplAccessor) mcConn).accessor$gameProfile(VelocityForwardingInfo.createProfile(response));
    }).exceptionally(err -> {
        if (!(err instanceof NoResponseException)) {
            // Handled above
            VelocityForwardingInfo.LOGGER.error("Failed to process velocity forwarding info", err);
            conn.close(Component.text("Invalid forwarding information received!"));
        }
        return null;
    });
}
Also used : MessageDigest(java.security.MessageDigest) GameProfile(com.mojang.authlib.GameProfile) SecretKeySpec(javax.crypto.spec.SecretKeySpec) FriendlyByteBuf(net.minecraft.network.FriendlyByteBuf) InetAddress(java.net.InetAddress) RawDataChannel(org.spongepowered.api.network.channel.raw.RawDataChannel) ByteBuf(io.netty.buffer.ByteBuf) Component(net.kyori.adventure.text.Component) Property(com.mojang.authlib.properties.Property) ResourceKey(org.spongepowered.api.ResourceKey) ServerLoginPacketListenerImpl(net.minecraft.server.network.ServerLoginPacketListenerImpl) EngineConnection(org.spongepowered.api.network.EngineConnection) NoResponseException(org.spongepowered.api.network.channel.NoResponseException) ServerLoginPacketListenerImplAccessor(org.spongepowered.common.accessor.server.network.ServerLoginPacketListenerImplAccessor) Sponge(org.spongepowered.api.Sponge) Mac(javax.crypto.Mac) InetSocketAddress(java.net.InetSocketAddress) StandardCharsets(java.nio.charset.StandardCharsets) ChannelBuf(org.spongepowered.api.network.channel.ChannelBuf) Logger(org.apache.logging.log4j.Logger) ChannelExceptionHandler(org.spongepowered.api.network.channel.ChannelExceptionHandler) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) SpongeConfigs(org.spongepowered.common.applaunch.config.core.SpongeConfigs) ConnectionAccessor(org.spongepowered.common.accessor.network.ConnectionAccessor) InvalidKeyException(java.security.InvalidKeyException) InetAddresses(com.google.common.net.InetAddresses) LogManager(org.apache.logging.log4j.LogManager) RawHandshakeDataChannel(org.spongepowered.api.network.channel.raw.handshake.RawHandshakeDataChannel) InetSocketAddress(java.net.InetSocketAddress) EngineConnection(org.spongepowered.api.network.EngineConnection) ConnectionAccessor(org.spongepowered.common.accessor.network.ConnectionAccessor) NoResponseException(org.spongepowered.api.network.channel.NoResponseException)

Aggregations

InetAddresses (com.google.common.net.InetAddresses)1 GameProfile (com.mojang.authlib.GameProfile)1 Property (com.mojang.authlib.properties.Property)1 ByteBuf (io.netty.buffer.ByteBuf)1 InetAddress (java.net.InetAddress)1 InetSocketAddress (java.net.InetSocketAddress)1 StandardCharsets (java.nio.charset.StandardCharsets)1 InvalidKeyException (java.security.InvalidKeyException)1 MessageDigest (java.security.MessageDigest)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 Mac (javax.crypto.Mac)1 SecretKeySpec (javax.crypto.spec.SecretKeySpec)1 Component (net.kyori.adventure.text.Component)1 FriendlyByteBuf (net.minecraft.network.FriendlyByteBuf)1 ServerLoginPacketListenerImpl (net.minecraft.server.network.ServerLoginPacketListenerImpl)1 LogManager (org.apache.logging.log4j.LogManager)1 Logger (org.apache.logging.log4j.Logger)1 ResourceKey (org.spongepowered.api.ResourceKey)1 Sponge (org.spongepowered.api.Sponge)1 EngineConnection (org.spongepowered.api.network.EngineConnection)1