~singpolyma/biboumi

6cb7787512a5e02ad2100dbdef734b36d8a8f0d5 — louiz’ 7 years ago d2f4235
Small resolver refactor

Makes the codecoverage deterministic (it does not depend on the order of
v4/v6 resolution)
2 files changed, 12 insertions(+), 9 deletions(-)

M louloulibs/network/resolver.cpp
M louloulibs/network/resolver.hpp
M louloulibs/network/resolver.cpp => louloulibs/network/resolver.cpp +8 -9
@@ 113,12 113,14 @@ void Resolver::start_resolving(const std::string& hostname, const std::string& p
  {
    Resolver* resolver = static_cast<Resolver*>(data);
    resolver->on_hostname6_resolved(result);
    resolver->after_resolved();
  };

  auto hostname4_resolved = [](dns_ctx*, dns_rr_a4* result, void* data)
  {
    Resolver* resolver = static_cast<Resolver*>(data);
    resolver->on_hostname4_resolved(result);
    resolver->after_resolved();
  };

  DNSHandler::watch();


@@ 173,9 175,6 @@ std::vector<std::string> Resolver::look_in_etc_hosts(const std::string &hostname

void Resolver::on_hostname4_resolved(dns_rr_a4 *result)
{
  if (dns_active(nullptr) == 0)
    DNSHandler::unwatch();

  this->resolved4 = true;

  const auto status = dns_status(nullptr);


@@ 196,16 195,10 @@ void Resolver::on_hostname4_resolved(dns_rr_a4 *result)
      if (error != end(dns_error_messages))
        this->error_msg = error->second;
    }

  if (this->resolved6 && this->resolved4)
    this->on_resolved();
}

void Resolver::on_hostname6_resolved(dns_rr_a6 *result)
{
  if (dns_active(nullptr) == 0)
    DNSHandler::unwatch();

  this->resolved6 = true;
  char buf[INET6_ADDRSTRLEN];



@@ 219,6 212,12 @@ void Resolver::on_hostname6_resolved(dns_rr_a6 *result)
          this->call_getaddrinfo(buf, this->port.data(), AI_NUMERICHOST);
        }
    }
}

void Resolver::after_resolved()
{
  if (dns_active(nullptr) == 0)
    DNSHandler::unwatch();

  if (this->resolved6 && this->resolved4)
    this->on_resolved();

M louloulibs/network/resolver.hpp => louloulibs/network/resolver.hpp +4 -0
@@ 89,6 89,10 @@ private:
#ifdef UDNS_FOUND
  void on_hostname4_resolved(dns_rr_a4 *result);
  void on_hostname6_resolved(dns_rr_a6 *result);
  /**
   * Called after one record (4 or 6) has been resolved.
   */
  void after_resolved();

  void start_timer();