Compare commits

...

8 Commits

Author SHA1 Message Date
dependabot[bot] db2c6d2d43
Merge e3471e6723 into c31d7c5bb8 2024-05-01 20:00:14 +00:00
RaphiMC c31d7c5bb8
Merge remote-tracking branch 'origin/main' 2024-05-01 21:59:56 +02:00
RaphiMC 2f7b134dfd
Updated ViaBedrock to support 1.20.80 2024-05-01 21:59:37 +02:00
Lenni0451 50f49709b0
Improved wildcard domain syntax kick message 2024-05-01 17:51:40 +02:00
RaphiMC 0353a9323b
Added frontend HAProxy support 2024-05-01 17:11:02 +02:00
RK_01 44987bf2d3
Merge pull request #211 from komugikotan/main
Added Japanese language translations
2024-04-30 08:55:14 +02:00
komugikotan 8ac74bff84 Added Japanese language support. 2024-04-29 18:08:53 -04:00
dependabot[bot] e3471e6723
Bump gs.mclo:api from 3.0.1 to 4.0.1
Bumps [gs.mclo:api](https://github.com/aternosorg/mclogs-java) from 3.0.1 to 4.0.1.
- [Release notes](https://github.com/aternosorg/mclogs-java/releases)
- [Commits](https://github.com/aternosorg/mclogs-java/compare/3.0.1...4.0.1)

---
updated-dependencies:
- dependency-name: gs.mclo:api
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-16 05:11:24 +00:00
10 changed files with 206 additions and 18 deletions

View File

@ -12,7 +12,7 @@ For a full user guide go to the [Usage for Players](#usage-for-players-gui) sect
- Classic (c0.0.15 - c0.30 including [CPE](https://wiki.vg/Classic_Protocol_Extension))
- April Fools (3D Shareware, 20w14infinite)
- Combat Snapshots (Combat Test 8c)
- Bedrock Edition 1.20.70 ([Some features are missing](https://github.com/RaphiMC/ViaBedrock#features))
- Bedrock Edition 1.20.80 ([Some features are missing](https://github.com/RaphiMC/ViaBedrock#features))
## Supported Client versions
- Release (1.7.2 - 1.20.6)

View File

@ -59,7 +59,7 @@ dependencies {
include "com.viaversion:viarewind-common:3.1.1-SNAPSHOT"
include "net.raphimc:ViaLegacy:2.2.23-SNAPSHOT"
include "net.raphimc:ViaAprilFools:2.0.12-SNAPSHOT"
include("net.raphimc:ViaBedrock:0.0.6-SNAPSHOT") {
include("net.raphimc:ViaBedrock:0.0.7-SNAPSHOT") {
exclude group: "io.netty"
exclude group: "io.jsonwebtoken"
}
@ -102,7 +102,7 @@ dependencies {
include("org.cloudburstmc.netty:netty-transport-raknet:1.0.0.CR3-SNAPSHOT") {
exclude group: "io.netty"
}
include "gs.mclo:api:3.0.1"
include "gs.mclo:api:4.0.1"
}
sourceSets {

View File

@ -17,12 +17,12 @@
*/
package net.raphimc.viaproxy.protocoltranslator.impl;
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.CompressionProvider;
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.HandItemProvider;
import net.raphimc.viabedrock.protocol.providers.NettyPipelineProvider;
import net.raphimc.viabedrock.protocol.providers.TransferProvider;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicCustomCommandProvider;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicMPPassProvider;
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicWorldHeightProvider;
@ -46,7 +46,7 @@ public class ViaProxyVLLoader extends VLLoader {
Via.getManager().getProviders().use(VersionProvider.class, new ViaProxyVersionProvider());
// ViaBackwards
Via.getManager().getProviders().use(com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider.class, new ViaProxyTransferProvider());
Via.getManager().getProviders().use(TransferProvider.class, new ViaProxyTransferProvider());
// ViaLegacy
Via.getManager().getProviders().use(GameProfileFetcher.class, new ViaProxyGameProfileFetcher());
@ -58,7 +58,6 @@ public class ViaProxyVLLoader extends VLLoader {
// ViaBedrock
Via.getManager().getProviders().use(NettyPipelineProvider.class, new ViaProxyNettyPipelineProvider());
Via.getManager().getProviders().use(TransferProvider.class, new ViaProxyTransferProvider());
// ViaProxy plugins
ViaProxy.EVENT_MANAGER.call(new ViaLoadingEvent());

View File

@ -17,20 +17,21 @@
*/
package net.raphimc.viaproxy.protocoltranslator.providers;
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider;
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.CookieStorage;
import com.viaversion.viaversion.api.connection.UserConnection;
import io.netty.channel.Channel;
import net.raphimc.viabedrock.protocol.providers.TransferProvider;
import net.raphimc.viaproxy.proxy.session.ProxyConnection;
import net.raphimc.viaproxy.proxy.util.CloseAndReturn;
import net.raphimc.viaproxy.proxy.util.TransferDataHolder;
import java.net.InetSocketAddress;
public class ViaProxyTransferProvider extends TransferProvider implements com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider {
public class ViaProxyTransferProvider implements TransferProvider {
@Override
public void connectToServer(UserConnection user, InetSocketAddress newAddress) {
public void connectToServer(UserConnection user, String host, int port) {
final InetSocketAddress newAddress = new InetSocketAddress(host, port);
final Channel channel = ProxyConnection.fromChannel(user.getChannel()).getC2P();
TransferDataHolder.addTempRedirect(channel, newAddress);
if (user.has(CookieStorage.class)) {
@ -42,9 +43,4 @@ public class ViaProxyTransferProvider extends TransferProvider implements com.vi
}
}
@Override
public void connectToServer(UserConnection user, String host, int port) {
this.connectToServer(user, new InetSocketAddress(host, port));
}
}

View File

@ -58,6 +58,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
private final OptionSpec<Boolean> optionBetacraftAuth;
private final OptionSpec<String> optionBackendProxyUrl;
private final OptionSpec<Boolean> optionBackendHaProxy;
private final OptionSpec<Boolean> optionFrontendHaProxy;
private final OptionSpec<Boolean> optionChatSigning;
private final OptionSpec<Integer> optionCompressionThreshold;
private final OptionSpec<Boolean> optionAllowBetaPinging;
@ -75,6 +76,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
private boolean betacraftAuth = false;
private URI backendProxyUrl = null;
private boolean backendHaProxy = false;
private boolean frontendHaProxy = false;
private boolean chatSigning = true;
private int compressionThreshold = 256;
private boolean allowBetaPinging = false;
@ -97,6 +99,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
this.optionBetacraftAuth = this.optionParser.accepts("betacraft-auth").withRequiredArg().ofType(Boolean.class).defaultsTo(this.betacraftAuth);
this.optionBackendProxyUrl = this.optionParser.accepts("backend-proxy-url").withRequiredArg().ofType(String.class).defaultsTo("");
this.optionBackendHaProxy = this.optionParser.accepts("backend-haproxy").withRequiredArg().ofType(Boolean.class).defaultsTo(this.backendHaProxy);
this.optionFrontendHaProxy = this.optionParser.accepts("frontend-haproxy").withRequiredArg().ofType(Boolean.class).defaultsTo(this.frontendHaProxy);
this.optionChatSigning = this.optionParser.accepts("chat-signing").withRequiredArg().ofType(Boolean.class).defaultsTo(this.chatSigning);
this.optionCompressionThreshold = this.optionParser.accepts("compression-threshold").withRequiredArg().ofType(Integer.class).defaultsTo(this.compressionThreshold);
this.optionAllowBetaPinging = this.optionParser.accepts("allow-beta-pinging").withRequiredArg().ofType(Boolean.class).defaultsTo(this.allowBetaPinging);
@ -126,6 +129,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
this.betacraftAuth = this.getBoolean("betacraft-auth", this.betacraftAuth);
this.backendProxyUrl = this.parseProxyUrl(this.getString("backend-proxy-url", ""));
this.backendHaProxy = this.getBoolean("backend-haproxy", this.backendHaProxy);
this.frontendHaProxy = this.getBoolean("frontend-haproxy", this.frontendHaProxy);
this.chatSigning = this.getBoolean("chat-signing", this.chatSigning);
this.compressionThreshold = this.getInt("compression-threshold", this.compressionThreshold);
this.allowBetaPinging = this.getBoolean("allow-beta-pinging", this.allowBetaPinging);
@ -159,6 +163,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
this.betacraftAuth = options.valueOf(this.optionBetacraftAuth);
this.backendProxyUrl = this.parseProxyUrl(options.valueOf(this.optionBackendProxyUrl));
this.backendHaProxy = options.valueOf(this.optionBackendHaProxy);
this.frontendHaProxy = options.valueOf(this.optionFrontendHaProxy);
this.chatSigning = options.valueOf(this.optionChatSigning);
this.compressionThreshold = options.valueOf(this.optionCompressionThreshold);
this.allowBetaPinging = options.valueOf(this.optionAllowBetaPinging);
@ -283,6 +288,15 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
this.set("backend-haproxy", backendHaProxy);
}
public boolean useFrontendHaProxy() {
return this.frontendHaProxy;
}
public void setFrontendHaProxy(final boolean frontendHaProxy) {
this.frontendHaProxy = frontendHaProxy;
this.set("frontend-haproxy", frontendHaProxy);
}
public boolean shouldSignChat() {
return this.chatSigning;
}

View File

@ -19,6 +19,7 @@ package net.raphimc.viaproxy.proxy.client2proxy;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.handler.codec.haproxy.HAProxyMessageDecoder;
import net.raphimc.netminecraft.constants.MCPipeline;
import net.raphimc.netminecraft.netty.connection.MinecraftChannelInitializer;
import net.raphimc.netminecraft.packet.registry.PacketRegistryUtil;
@ -31,6 +32,8 @@ import java.util.function.Supplier;
public class Client2ProxyChannelInitializer extends MinecraftChannelInitializer {
public static final String VIAPROXY_HAPROXY_DECODER_NAME = "viaproxy-haproxy-decoder";
public static final String VIAPROXY_HAPROXY_HANDLER_NAME = "viaproxy-haproxy-handler";
public static final String LEGACY_PASSTHROUGH_INITIAL_HANDLER_NAME = "legacy-passthrough-initial-handler";
public Client2ProxyChannelInitializer(final Supplier<ChannelHandler> handlerSupplier) {
@ -44,6 +47,10 @@ public class Client2ProxyChannelInitializer extends MinecraftChannelInitializer
return;
}
if (ViaProxy.getConfig().useFrontendHaProxy()) {
channel.pipeline().addLast(VIAPROXY_HAPROXY_DECODER_NAME, new HAProxyMessageDecoder());
channel.pipeline().addLast(VIAPROXY_HAPROXY_HANDLER_NAME, new HAProxyHandler());
}
if (ViaProxy.getConfig().shouldAllowLegacyClientPassthrough()) {
channel.pipeline().addLast(LEGACY_PASSTHROUGH_INITIAL_HANDLER_NAME, new LegacyPassthroughInitialHandler());
}

View File

@ -134,19 +134,21 @@ public class Client2ProxyHandler extends SimpleChannelInboundHandler<IPacket> {
if (handshakeParts[0].toLowerCase().contains(".viaproxy.")) {
handshakeParts[0] = handshakeParts[0].substring(0, handshakeParts[0].toLowerCase().lastIndexOf(".viaproxy."));
} else {
throw CloseAndReturn.INSTANCE;
throw new IllegalArgumentException();
}
final ArrayHelper arrayHelper = ArrayHelper.instanceOf(handshakeParts[0].split(Pattern.quote("_")));
if (arrayHelper.getLength() < 3) {
throw CloseAndReturn.INSTANCE;
throw new IllegalArgumentException();
}
final String versionString = arrayHelper.get(arrayHelper.getLength() - 1);
serverVersion = ProtocolVersionUtil.fromNameLenient(versionString);
if (serverVersion == null) throw CloseAndReturn.INSTANCE;
if (serverVersion == null) {
this.proxyConnection.kickClient("§cWrong domain syntax!\n§cUnknown server version.");
}
final String connectIP = arrayHelper.getAsString(0, arrayHelper.getLength() - 3, "_");
final int connectPort = arrayHelper.getInteger(arrayHelper.getLength() - 2);
serverAddress = AddressUtil.parse(connectIP + ":" + connectPort, serverVersion);
} catch (CloseAndReturn e) {
} catch (IllegalArgumentException e) {
this.proxyConnection.kickClient("§cWrong domain syntax! §6Please use:\n§7address_port_version.viaproxy.hostname");
}
} else if (ViaProxy.getConfig().getWildcardDomainHandling() == ViaProxyConfig.WildcardDomainHandling.INTERNAL) {

View File

@ -0,0 +1,51 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2021-2024 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.proxy.client2proxy;
import io.netty.channel.AbstractChannel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.haproxy.HAProxyCommand;
import io.netty.handler.codec.haproxy.HAProxyMessage;
import net.lenni0451.reflect.stream.RStream;
import java.net.InetSocketAddress;
public class HAProxyHandler extends SimpleChannelInboundHandler<HAProxyMessage> {
@Override
public void channelActive(ChannelHandlerContext ctx) {
}
@Override
protected void channelRead0(ChannelHandlerContext ctx, HAProxyMessage message) throws Exception {
if (message.command() != HAProxyCommand.PROXY) {
throw new UnsupportedOperationException("Unsupported HAProxy command: " + message.command());
}
if (message.sourceAddress() != null) {
final InetSocketAddress sourceAddress = new InetSocketAddress(message.sourceAddress(), message.sourcePort());
if (ctx.channel() instanceof AbstractChannel) {
RStream.of(AbstractChannel.class, ctx.channel()).fields().by("remoteAddress").set(sourceAddress);
}
}
ctx.pipeline().remove(this);
super.channelActive(ctx);
}
}

View File

@ -0,0 +1,116 @@
# ViaProxy language file
#
# Language contribution guidelines:
# - Please use the same file content structure as in the en_US language file.
# - Use the en_US language file as a reference/template for your language file.
# - Keep the translations understandable and precise.
# - Do not use or rely on machine translation (Google Translate, DeepL, etc.) exclusively.
# - Do not copy an english translation into your language file. The en_US translation will be used as a fallback automatically.
# - Include this header (untranslated) in your language file.
# The display name of the language
language.name=日本語 (日本)
# The name of the author of the language file (Your name)
language.author=Komugikotan
generic.cancel=キャンセル
generic.could_not_open_url=次のリンクを開けませんでした: %s
tab.general.name=全般
tab.general.server_address.label=サーバーアドレス:
tab.general.server_address.tooltip=サポートされている形式:\n- アドレス\n- アドレス:ポート番号\n- ClassiCube Direct URL
tab.general.server_version.label=サーバーバージョン:
tab.general.minecraft_account.label=Minecraftアカウント:
tab.general.minecraft_account.option_no_account=アカウントを使用しない
tab.general.minecraft_account.option_select_account=選択したアカウントを使用する
tab.general.minecraft_account.option_openauthmod=OpenAuthModを使用する
tab.general.betacraft_auth.label=BetaCraft Auth (クラシック)
tab.general.betacraft_auth.tooltip=BetaCraft Authを有効にすると、online modeが有効化されたクラシックサーバーに参加できるようになります。
tab.general.state.loading=ViaProxyをロードしています...
tab.general.state.start=起動
tab.general.state.starting=起動中...
tab.general.state.stop=停止
tab.general.state.running=ViaProxyが起動しましたMinecraftバージョン: %s で %s に接続してください
tab.general.warning.ban_warning.line1=ViaProxyはバージョンの違いによるアイテムやブロック、動きの違いでアンチチート等を動作させることがあります。
tab.general.warning.bedrock_warning.line1=ViaBedrockは現在初期開発段階であり一般的な使用には向いていません。
tab.general.warning.risk=自己の責任において使用してください!
tab.general.error.no_server_version_selected=サーバーバージョンを選択してください!
tab.general.error.invalid_classicube_url=ClassiCubeのDirect URLが無効です
tab.general.error.invalid_server_address=サーバーアドレスが無効です!
tab.general.error.invalid_bind_address=転送アドレスが無効です!
tab.general.error.invalid_proxy_url=プロキシーのURLが無効です
tab.general.error.failed_to_start=ViaProxyの起動に失敗しました指定されたローカルポートがすでに使われていないことを確認してからもう一度試してください。
tab.advanced.name=詳細設定
tab.advanced.bind_address.label=転送アドレス:
tab.advanced.bind_address.tooltip=ViaProxyが接続を受け付けるアドレス
tab.advanced.proxy_url.label=プロキシのURL:
tab.advanced.proxy_url.tooltip=TCP接続に使われるSOCKS(4/5)/HTTP(S)プロキシのURL\nサポートされている形式:\n- type://address:port\n- type://username:password@address:port
tab.advanced.proxy_online_mode.label=プロキシのオンラインモード(認証モード)の有効化
tab.advanced.proxy_online_mode.tooltip=プロキシのオンラインモードを有効にすることでクライアントで有効なMinecraft アカウントでログインすることが必要になります。\n有効にすることで、オンラインサーバー上でスキンと署名付きメッセージの使用が可能になります。
tab.advanced.legacy_skin_loading.label=レガシーなスキンのロードの有効化
tab.advanced.legacy_skin_loading.tooltip=レガシーなスキンのロードを有効化することで1.6.4以下のサーバーでスキンの使用が可能になります。
tab.advanced.chat_signing.label=署名付きメッセージの有効化
tab.advanced.chat_signing.tooltip=1.19以上のサーバーで署名付きメッセージを送信することを有効化します。
tab.advanced.ignore_packet_translation_errors.label=パケットの変換エラーを無視
tab.advanced.ignore_packet_translation_errors.tooltip=これを有効にすることでパケットの変化ネラーが発生した際、ただコンソールにエラーを吐くだけではなくクライアントが切断されることを防ぎます。\nこの機能を有効化すると変換に失敗したパケットの種類のよって問題が発生することがあります。
tab.advanced.allow_beta_pinging.label=b1.7.3以下のバージョンでのサーバーピングを許可
tab.advanced.allow_beta_pinging.tooltip=これを有効にすることでb1.7.3以下のサーバーでピングを送信します。頻繁な接続をブロックするサーバーでは問題が発生することがあります。
tab.advanced.create_viaversion_dump.label=ViaVersionのダンプデーターを作成
tab.advanced.create_viaversion_dump.success=ViaVersionのダンプデーターのリンクをクリップボードにコピーしました。
tab.advanced.upload_latest_log.label=最新のログをアップロード
tab.advanced.upload_latest_log.success=ログを %s にアップロードしました(クリップボードにコピーしました)。
tab.advanced.upload_latest_log.error_generic=ログをアップロードできませんでした: %s
tab.advanced.upload_latest_log.error_not_found=ログが見つかりませんでした。
tab.accounts.name=アカウント
tab.accounts.description.line1=オンラインモードが有効化されたサーバーにViaproxyで参加するにはMinecraftアカウントでログインしている必要があります。使用したいアカウントを右クリックすることで選択できます。デフォルトでは一番最初のものが使用されます。
tab.accounts.description.line2=アカウントを頻繁に変える場合は、OpenAuthModをクライアントにインストールすることができます。これをインストールすることでクライアントでログインしているアカウントを使ってViaProxyで接続できます。
tab.accounts.list.context_menu.select=アカウントを選択
tab.accounts.list.context_menu.remove=削除
tab.accounts.list.context_menu.move_up=上に上げる↑
tab.accounts.list.context_menu.move_down=下に下げる↓
tab.accounts.add.title=アカウントを追加
tab.accounts.add_offline.label=オフラインアカウント
tab.accounts.add_offline.enter_username=オフラインアカウントのユーザー名を入力してください:
tab.accounts.add_microsoft.label=Microsoftアカウント
tab.accounts.add_bedrock.label=統合版アカウント
tab.accounts.add.success=アカウント「 %s 」を正常に追加しました。
tab.accounts.add.timeout=ログイン要求がタイムアウトしました。\n%s秒以内にログインしてください。
tab.realms.name=Realms
tab.realms.error_generic=Realmsリクエストを処理できませんでした: %s
tab.realms.error_generic_label=不明なエラーが発生しました。
tab.realms.error_account=選択されたアカウントをリフレッシュできませんでした。これは有効期限を過ぎたトークンを使用しているか回数制限に達したアカウントを使用しているせいかもしれません。少し時間をおいた後もう一度試してください。問題が解決しない場合は、一度アカウントを削除してもう一度追加してください。
tab.realms.error_account_label=アカウントエラー
tab.realms.no_account=アカウントが選択されていません。
tab.realms.unsupported_account=サポートされていないアカウントが選択されています。
tab.realms.refreshing_account=アカウントをリフレッシュしています...
tab.realms.availability_check=利用が可能か確認しています...
tab.realms.unavailable=あなたの使用しているViaProxyのバージョンが古くMinecraft Realmsと互換性がありません。\n最新版のViaProxyを使用してください。
tab.realms.loading_worlds=ワールドを読み込み中です...
tab.realms.no_worlds=ワールドが見つかりませんでした。
tab.realms.account=アカウント: %s
tab.realms.release=リリース
tab.realms.snapshot=スナップショット
tab.realms.join=参加
tab.realms.joining=参加中...
tab.realms.accept_tos=Minecraft Realmsを使用するには利用規約に同意してください: %s
tab.realms.expired=このRealmは期限切れです。
tab.realms.incompatible=このRealmのMinecraftバージョンが古すぎるか新しすぎます。
tab.ui_settings.name=UI設定
tab.ui_settings.language.label=言語:
tab.ui_settings.language.completion=%s翻訳済み
tab.ui_settings.language.author=by %s
tab.ui_settings.language.success=言語が %s (%s)に変更されました。ViaProxyを再起動します
popup.login_account.title=アカウントを追加
popup.login_account.instructions.browser=以下のURLをブラウザで開いてください
popup.login_account.instructions.close=ログイン後、このポップアップは自動的に閉じられます。
popup.download.title=ダウンロード中...
popup.update.info=あなたの使用しているViaProxyは古いバージョンです\n使用しているバージョン: %s\n最新バージョン: %s
popup.update.question=アップデートしますか?
popup.update.success=最新バージョンのViaProxyをダウンロードしました。ViaProxyを再起動します

View File

@ -36,6 +36,9 @@ backend-proxy-url: ""
# Send HAProxy protocol messages to the target server.
backend-haproxy: false
#
# Read HAProxy protocol messages from client connections.
frontend-haproxy: false
#
# Enables sending signed chat messages on >= 1.19 servers.
chat-signing: true
#