From 877452f6ce1d199b187cb67b6f3b700fd2ffd820 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 12 Apr 2022 16:12:22 +0300 Subject: [PATCH] Add Global::get_retry_after. --- td/telegram/Global.cpp | 17 +++++++++++++++++ td/telegram/Global.h | 2 ++ td/telegram/MessagesManager.cpp | 9 +++------ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/td/telegram/Global.cpp b/td/telegram/Global.cpp index ba5763419..9e1320248 100644 --- a/td/telegram/Global.cpp +++ b/td/telegram/Global.cpp @@ -135,6 +135,23 @@ Status Global::init(const TdParameters ¶meters, ActorId td, unique_ptr(error_message.substr(retry_after_prefix.size())); + if (r_retry_after.is_ok() && r_retry_after.ok() > 0) { + return r_retry_after.ok(); + } + return 0; +} + int32 Global::to_unix_time(double server_time) const { LOG_CHECK(1.0 <= server_time && server_time <= 2140000000.0) << server_time << ' ' << Clocks::system() << ' ' << is_server_time_reliable() << ' ' diff --git a/td/telegram/Global.h b/td/telegram/Global.h index 31de3f3d9..8162567aa 100644 --- a/td/telegram/Global.h +++ b/td/telegram/Global.h @@ -420,6 +420,8 @@ class Global final : public ActorContext { return close_flag(); } + static int32 get_retry_after(int32 error_code, Slice error_message); + const std::vector> &get_net_stats_file_callbacks() { return net_stats_file_callbacks_; } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index ea98044b1..16a75f741 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -31147,12 +31147,9 @@ void MessagesManager::fail_send_message(FullMessageId full_message_id, int error message->send_error_code = error_code; message->send_error_message = error_message; message->try_resend_at = 0.0; - Slice retry_after_prefix("Too Many Requests: retry after "); - if (error_code == 429 && begins_with(error_message, retry_after_prefix)) { - auto r_retry_after = to_integer_safe(error_message.substr(retry_after_prefix.size())); - if (r_retry_after.is_ok() && r_retry_after.ok() > 0) { - message->try_resend_at = Time::now() + r_retry_after.ok(); - } + auto retry_after = Global::get_retry_after(error_code, error_message); + if (retry_after > 0) { + message->try_resend_at = Time::now() + retry_after; } update_failed_to_send_message_content(td_, message->content);