From 5176710ada430ebd40b31a0d38665ed96e9e00b5 Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 5 Jul 2021 22:19:59 +0300 Subject: [PATCH] Store RsaKey in PublicRsaKeyShared. --- td/telegram/net/PublicRsaKeyShared.cpp | 25 ++++++++++++------------- td/telegram/net/PublicRsaKeyShared.h | 8 ++------ 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/td/telegram/net/PublicRsaKeyShared.cpp b/td/telegram/net/PublicRsaKeyShared.cpp index e81c2a615..f09f8e90d 100644 --- a/td/telegram/net/PublicRsaKeyShared.cpp +++ b/td/telegram/net/PublicRsaKeyShared.cpp @@ -106,19 +106,18 @@ PublicRsaKeyShared::PublicRsaKeyShared(DcId dc_id, bool is_test) : dc_id_(dc_id) void PublicRsaKeyShared::add_rsa(mtproto::RSA rsa) { auto lock = rw_mutex_.lock_write(); auto fingerprint = rsa.get_fingerprint(); - auto *has_rsa = get_rsa_unsafe(fingerprint); - if (has_rsa) { + if (get_rsa_key_unsafe(fingerprint) != nullptr) { return; } - options_.push_back(RsaOption{fingerprint, std::move(rsa)}); + keys_.push_back(RsaKey{std::move(rsa), fingerprint}); } Result PublicRsaKeyShared::get_rsa_key(const vector &fingerprints) { auto lock = rw_mutex_.lock_read(); for (auto fingerprint : fingerprints) { - auto *rsa = get_rsa_unsafe(fingerprint); - if (rsa) { - return RsaKey{rsa->clone(), fingerprint}; + auto *rsa_key = get_rsa_key_unsafe(fingerprint); + if (rsa_key != nullptr) { + return RsaKey{rsa_key->rsa.clone(), fingerprint}; } } return Status::Error(PSLICE() << "Unknown fingerprints " << format::as_array(fingerprints)); @@ -129,12 +128,12 @@ void PublicRsaKeyShared::drop_keys() { return; } auto lock = rw_mutex_.lock_write(); - options_.clear(); + keys_.clear(); } bool PublicRsaKeyShared::has_keys() { auto lock = rw_mutex_.lock_read(); - return !options_.empty(); + return !keys_.empty(); } void PublicRsaKeyShared::add_listener(unique_ptr listener) { @@ -144,13 +143,13 @@ void PublicRsaKeyShared::add_listener(unique_ptr listener) { } } -mtproto::RSA *PublicRsaKeyShared::get_rsa_unsafe(int64 fingerprint) { - auto it = std::find_if(options_.begin(), options_.end(), - [&](const auto &value) { return value.fingerprint == fingerprint; }); - if (it == options_.end()) { +mtproto::PublicRsaKeyInterface::RsaKey *PublicRsaKeyShared::get_rsa_key_unsafe(int64 fingerprint) { + auto it = std::find_if(keys_.begin(), keys_.end(), + [fingerprint](const auto &value) { return value.fingerprint == fingerprint; }); + if (it == keys_.end()) { return nullptr; } - return &it->rsa; + return &*it; } void PublicRsaKeyShared::notify() { diff --git a/td/telegram/net/PublicRsaKeyShared.h b/td/telegram/net/PublicRsaKeyShared.h index 7208874d0..4c721e6db 100644 --- a/td/telegram/net/PublicRsaKeyShared.h +++ b/td/telegram/net/PublicRsaKeyShared.h @@ -44,15 +44,11 @@ class PublicRsaKeyShared final : public mtproto::PublicRsaKeyInterface { private: DcId dc_id_; - struct RsaOption { - int64 fingerprint; - mtproto::RSA rsa; - }; - std::vector options_; + std::vector keys_; std::vector> listeners_; RwMutex rw_mutex_; - mtproto::RSA *get_rsa_unsafe(int64 fingerprint); + RsaKey *get_rsa_key_unsafe(int64 fingerprint); void notify(); };