// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #pragma once #include "td/telegram/net/DcId.h" #include "td/mtproto/RSA.h" #include "td/utils/common.h" #include "td/utils/port/RwMutex.h" #include "td/utils/Status.h" #include namespace td { class PublicRsaKeyShared final : public mtproto::PublicRsaKeyInterface { public: PublicRsaKeyShared(DcId dc_id, bool is_test); class Listener { public: Listener() = default; Listener(const Listener &) = delete; Listener &operator=(const Listener &) = delete; Listener(Listener &&) = delete; Listener &operator=(Listener &&) = delete; virtual ~Listener() = default; virtual bool notify() = 0; }; void add_rsa(mtproto::RSA rsa); Result> get_rsa(const vector &fingerprints) final; void drop_keys() final; bool has_keys(); void add_listener(unique_ptr listener); DcId dc_id() const { return dc_id_; } private: DcId dc_id_; struct RsaOption { int64 fingerprint; mtproto::RSA rsa; }; std::vector options_; std::vector> listeners_; RwMutex rw_mutex_; mtproto::RSA *get_rsa_locked(int64 fingerprint); void notify(); }; } // namespace td