Resend requests on CONNECTION_NOT_INITED and CONNECTION_LAYER_INVALID errors.

This commit is contained in:
levlam 2022-02-07 22:05:01 +03:00
parent 5d58734568
commit 822257b90a
4 changed files with 21 additions and 8 deletions

View File

@ -169,13 +169,17 @@ class AuthData {
void on_api_response() {
if (use_pfs()) {
if (tmp_auth_key_.auth_flag()) {
tmp_auth_key_.remove_header();
}
tmp_auth_key_.remove_header();
} else {
if (main_auth_key_.auth_flag()) {
main_auth_key_.remove_header();
}
main_auth_key_.remove_header();
}
}
void on_connection_not_inited() {
if (use_pfs()) {
tmp_auth_key_.restore_header();
} else {
main_auth_key_.restore_header();
}
}

View File

@ -42,11 +42,14 @@ class AuthKey {
return have_header_ || Time::now() < header_expires_at_;
}
void remove_header() {
if (have_header_) {
if (auth_flag_ && have_header_) {
have_header_ = false;
header_expires_at_ = Time::now() + 3;
}
}
void restore_header() {
have_header_ = true;
}
double expires_at() const {
return expires_at_;

View File

@ -956,6 +956,7 @@ void SessionConnection::flush_packet() {
std::any_of(queries.begin(), queries.end(), [](const auto &query) { return query.use_quick_ack; });
{
// LOG(ERROR) << (auth_data_->get_header().empty() ? '-' : '+');
uint64 parent_message_id = 0;
auto storer = PacketStorer<CryptoImpl>(
queries, auth_data_->get_header(), std::move(to_ack), ping_id, ping_disconnect_delay() + 2, max_delay,

View File

@ -839,9 +839,14 @@ void Session::on_message_result_error(uint64 id, int error_code, string message)
}
}
}
if (error_code == 400 && (message == "CONNECTION_NOT_INITED" || message == "CONNECTION_LAYER_INVALID")) {
LOG(WARNING) << "Receive " << message;
auth_data_.on_connection_not_inited();
error_code = 500;
}
if (id == 0) {
LOG(WARNING) << "Session got error update";
LOG(ERROR) << "Received an error update";
return;
}