diff --git a/td/mtproto/AuthData.h b/td/mtproto/AuthData.h index 89d34f02b..ef44aca82 100644 --- a/td/mtproto/AuthData.h +++ b/td/mtproto/AuthData.h @@ -245,6 +245,10 @@ class AuthData { return updates_duplicate_checker_.check(message_id); } + Status recheck_update(int64 message_id) { + return updates_duplicate_rechecker_.check(message_id); + } + int32 next_seq_no(bool is_content_related) { int32 res = seq_no_; if (is_content_related) { @@ -281,6 +285,7 @@ class AuthData { MessageIdDuplicateChecker<1000> duplicate_checker_; MessageIdDuplicateChecker<1000> updates_duplicate_checker_; + MessageIdDuplicateChecker<100> updates_duplicate_rechecker_; void update_salt(double now); }; diff --git a/td/mtproto/SessionConnection.cpp b/td/mtproto/SessionConnection.cpp index d85bc387d..6ac30a068 100644 --- a/td/mtproto/SessionConnection.cpp +++ b/td/mtproto/SessionConnection.cpp @@ -499,6 +499,14 @@ Status SessionConnection::on_slice_packet(const MsgInfo &info, Slice packet) { // It is an update... I hope. auto status = auth_data_->check_update(info.message_id); + auto recheck_status = auth_data_->recheck_update(info.message_id); + if (recheck_status.is_error() && recheck_status.code() == 2) { + LOG(WARNING) << "Receive very old update from " << get_name() << " created in " << (Time::now() - created_at_) + << " in container " << container_id_ << " from session " << auth_data_->get_session_id() + << " with message_id " << info.message_id << ", main_message_id = " << main_message_id_ + << ", seq_no = " << info.seq_no << " and original size " << info.size << ": " << status << ' ' + << recheck_status; + } if (status.is_error()) { if (status.code() == 2) { LOG(WARNING) << "Receive too old update from " << get_name() << " created in " << (Time::now() - created_at_)