// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018 // // 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/actor/actor.h" #include "td/actor/PromiseFuture.h" #include "td/utils/port/IPAddress.h" #include "td/utils/Status.h" #include namespace td { class GetHostByNameActor final : public td::Actor { public: explicit GetHostByNameActor(int32 ok_timeout = CACHE_TIME, int32 error_timeout = ERROR_CACHE_TIME); void run(std::string host, int port, td::Promise promise); private: struct Value { Result ip; double expire_at; Value(Result ip, double expire_at) : ip(std::move(ip)), expire_at(expire_at) { } }; std::unordered_map cache_; static constexpr int32 CACHE_TIME = 60 * 29; // 29 minutes static constexpr int32 ERROR_CACHE_TIME = 60 * 5; // 5 minutes int32 ok_timeout_; int32 error_timeout_; Result load_ip(string host, int port) TD_WARN_UNUSED_RESULT; }; } // namespace td