diff --git a/Telegram/SourceFiles/lang/lang_hardcoded.h b/Telegram/SourceFiles/lang/lang_hardcoded.h index 2247e04412..1cfc93df7a 100644 --- a/Telegram/SourceFiles/lang/lang_hardcoded.h +++ b/Telegram/SourceFiles/lang/lang_hardcoded.h @@ -26,5 +26,9 @@ inline QString ClearPathFailed() { return qsl("Clear failed :("); } +inline QString ProxyConfigError() { + return qsl("The proxy you are using is not configured correctly and will be disabled. Please find another one."); +} + } // namespace Hard } // namespace Lang diff --git a/Telegram/SourceFiles/messenger.cpp b/Telegram/SourceFiles/messenger.cpp index 4610454175..cc4d9b5ec5 100644 --- a/Telegram/SourceFiles/messenger.cpp +++ b/Telegram/SourceFiles/messenger.cpp @@ -25,6 +25,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_file_parser.h" #include "lang/lang_translator.h" #include "lang/lang_cloud_manager.h" +#include "lang/lang_hardcoded.h" #include "observer_peer.h" #include "storage/file_upload.h" #include "mainwidget.h" @@ -44,6 +45,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/qthelp_url.h" #include "boxes/connection_box.h" #include "boxes/confirm_phone_box.h" +#include "boxes/confirm_box.h" #include "boxes/share_box.h" namespace { @@ -305,6 +307,14 @@ void Messenger::setCurrentProxy( Global::RefConnectionTypeChanged().notify(); } +void Messenger::badMtprotoConfigurationError() { + if (Global::UseProxy() && !_badProxyDisableBox) { + _badProxyDisableBox = Ui::show(Box( + Lang::Hard::ProxyConfigError(), + [=] { setCurrentProxy(Global::SelectedProxy(), false); })); + } +} + void Messenger::setMtpMainDcId(MTP::DcId mainDcId) { Expects(!_mtproto); diff --git a/Telegram/SourceFiles/messenger.h b/Telegram/SourceFiles/messenger.h index 51b749be35..3a92c44cf3 100644 --- a/Telegram/SourceFiles/messenger.h +++ b/Telegram/SourceFiles/messenger.h @@ -17,6 +17,7 @@ class MainWidget; class FileUploader; class Translator; class MediaView; +class BoxContent; namespace Core { class Launcher; @@ -99,6 +100,7 @@ public: return _dcOptions.get(); } void setCurrentProxy(const ProxyData &proxy, bool enabled); + void badMtprotoConfigurationError(); // Set from legacy storage. void setMtpMainDcId(MTP::DcId mainDcId); @@ -240,6 +242,7 @@ private: std::unique_ptr _authSession; base::Observable _authSessionChanged; base::Observable _passcodedChanged; + QPointer _badProxyDisableBox; std::unique_ptr _audio; QImage _logo; diff --git a/Telegram/SourceFiles/mtproto/connection.cpp b/Telegram/SourceFiles/mtproto/connection.cpp index 38dfa64102..426d051adb 100644 --- a/Telegram/SourceFiles/mtproto/connection.cpp +++ b/Telegram/SourceFiles/mtproto/connection.cpp @@ -2983,6 +2983,11 @@ void ConnectionPrivate::onError( qint32 errorCode) { if (errorCode == -429) { LOG(("Protocol Error: -429 flood code returned!")); + } else if (errorCode == -444) { + LOG(("Protocol Error: -444 bad dc_id code returned!")); + InvokeQueued(_instance, [instance = _instance] { + instance->badConfigurationError(); + }); } removeTestConnection(connection); diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 3350ed075b..2a9065efb0 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -54,6 +54,7 @@ public: void requestConfigIfOld(); void requestCDNConfig(); void setUserPhone(const QString &phone); + void badConfigurationError(); void restart(); void restart(ShiftedDcId shiftedDcId); @@ -398,6 +399,12 @@ void Instance::Private::setUserPhone(const QString &phone) { } } +void Instance::Private::badConfigurationError() { + if (_mode == Mode::Normal) { + Messenger::Instance().badMtprotoConfigurationError(); + } +} + void Instance::Private::requestConfigIfOld() { const auto timeout = Global::BlockedMode() ? kConfigBecomesOldForBlockedIn @@ -1484,6 +1491,10 @@ void Instance::setUserPhone(const QString &phone) { _private->setUserPhone(phone); } +void Instance::badConfigurationError() { + _private->badConfigurationError(); +} + void Instance::requestConfigIfOld() { _private->requestConfigIfOld(); } diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.h b/Telegram/SourceFiles/mtproto/mtp_instance.h index 7c53c086ef..5a67b1f8b0 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.h +++ b/Telegram/SourceFiles/mtproto/mtp_instance.h @@ -140,6 +140,7 @@ public: void requestConfigIfOld(); void requestCDNConfig(); void setUserPhone(const QString &phone); + void badConfigurationError(); ~Instance();