From 425e56b3ea775c2d28567bc56f48b6fe64fc64a3 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 18 May 2018 15:20:28 +0300 Subject: [PATCH] Apply proxy settings in mtproto-key-destroyer. --- Telegram/SourceFiles/boxes/connection_box.cpp | 10 +++---- Telegram/SourceFiles/messenger.cpp | 29 +++++++++++++++++++ Telegram/SourceFiles/messenger.h | 1 + Telegram/SourceFiles/mtproto/mtp_instance.cpp | 27 ----------------- Telegram/SourceFiles/mtproto/mtp_instance.h | 1 - 5 files changed, 35 insertions(+), 33 deletions(-) diff --git a/Telegram/SourceFiles/boxes/connection_box.cpp b/Telegram/SourceFiles/boxes/connection_box.cpp index fae738510f..4f06d4fe31 100644 --- a/Telegram/SourceFiles/boxes/connection_box.cpp +++ b/Telegram/SourceFiles/boxes/connection_box.cpp @@ -1069,7 +1069,7 @@ void ProxiesBoxController::ShowApplyConfirmation( if (ranges::find(proxies, proxy) == end(proxies)) { proxies.push_back(proxy); } - Messenger::Instance().mtp()->setCurrentProxy(proxy, true); + Messenger::Instance().setCurrentProxy(proxy, true); Local::writeSettings(); if (const auto strong = box->data()) { strong->closeBox(); @@ -1230,7 +1230,7 @@ void ProxiesBoxController::applyItem(int id) { auto j = findByProxy(Global::SelectedProxy()); - Messenger::Instance().mtp()->setCurrentProxy(item->data, true); + Messenger::Instance().setCurrentProxy(item->data, true); saveDelayed(); if (j != end(_list)) { @@ -1251,7 +1251,7 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) { _lastSelectedProxy = base::take(Global::RefSelectedProxy()); if (Global::UseProxy()) { _lastSelectedProxyUsed = true; - Messenger::Instance().mtp()->setCurrentProxy( + Messenger::Instance().setCurrentProxy( ProxyData(), false); saveDelayed(); @@ -1276,7 +1276,7 @@ void ProxiesBoxController::setDeleted(int id, bool deleted) { Assert(!Global::UseProxy()); if (base::take(_lastSelectedProxyUsed)) { - Messenger::Instance().mtp()->setCurrentProxy( + Messenger::Instance().setCurrentProxy( base::take(_lastSelectedProxy), true); } else { @@ -1381,7 +1381,7 @@ bool ProxiesBoxController::setProxyEnabled(bool enabled) { } } } - Messenger::Instance().mtp()->setCurrentProxy( + Messenger::Instance().setCurrentProxy( Global::SelectedProxy(), enabled); saveDelayed(); diff --git a/Telegram/SourceFiles/messenger.cpp b/Telegram/SourceFiles/messenger.cpp index 93942aec3d..4610454175 100644 --- a/Telegram/SourceFiles/messenger.cpp +++ b/Telegram/SourceFiles/messenger.cpp @@ -278,13 +278,42 @@ bool Messenger::eventFilter(QObject *object, QEvent *e) { return QObject::eventFilter(object, e); } +void Messenger::setCurrentProxy( + const ProxyData &proxy, + bool enabled) { + const auto key = [&](const ProxyData &proxy) { + if (proxy.type == ProxyData::Type::Mtproto) { + return std::make_pair(proxy.host, proxy.port); + } + return std::make_pair(QString(), uint32(0)); + }; + const auto previousKey = key(Global::UseProxy() + ? Global::SelectedProxy() + : ProxyData()); + Global::SetSelectedProxy(proxy); + Global::SetUseProxy(enabled); + Sandbox::refreshGlobalProxy(); + if (_mtproto) { + _mtproto->restart(); + if (previousKey != key(proxy)) { + _mtproto->reInitConnection(_mtproto->mainDcId()); + } + } + if (_mtprotoForKeysDestroy) { + _mtprotoForKeysDestroy->restart(); + } + Global::RefConnectionTypeChanged().notify(); +} + void Messenger::setMtpMainDcId(MTP::DcId mainDcId) { Expects(!_mtproto); + _private->mtpConfig.mainDcId = mainDcId; } void Messenger::setMtpKey(MTP::DcId dcId, const MTP::AuthKey::Data &keyData) { Expects(!_mtproto); + _private->mtpConfig.keys.push_back(std::make_shared(MTP::AuthKey::Type::ReadFromFile, dcId, keyData)); } diff --git a/Telegram/SourceFiles/messenger.h b/Telegram/SourceFiles/messenger.h index 0a193e23ae..51b749be35 100644 --- a/Telegram/SourceFiles/messenger.h +++ b/Telegram/SourceFiles/messenger.h @@ -98,6 +98,7 @@ public: MTP::DcOptions *dcOptions() { return _dcOptions.get(); } + void setCurrentProxy(const ProxyData &proxy, bool enabled); // Set from legacy storage. void setMtpMainDcId(MTP::DcId mainDcId); diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.cpp b/Telegram/SourceFiles/mtproto/mtp_instance.cpp index 721221fc91..7055263441 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.cpp +++ b/Telegram/SourceFiles/mtproto/mtp_instance.cpp @@ -38,7 +38,6 @@ public: void start(Config &&config); - void setCurrentProxy(const ProxyData &proxy, bool enabled); void resolveProxyDomain(const QString &host); void setGoodProxyDomain(const QString &host, const QString &ip); void suggestMainDcId(DcId mainDcId); @@ -274,28 +273,6 @@ void Instance::Private::start(Config &&config) { requestConfig(); } -void Instance::Private::setCurrentProxy( - const ProxyData &proxy, - bool enabled) { - const auto key = [&](const ProxyData &proxy) { - if (proxy.type == ProxyData::Type::Mtproto) { - return std::make_pair(proxy.host, proxy.port); - } - return std::make_pair(QString(), uint32(0)); - }; - const auto previousKey = key(Global::UseProxy() - ? Global::SelectedProxy() - : ProxyData()); - Global::SetSelectedProxy(proxy); - Global::SetUseProxy(enabled); - Sandbox::refreshGlobalProxy(); - restart(); - if (previousKey != key(proxy)) { - reInitConnection(mainDcId()); - } - Global::RefConnectionTypeChanged().notify(); -} - void Instance::Private::resolveProxyDomain(const QString &host) { if (!_domainResolver) { _domainResolver = std::make_unique([=]( @@ -1467,10 +1444,6 @@ Instance::Instance(not_null options, Mode mode, Config &&config) _private->start(std::move(config)); } -void Instance::setCurrentProxy(const ProxyData &proxy, bool enabled) { - _private->setCurrentProxy(proxy, enabled); -} - void Instance::resolveProxyDomain(const QString &host) { _private->resolveProxyDomain(host); } diff --git a/Telegram/SourceFiles/mtproto/mtp_instance.h b/Telegram/SourceFiles/mtproto/mtp_instance.h index 595fecd885..7c53c086ef 100644 --- a/Telegram/SourceFiles/mtproto/mtp_instance.h +++ b/Telegram/SourceFiles/mtproto/mtp_instance.h @@ -46,7 +46,6 @@ public: Instance(const Instance &other) = delete; Instance &operator=(const Instance &other) = delete; - void setCurrentProxy(const ProxyData &proxy, bool enabled); void resolveProxyDomain(const QString &host); void setGoodProxyDomain(const QString &host, const QString &ip); void suggestMainDcId(DcId mainDcId);