Search in sources :

Example 6 with AddressParser

use of com.viaversion.fabric.common.AddressParser in project ViaFabric by ViaVersion.

the class MixinConnectScreenThread method resolveViaFabricAddr.

@Redirect(method = "run()V", at = @At(value = "INVOKE", target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
    AddressParser viaAddr = new AddressParser().parse(address);
    if (viaAddr.viaSuffix == null) {
        return InetAddress.getByName(address);
    }
    InetAddress resolved = InetAddress.getByName(viaAddr.serverAddress);
    return InetAddress.getByAddress(resolved.getHostName() + "." + viaAddr.getSuffixWithOptions(), resolved.getAddress());
}
Also used : AddressParser(com.viaversion.fabric.common.AddressParser) InetAddress(java.net.InetAddress) Redirect(org.spongepowered.asm.mixin.injection.Redirect)

Example 7 with AddressParser

use of com.viaversion.fabric.common.AddressParser in project ViaFabric by ViaVersion.

the class MixinServerPinger method resolveViaFabricAddr.

@Redirect(method = "add", at = @At(value = "INVOKE", target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
    AddressParser viaAddr = new AddressParser().parse(address);
    if (viaAddr.viaSuffix == null) {
        return InetAddress.getByName(address);
    }
    InetAddress resolved = InetAddress.getByName(viaAddr.serverAddress);
    return InetAddress.getByAddress(resolved.getHostName() + "." + viaAddr.getSuffixWithOptions(), resolved.getAddress());
}
Also used : AddressParser(com.viaversion.fabric.common.AddressParser) InetAddress(java.net.InetAddress) Redirect(org.spongepowered.asm.mixin.injection.Redirect)

Example 8 with AddressParser

use of com.viaversion.fabric.common.AddressParser in project ViaFabric by ViaVersion.

the class MixinConnectScreenThread method resolveViaFabricAddr.

@Redirect(method = "run()V", at = @At(value = "INVOKE", target = "Ljava/net/InetAddress;getByName(Ljava/lang/String;)Ljava/net/InetAddress;"))
private InetAddress resolveViaFabricAddr(String address) throws UnknownHostException {
    AddressParser viaAddr = new AddressParser().parse(address);
    if (viaAddr.viaSuffix == null) {
        return InetAddress.getByName(address);
    }
    InetAddress resolved = InetAddress.getByName(viaAddr.serverAddress);
    return InetAddress.getByAddress(resolved.getHostName() + "." + viaAddr.getSuffixWithOptions(), resolved.getAddress());
}
Also used : AddressParser(com.viaversion.fabric.common.AddressParser) InetAddress(java.net.InetAddress) Redirect(org.spongepowered.asm.mixin.injection.Redirect)

Example 9 with AddressParser

use of com.viaversion.fabric.common.AddressParser in project ViaFabric by ViaVersion.

the class MixinServerAddress method modifySrvAddr.

@Redirect(method = "parse", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ServerAddress;resolveSrv(Ljava/lang/String;)[Ljava/lang/String;"))
private static String[] modifySrvAddr(String address) {
    AddressParser viaAddr = new AddressParser().parse(address);
    if (viaAddr.viaSuffix == null) {
        return resolveSrv(address);
    }
    String[] resolvedSrv = resolveSrv(viaAddr.serverAddress);
    resolvedSrv[0] = resolvedSrv[0].replaceAll("\\.$", "") + "." + viaAddr.getSuffixWithOptions();
    return resolvedSrv;
}
Also used : AddressParser(com.viaversion.fabric.common.AddressParser) Redirect(org.spongepowered.asm.mixin.injection.Redirect)

Example 10 with AddressParser

use of com.viaversion.fabric.common.AddressParser in project ViaFabric by ViaVersion.

the class AbstractFabricVersionProvider method getClosestServerProtocol.

@Override
public int getClosestServerProtocol(UserConnection connection) throws Exception {
    if (connection.isClientSide()) {
        ProtocolInfo info = Objects.requireNonNull(connection.getProtocolInfo());
        if (!getConfig().isClientSideEnabled())
            return info.getProtocolVersion();
        int serverVer = getConfig().getClientSideVersion();
        SocketAddress addr = connection.getChannel().remoteAddress();
        if (addr instanceof InetSocketAddress) {
            AddressParser parser = new AddressParser();
            Integer addrVersion = parser.parse(((InetSocketAddress) addr).getHostName()).protocol;
            if (addrVersion != null) {
                serverVer = addrVersion;
            }
            try {
                if (serverVer == -2) {
                    // Hope protocol was autodetected
                    ProtocolVersion autoVer = detectVersion((InetSocketAddress) addr).getNow(null);
                    if (autoVer != null) {
                        serverVer = autoVer.getVersion();
                    }
                }
            } catch (Exception e) {
                getLogger().warning("Couldn't auto detect: " + e);
            }
        }
        boolean blocked = checkAddressBlocked(addr);
        boolean supported = ProtocolUtils.isSupported(serverVer, info.getProtocolVersion());
        handleMulticonnectPing(connection, info, blocked, serverVer);
        if (blocked || !supported)
            serverVer = info.getProtocolVersion();
        return serverVer;
    }
    NativeVersionProvider natProvider = Via.getManager().getProviders().get(NativeVersionProvider.class);
    if (natProvider != null) {
        return ProtocolVersion.getProtocol(natProvider.getNativeServerVersion()).getVersion();
    }
    return super.getClosestServerProtocol(connection);
}
Also used : AddressParser(com.viaversion.fabric.common.AddressParser) NativeVersionProvider(com.viaversion.fabric.common.platform.NativeVersionProvider) InetSocketAddress(java.net.InetSocketAddress) ProtocolInfo(com.viaversion.viaversion.api.connection.ProtocolInfo) SocketAddress(java.net.SocketAddress) InetSocketAddress(java.net.InetSocketAddress) ProtocolVersion(com.viaversion.viaversion.api.protocol.version.ProtocolVersion) CancelException(com.viaversion.viaversion.exception.CancelException) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Aggregations

AddressParser (com.viaversion.fabric.common.AddressParser)15 InetAddress (java.net.InetAddress)11 Redirect (org.spongepowered.asm.mixin.injection.Redirect)11 InetSocketAddress (java.net.InetSocketAddress)4 UnknownHostException (java.net.UnknownHostException)3 Optional (java.util.Optional)3 Address (net.minecraft.client.network.Address)3 AllowedAddressResolver (net.minecraft.client.network.AllowedAddressResolver)3 ServerAddress (net.minecraft.client.network.ServerAddress)3 Mixin (org.spongepowered.asm.mixin.Mixin)3 Shadow (org.spongepowered.asm.mixin.Shadow)3 At (org.spongepowered.asm.mixin.injection.At)3 Inject (org.spongepowered.asm.mixin.injection.Inject)3 CallbackInfoReturnable (org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable)3 NativeVersionProvider (com.viaversion.fabric.common.platform.NativeVersionProvider)1 ProtocolInfo (com.viaversion.viaversion.api.connection.ProtocolInfo)1 ProtocolVersion (com.viaversion.viaversion.api.protocol.version.ProtocolVersion)1 CancelException (com.viaversion.viaversion.exception.CancelException)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 SocketAddress (java.net.SocketAddress)1