remove configs default-parameters, default-backend-port and require-host-name

"default-backend-port" and "require-host-name" - They were created with transparent proxying in mind, but it's probably an unused feature.
"default-parameters" - If you need to connect to only one backend server, ViaProxy is probably the best alternative
This commit is contained in:
creeper123123321 2025-08-13 17:52:59 -03:00
parent cfc3958fff
commit 76f30b8b3c
5 changed files with 33 additions and 58 deletions

1
.gitignore vendored
View File

@ -4,3 +4,4 @@
/config
/logs
node_modules/
.kotlin/

View File

@ -225,9 +225,6 @@ object PacketRegistry {
}
}
val protocolRangeToId = TreeRangeMap.create<ProtocolVersion, Int>()
idByProtocol.forEach { (range, id) -> protocolRangeToId.put(range, id) }
entriesEncoding.computeIfAbsent(direction to klass) { TreeRangeMap.create() }.also { rangeMap ->
idByProtocol.forEach { (protocolRange, packetId) ->
if (rangeMap.subRangeMap(protocolRange).asMapOfRanges().isNotEmpty())

View File

@ -2,7 +2,6 @@ package com.viaversion.aas.config
import com.google.common.net.HostAndPort
import com.viaversion.aas.secureRandom
import com.viaversion.aas.util.AddressParser
import com.viaversion.aas.viaaasLoggerJava
import com.viaversion.viaversion.util.Config
import net.coobird.thumbnailator.Thumbnails
@ -15,12 +14,9 @@ import java.net.URL
import java.util.*
object VIAaaSConfig : Config(File("config/viaaas.yml"), viaaasLoggerJava), com.viaversion.viaversion.api.configuration.Config {
var defaultParameters: Map<Int, AddressParser> = emptyMap()
var bindAddresses = emptyList<HostAndPort>()
var hostName: List<String> = emptyList()
var blockLocalAddress = true
var requireHostName: Boolean = true
var defaultBackendPort: Int? = null
var blockedBackAddresses: List<String> = emptyList()
var allowedBackAddresses: List<String> = emptyList()
var forceOnlineMode: Boolean = false
@ -48,14 +44,9 @@ object VIAaaSConfig : Config(File("config/viaaas.yml"), viaaasLoggerJava), com.v
private fun reloadFields() {
reloadIcon()
defaultParameters = this.get("default-parameters", emptyMap<Int, String>())!!.map {
(it.key as Number).toInt() to AddressParser().parse(it.value)
}.toMap()
bindAddresses = this.getStringList("bind-addresses").map { HostAndPort.fromString(it).withDefaultPort(25565) }
hostName = this.get("host-name", emptyList<String>())!!.map { it }
blockLocalAddress = this.getBoolean("block-local-address", true)
requireHostName = this.getBoolean("require-host-name", true)
defaultBackendPort = this.getInt("default-backend-port", 25565).let { if (it == -1) null else it }
blockedBackAddresses = this.get("blocked-back-addresses", emptyList())!!
allowedBackAddresses = this.get("allowed-back-addresses", emptyList())!!
forceOnlineMode = this.getBoolean("force-online-mode", false)

View File

@ -60,46 +60,33 @@ class HandshakeState : ConnectionState {
private fun handleVirtualHost(handler: MinecraftHandler, packet: Handshake) {
val virtualPort = packet.port
val extraData = packet.address.substringAfter(0.toChar(), missingDelimiterValue = "").ifEmpty { null }
val virtualHostNoExtra = packet.address.substringBefore(0.toChar())
val extraData = packet.address.let(::extractExtraHandshakeData)
val virtualHostNoExtra = packet.address.let(::removeHandshakeExtraData)
var parsed = AddressParser().parse(virtualHostNoExtra, VIAaaSConfig.hostName)
val hadHostname = parsed.viaSuffix != null
var usedDefault = false
val useWebParameters = matchesBaseHostname(virtualHostNoExtra)
if (!hadHostname) {
var defaultBack = VIAaaSConfig.defaultParameters[virtualPort]
if (defaultBack == null) defaultBack = VIAaaSConfig.defaultParameters[-1]
if (defaultBack != null) {
parsed = defaultBack
usedDefault = true
}
var parsed: AddressParser? = null
var parsedHadViaSuffix = false
if (!useWebParameters) {
parsed = AddressParser().parse(virtualHostNoExtra, VIAaaSConfig.hostName)
parsedHadViaSuffix = parsed.viaSuffix != null
if (!parsedHadViaSuffix) parsed = null
}
val backProto = parsed.protocol ?: AUTO
val backAddress = parsed.serverAddress!!
val port = parsed.port ?: VIAaaSConfig.defaultBackendPort ?: virtualPort
val host = HostAndPort.fromParts(backAddress, port)
val frontOnline = parsed.online
val addressFromWeb = VIAaaSConfig.hostName.any { parsed.serverAddress.equals(it, ignoreCase = true) }
val backProto = parsed?.protocol ?: AUTO
val backAutoDetect = backProto == AUTO
val backendHostPort = parsed?.let(::hostPortFromParser)
handler.data.backServerVer = backProto
handler.data.autoDetectProtocol = backProto == AUTO
handler.data.autoDetectProtocol = backAutoDetect
(handler.data.state as? LoginState)?.also {
it.frontOnline = frontOnline
it.backName = parsed.username
if (!addressFromWeb) {
it.backAddress = host
}
it.frontOnline = parsed?.online
it.backName = parsed?.username
it.backAddress = backendHostPort
it.extraData = extraData
}
(handler.data.state as? StatusState)?.also {
if (!addressFromWeb) {
it.address = host
}
it.address = backendHostPort
}
val playerAddr = handler.data.frontHandler.endRemoteAddress
@ -108,12 +95,25 @@ class HandshakeState : ConnectionState {
playerAddr, handler.data.state.state.name, virtualHostNoExtra, virtualPort, handler.data.frontVer
)
if (!usedDefault && !hadHostname && VIAaaSConfig.requireHostName && !addressFromWeb
) {
if (!parsedHadViaSuffix && !useWebParameters) {
throw StacklessException("Missing parts in hostname")
}
}
private fun extractExtraHandshakeData(hsData: String): String? {
return hsData.substringAfter(0.toChar(), missingDelimiterValue = "").ifEmpty { null }
}
private fun removeHandshakeExtraData(hsData: String) = hsData.substringBefore(0.toChar())
private fun matchesBaseHostname(hostAddress: String) : Boolean {
return VIAaaSConfig.hostName.any { hostAddress.equals(it, ignoreCase = true) }
}
private fun hostPortFromParser(parsed: AddressParser): HostAndPort {
return HostAndPort.fromParts(parsed.serverAddress, parsed.port ?: 25565)
}
override fun handlePacket(handler: MinecraftHandler, ctx: ChannelHandlerContext, packet: Packet) {
if (packet !is Handshake) throw StacklessException("Invalid packet!")

View File

@ -17,25 +17,11 @@ compression-level: 6
######
# VIAaaS virtual hosts options
######
# Requires virtual host to contain the value from "host-name" as a suffix.
# A false value will allow virtual hosts with no suffix, connecting to the hostname sent by client.
# A false value could be used for transparent proxying or for MiTM.
require-host-name: true
# Host names of this instance. Will be used as a suffix.
host-name:
- viaaas.localhost
- via.localhost
- via.localho.st
# Default port to be used when connecting to the backend server.
# Use -1 to reuse the port sent by client, useful for transparent proxying.
default-backend-port: 25565
# A list of backend address if the address host-name is missing
# It will be chosen via virtual port
# May be useful for BungeeCord
# default-backends:
# -1: "anyport.example.com._v1_12._of"
# 25565: "test.geysermc.org._v1_8"
default-parameters: {}
#
######
# Address filtering