aboutsummaryrefslogtreecommitdiffhomepage
path: root/tdnet/td/net/GetHostByNameActor.cpp
diff options
context:
space:
mode:
authorArseny Smirnov <arseny30@gmail.com>2019-01-24 17:07:11 +0400
committerArseny Smirnov <arseny30@gmail.com>2019-01-24 17:07:11 +0400
commitc07b26e45cb9be556ed4f75064ca4d1c2aca6dbd (patch)
tree1cef363133ca3e471fc9b44589236e059daee20d /tdnet/td/net/GetHostByNameActor.cpp
parent320d660f1cf95075272fc78414a261adf6e4b3c9 (diff)
GetHostByNameActor: Options and test
GitOrigin-RevId: afebe6e940b2048d3ef6f6368ff824443d55a909
Diffstat (limited to 'tdnet/td/net/GetHostByNameActor.cpp')
-rw-r--r--tdnet/td/net/GetHostByNameActor.cpp36
1 files changed, 18 insertions, 18 deletions
diff --git a/tdnet/td/net/GetHostByNameActor.cpp b/tdnet/td/net/GetHostByNameActor.cpp
index 596bbfd8a..467e87c2e 100644
--- a/tdnet/td/net/GetHostByNameActor.cpp
+++ b/tdnet/td/net/GetHostByNameActor.cpp
@@ -15,13 +15,13 @@ namespace td {
namespace detail {
class GoogleDnsResolver : public Actor {
public:
- GoogleDnsResolver(std::string host, GetHostByNameActor::Options options, td::Promise<td::IPAddress> promise)
+ GoogleDnsResolver(std::string host, GetHostByNameActor::ResolveOptions options, td::Promise<td::IPAddress> promise)
: host_(std::move(host)), options_(std::move(options)), promise_(std::move(promise)) {
}
private:
std::string host_;
- GetHostByNameActor::Options options_;
+ GetHostByNameActor::ResolveOptions options_;
Promise<IPAddress> promise_;
ActorOwn<Wget> wget_;
@@ -62,13 +62,13 @@ class GoogleDnsResolver : public Actor {
};
class NativeDnsResolver : public Actor {
public:
- NativeDnsResolver(std::string host, GetHostByNameActor::Options options, td::Promise<td::IPAddress> promise)
+ NativeDnsResolver(std::string host, GetHostByNameActor::ResolveOptions options, td::Promise<td::IPAddress> promise)
: host_(std::move(host)), options_(std::move(options)), promise_(std::move(promise)) {
}
private:
std::string host_;
- GetHostByNameActor::Options options_;
+ GetHostByNameActor::ResolveOptions options_;
Promise<IPAddress> promise_;
void start_up() override {
@@ -87,18 +87,17 @@ class NativeDnsResolver : public Actor {
};
class DnsResolver : public Actor {
public:
- DnsResolver(std::string host, GetHostByNameActor::Options options, td::Promise<td::IPAddress> promise)
+ DnsResolver(std::string host, GetHostByNameActor::ResolveOptions options, td::Promise<td::IPAddress> promise)
: host_(std::move(host)), options_(std::move(options)), promise_(std::move(promise)) {
}
private:
std::string host_;
- GetHostByNameActor::Options options_;
+ GetHostByNameActor::ResolveOptions options_;
Promise<IPAddress> promise_;
ActorOwn<> query_;
size_t pos_ = 0;
- GetHostByNameActor::Options::Type types[2] = {GetHostByNameActor::Options::Google,
- GetHostByNameActor::Options::Native};
+ GetHostByNameActor::ResolveType types[2] = {GetHostByNameActor::Google, GetHostByNameActor::Native};
void loop() override {
if (!query_.empty()) {
@@ -126,22 +125,22 @@ class DnsResolver : public Actor {
};
} // namespace detail
-ActorOwn<> GetHostByNameActor::resolve(std::string host, Options options, Promise<IPAddress> promise) {
+GetHostByNameActor::Options::Options() = default;
+ActorOwn<> GetHostByNameActor::resolve(std::string host, ResolveOptions options, Promise<IPAddress> promise) {
switch (options.type) {
- case Options::Native:
+ case Native:
return ActorOwn<>(create_actor_on_scheduler<detail::NativeDnsResolver>(
"NativeDnsResolver", options.scheduler_id, std::move(host), options, std::move(promise)));
- case Options::Google:
+ case Google:
return ActorOwn<>(create_actor_on_scheduler<detail::GoogleDnsResolver>(
"GoogleDnsResolver", options.scheduler_id, std::move(host), options, std::move(promise)));
- case Options::All:
+ case All:
return ActorOwn<>(create_actor_on_scheduler<detail::DnsResolver>("DnsResolver", options.scheduler_id,
std::move(host), options, std::move(promise)));
}
}
-GetHostByNameActor::GetHostByNameActor(int32 ok_timeout, int32 error_timeout)
- : ok_timeout_(ok_timeout), error_timeout_(error_timeout) {
+GetHostByNameActor::GetHostByNameActor(Options options) : options_(options) {
}
void GetHostByNameActor::on_result(std::string host, bool prefer_ipv6, Result<IPAddress> res) {
@@ -150,9 +149,9 @@ void GetHostByNameActor::on_result(std::string host, bool prefer_ipv6, Result<IP
auto promises = std::move(value.promises);
auto end_time = td::Time::now();
if (res.is_ok()) {
- value = Value{res.move_as_ok(), end_time + ok_timeout_};
+ value = Value{res.move_as_ok(), end_time + options_.ok_timeout};
} else {
- value = Value{res.move_as_error(), end_time + error_timeout_};
+ value = Value{res.move_as_error(), end_time + options_.error_timeout};
}
for (auto &promise : promises) {
promise.second.set_result(value.get_ip_port(promise.first));
@@ -168,8 +167,9 @@ void GetHostByNameActor::run(string host, int port, bool prefer_ipv6, Promise<IP
value.promises.emplace_back(port, std::move(promise));
if (value.query.empty()) {
- Options options;
- options.type = Options::Type::All;
+ ResolveOptions options;
+ options.type = options_.type;
+ options.scheduler_id = options_.scheduler_id;
options.prefer_ipv6 = prefer_ipv6;
value.query =
resolve(host, options,