From 0f283c484d425d29939a02886892e87588e18f05 Mon Sep 17 00:00:00 2001 From: bitxer <24569832+bitxer@users.noreply.github.com> Date: Thu, 19 Dec 2024 18:11:18 +0800 Subject: [PATCH] Added experimental settings to prefer ipv6 when it is available --- Telegram/SourceFiles/mtproto/session_private.cpp | 11 ++++++++++- Telegram/SourceFiles/mtproto/session_private.h | 2 ++ .../SourceFiles/settings/settings_experimental.cpp | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/mtproto/session_private.cpp b/Telegram/SourceFiles/mtproto/session_private.cpp index 96a0c8268..b6037515f 100644 --- a/Telegram/SourceFiles/mtproto/session_private.cpp +++ b/Telegram/SourceFiles/mtproto/session_private.cpp @@ -5,6 +5,7 @@ the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ +#include "base/options.h" #include "mtproto/session_private.h" #include "mtproto/details/mtproto_bound_key_creator.h" @@ -138,8 +139,16 @@ void WrapInvokeAfter( return different; } +base::options::toggle OptionPreferIPv6({ + .id = kOptionPreferIPv6, + .name = "Prefer IPv6", + .description = "Prefer IPv6 if it is available", +}); + } // namespace +const char kOptionPreferIPv6[] = "prefer-ipv6"; + SessionPrivate::SessionPrivate( not_null instance, not_null thread, @@ -187,7 +196,7 @@ void SessionPrivate::appendTestConnection( const bytes::vector &protocolSecret) { QWriteLocker lock(&_stateMutex); - const auto priority = (qthelp::is_ipv6(ip) ? 0 : 1) + const auto priority = (qthelp::is_ipv6(ip) ? (OptionPreferIPv6.value() ? 2 : 0) : 1) + (protocol == DcOptions::Variants::Tcp ? 1 : 0) + (protocolSecret.empty() ? 0 : 1); _testConnections.push_back({ diff --git a/Telegram/SourceFiles/mtproto/session_private.h b/Telegram/SourceFiles/mtproto/session_private.h index f54d95097..7ab6558c9 100644 --- a/Telegram/SourceFiles/mtproto/session_private.h +++ b/Telegram/SourceFiles/mtproto/session_private.h @@ -240,5 +240,7 @@ private: }; +extern const char kOptionPreferIPv6[]; + } // namespace details } // namespace MTP diff --git a/Telegram/SourceFiles/settings/settings_experimental.cpp b/Telegram/SourceFiles/settings/settings_experimental.cpp index 983497e8a..b1d2a8480 100644 --- a/Telegram/SourceFiles/settings/settings_experimental.cpp +++ b/Telegram/SourceFiles/settings/settings_experimental.cpp @@ -24,6 +24,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "mainwindow.h" #include "media/player/media_player_instance.h" +#include "mtproto/session_private.h" #include "webview/webview_embed.h" #include "window/main_window.h" #include "window/window_peer_menu.h" @@ -156,6 +157,7 @@ void SetupExperimental( addToggle(Core::kOptionSkipUrlSchemeRegister); addToggle(Data::kOptionExternalVideoPlayer); addToggle(Window::kOptionNewWindowsSizeAsFirst); + addToggle(MTP::details::kOptionPreferIPv6); addToggle(Window::kOptionDisableTouchbar); }