Return one old way for requesting special config.

This commit is contained in:
John Preston 2018-03-20 18:21:36 +04:00
parent 4a32b00068
commit 38c20fc3c2
2 changed files with 67 additions and 18 deletions

View File

@ -29,14 +29,35 @@ Y1hZCxdv6cs5UnW9+PWvS+WIbkh+GaWYxwIDAQAB\n\
} // namespace } // namespace
SpecialConfigRequest::SpecialConfigRequest(base::lambda<void(DcId dcId, const std::string &ip, int port)> callback) : _callback(std::move(callback)) { SpecialConfigRequest::SpecialConfigRequest(
base::lambda<void(
DcId dcId,
const std::string &ip,
int port)> callback)
: _callback(std::move(callback)) {
App::setProxySettings(_manager); App::setProxySettings(_manager);
performAppRequest(); performApp1Request();
performApp2Request();
performDnsRequest(); performDnsRequest();
} }
void SpecialConfigRequest::performAppRequest() { void SpecialConfigRequest::performApp1Request() {
auto appUrl = QUrl();
appUrl.setScheme(qsl("https"));
appUrl.setHost(qsl("google.com"));
if (cTestMode()) {
appUrl.setPath(qsl("/test/"));
}
auto appRequest = QNetworkRequest(appUrl);
appRequest.setRawHeader("Host", "dns-telegram.appspot.com");
_app1Reply.reset(_manager.get(appRequest));
connect(_app1Reply.get(), &QNetworkReply::finished, this, [=] {
app1Finished();
});
}
void SpecialConfigRequest::performApp2Request() {
auto appUrl = QUrl(); auto appUrl = QUrl();
appUrl.setScheme(qsl("https")); appUrl.setScheme(qsl("https"));
appUrl.setHost(qsl("software-download.microsoft.com")); appUrl.setHost(qsl("software-download.microsoft.com"));
@ -45,8 +66,10 @@ void SpecialConfigRequest::performAppRequest() {
: qsl("/prod/config.txt")); : qsl("/prod/config.txt"));
auto appRequest = QNetworkRequest(appUrl); auto appRequest = QNetworkRequest(appUrl);
appRequest.setRawHeader("Host", "tcdnb.azureedge.net"); appRequest.setRawHeader("Host", "tcdnb.azureedge.net");
_appReply.reset(_manager.get(appRequest)); _app2Reply.reset(_manager.get(appRequest));
connect(_appReply.get(), &QNetworkReply::finished, this, [this] { appFinished(); }); connect(_app2Reply.get(), &QNetworkReply::finished, this, [=] {
app2Finished();
});
} }
void SpecialConfigRequest::performDnsRequest() { void SpecialConfigRequest::performDnsRequest() {
@ -54,19 +77,32 @@ void SpecialConfigRequest::performDnsRequest() {
dnsUrl.setScheme(qsl("https")); dnsUrl.setScheme(qsl("https"));
dnsUrl.setHost(qsl("google.com")); dnsUrl.setHost(qsl("google.com"));
dnsUrl.setPath(qsl("/resolve")); dnsUrl.setPath(qsl("/resolve"));
dnsUrl.setQuery(qsl("name=%1.stel.com&type=16").arg(cTestMode() ? qsl("tap") : qsl("ap"))); dnsUrl.setQuery(
qsl("name=%1.stel.com&type=16").arg(
cTestMode() ? qsl("tap") : qsl("ap")));
auto dnsRequest = QNetworkRequest(QUrl(dnsUrl)); auto dnsRequest = QNetworkRequest(QUrl(dnsUrl));
dnsRequest.setRawHeader("Host", "dns.google.com"); dnsRequest.setRawHeader("Host", "dns.google.com");
_dnsReply.reset(_manager.get(dnsRequest)); _dnsReply.reset(_manager.get(dnsRequest));
connect(_dnsReply.get(), &QNetworkReply::finished, this, [this] { dnsFinished(); }); connect(_dnsReply.get(), &QNetworkReply::finished, this, [this] {
dnsFinished();
});
} }
void SpecialConfigRequest::appFinished() { void SpecialConfigRequest::app1Finished() {
if (!_appReply) { if (!_app1Reply) {
return; return;
} }
auto result = _appReply->readAll(); auto result = _app1Reply->readAll();
_appReply.release()->deleteLater(); _app1Reply.release()->deleteLater();
handleResponse(result);
}
void SpecialConfigRequest::app2Finished() {
if (!_app2Reply) {
return;
}
auto result = _app2Reply->readAll();
_app2Reply.release()->deleteLater();
handleResponse(result); handleResponse(result);
} }
@ -217,8 +253,11 @@ void SpecialConfigRequest::handleResponse(const QByteArray &bytes) {
} }
SpecialConfigRequest::~SpecialConfigRequest() { SpecialConfigRequest::~SpecialConfigRequest() {
if (_appReply) { if (_app1Reply) {
_appReply->abort(); _app1Reply->abort();
}
if (_app2Reply) {
_app2Reply->abort();
} }
if (_dnsReply) { if (_dnsReply) {
_dnsReply->abort(); _dnsReply->abort();

View File

@ -11,23 +11,33 @@ namespace MTP {
class SpecialConfigRequest : public QObject { class SpecialConfigRequest : public QObject {
public: public:
SpecialConfigRequest(base::lambda<void(DcId dcId, const std::string &ip, int port)> callback); SpecialConfigRequest(
base::lambda<void(
DcId dcId,
const std::string &ip,
int port)> callback);
~SpecialConfigRequest(); ~SpecialConfigRequest();
private: private:
void performAppRequest(); void performApp1Request();
void performApp2Request();
void performDnsRequest(); void performDnsRequest();
void appFinished(); void app1Finished();
void app2Finished();
void dnsFinished(); void dnsFinished();
void handleResponse(const QByteArray &bytes); void handleResponse(const QByteArray &bytes);
bool decryptSimpleConfig(const QByteArray &bytes); bool decryptSimpleConfig(const QByteArray &bytes);
base::lambda<void(DcId dcId, const std::string &ip, int port)> _callback; base::lambda<void(
DcId dcId,
const std::string &ip,
int port)> _callback;
MTPhelp_ConfigSimple _simpleConfig; MTPhelp_ConfigSimple _simpleConfig;
QNetworkAccessManager _manager; QNetworkAccessManager _manager;
std::unique_ptr<QNetworkReply> _appReply; std::unique_ptr<QNetworkReply> _app1Reply;
std::unique_ptr<QNetworkReply> _app2Reply;
std::unique_ptr<QNetworkReply> _dnsReply; std::unique_ptr<QNetworkReply> _dnsReply;
std::unique_ptr<DcOptions> _localOptions; std::unique_ptr<DcOptions> _localOptions;