Properly fix resolving proxy IP.

GitOrigin-RevId: cb385b8d0753da6f76dcdb237b2001143a23c94f
This commit is contained in:
levlam 2018-08-06 18:28:56 +03:00
parent 7c145a412b
commit ff593d2ce8

View File

@ -718,12 +718,11 @@ void ConnectionCreator::on_network(bool network_flag, uint32 network_generation)
auto old_generation = network_generation_; auto old_generation = network_generation_;
network_generation_ = network_generation; network_generation_ = network_generation;
if (network_flag_) { if (network_flag_) {
if (old_generation != network_generation_) { VLOG(connections) << "Set proxy query token to 0: " << old_generation << " " << network_generation_;
VLOG(connections) << "Set proxy query token to 0: " << old_generation << " " << network_generation_; resolve_proxy_query_token_ = 0;
resolve_proxy_query_token_ = 0; resolve_proxy_timestamp_ = Timestamp();
resolve_proxy_timestamp_ = Timestamp(); get_proxy_info_timestamp_ = Timestamp();
get_proxy_info_timestamp_ = Timestamp();
}
for (auto &client : clients_) { for (auto &client : clients_) {
client.second.backoff.clear(); client.second.backoff.clear();
client.second.flood_control.clear_events(); client.second.flood_control.clear_events();
@ -1300,6 +1299,9 @@ void ConnectionCreator::loop() {
if (!is_inited_) { if (!is_inited_) {
return; return;
} }
if (G()->close_flag()) {
return;
}
if (!network_flag_) { if (!network_flag_) {
return; return;
} }
@ -1344,14 +1346,14 @@ void ConnectionCreator::loop() {
} }
void ConnectionCreator::on_result(NetQueryPtr query) { void ConnectionCreator::on_result(NetQueryPtr query) {
if (get_link_token() != get_proxy_info_query_token_) {
return;
}
SCOPE_EXIT { SCOPE_EXIT {
loop(); loop();
}; };
if (get_link_token() != get_proxy_info_query_token_) {
return;
}
get_proxy_info_query_token_ = 0; get_proxy_info_query_token_ = 0;
auto res = fetch_result<telegram_api::help_getProxyData>(std::move(query)); auto res = fetch_result<telegram_api::help_getProxyData>(std::move(query));
if (res.is_error()) { if (res.is_error()) {
@ -1407,16 +1409,16 @@ void ConnectionCreator::schedule_get_proxy_info(int32 expires) {
} }
void ConnectionCreator::on_proxy_resolved(Result<IPAddress> r_ip_address, bool dummy) { void ConnectionCreator::on_proxy_resolved(Result<IPAddress> r_ip_address, bool dummy) {
SCOPE_EXIT {
loop();
};
if (get_link_token() != resolve_proxy_query_token_) { if (get_link_token() != resolve_proxy_query_token_) {
VLOG(connections) << "Ignore unneeded proxy IP address " << get_link_token() << ", expected " VLOG(connections) << "Ignore unneeded proxy IP address " << get_link_token() << ", expected "
<< resolve_proxy_query_token_; << resolve_proxy_query_token_;
return; return;
} }
SCOPE_EXIT {
loop();
};
resolve_proxy_query_token_ = 0; resolve_proxy_query_token_ = 0;
if (r_ip_address.is_error()) { if (r_ip_address.is_error()) {
VLOG(connections) << "Receive error for resolving proxy IP address: " << r_ip_address.error(); VLOG(connections) << "Receive error for resolving proxy IP address: " << r_ip_address.error();