File revert-migrate-to-ares_getaddrinfo.patch of Package nghttp2

diff -ruN a/src/shrpx_dns_resolver.cc b/src/shrpx_dns_resolver.cc
--- a/src/shrpx_dns_resolver.cc	2024-04-04 08:42:44.904336075 +0000
+++ b/src/shrpx_dns_resolver.cc	2024-04-04 10:12:42.783426219 +0000
@@ -55,11 +55,9 @@
 } // namespace
 
 namespace {
-void addrinfo_cb(void *arg, int status, int timeouts, ares_addrinfo *result) {
+void host_cb(void *arg, int status, int timeouts, hostent *hostent) {
   auto resolv = static_cast<DNSResolver *>(arg);
-  resolv->on_result(status, result);
-
-  ares_freeaddrinfo(result);
+  resolv->on_result(status, hostent);
 }
 } // namespace
 
@@ -175,10 +173,7 @@
   channel_ = chan;
   status_ = DNSResolverStatus::RUNNING;
 
-  ares_addrinfo_hints hints{};
-  hints.ai_family = family_;
-
-  ares_getaddrinfo(channel_, name_.c_str(), nullptr, &hints, addrinfo_cb, this);
+  ares_gethostbyname(channel_, name_.c_str(), family_, host_cb, this);
   reset_timeout();
 
   return 0;
@@ -290,7 +285,7 @@
 
 void DNSResolver::stop_wev(int fd) { stop_ev(wevs_, loop_, fd, EV_WRITE); }
 
-void DNSResolver::on_result(int status, ares_addrinfo *ai) {
+void DNSResolver::on_result(int status, hostent *hostent) {
   stop_ev(loop_, revs_);
   stop_ev(loop_, wevs_);
   ev_timer_stop(loop_, &timer_);
@@ -304,35 +299,7 @@
     return;
   }
 
-  auto ap = ai->nodes;
-
-  for (; ap; ap = ap->ai_next) {
-    switch (ap->ai_family) {
-    case AF_INET:
-      status_ = DNSResolverStatus::OK;
-      result_.len = sizeof(result_.su.in);
-
-      assert(sizeof(result_.su.in) == ap->ai_addrlen);
-
-      memcpy(&result_.su.in, ap->ai_addr, sizeof(result_.su.in));
-
-      break;
-    case AF_INET6:
-      status_ = DNSResolverStatus::OK;
-      result_.len = sizeof(result_.su.in6);
-
-      assert(sizeof(result_.su.in6) == ap->ai_addrlen);
-
-      memcpy(&result_.su.in6, ap->ai_addr, sizeof(result_.su.in6));
-
-      break;
-    default:
-      continue;
-    }
-
-    break;
-  }
-
+  auto ap = *hostent->h_addr_list;
   if (!ap) {
     if (LOG_ENABLED(INFO)) {
       LOG(INFO) << "Name lookup for " << name_
@@ -342,6 +309,31 @@
     return;
   }
 
+  switch (hostent->h_addrtype) {
+  case AF_INET:
+    status_ = DNSResolverStatus::OK;
+    result_.len = sizeof(result_.su.in);
+    result_.su.in = {};
+    result_.su.in.sin_family = AF_INET;
+#ifdef HAVE_SOCKADDR_IN_SIN_LEN
+    result_.su.in.sin_len = sizeof(result_.su.in);
+#endif // HAVE_SOCKADDR_IN_SIN_LEN
+    memcpy(&result_.su.in.sin_addr, ap, sizeof(result_.su.in.sin_addr));
+    break;
+  case AF_INET6:
+    status_ = DNSResolverStatus::OK;
+    result_.len = sizeof(result_.su.in6);
+    result_.su.in6 = {};
+    result_.su.in6.sin6_family = AF_INET6;
+#ifdef HAVE_SOCKADDR_IN6_SIN6_LEN
+    result_.su.in6.sin6_len = sizeof(result_.su.in6);
+#endif // HAVE_SOCKADDR_IN6_SIN6_LEN
+    memcpy(&result_.su.in6.sin6_addr, ap, sizeof(result_.su.in6.sin6_addr));
+    break;
+  default:
+    assert(0);
+  }
+
   if (status_ == DNSResolverStatus::OK) {
     if (LOG_ENABLED(INFO)) {
       LOG(INFO) << "Name lookup succeeded: " << name_ << " -> "
diff -ruN a/src/shrpx_dns_resolver.h b/src/shrpx_dns_resolver.h
--- a/src/shrpx_dns_resolver.h	2024-04-04 08:42:44.904336075 +0000
+++ b/src/shrpx_dns_resolver.h	2024-04-04 10:12:42.784426210 +0000
@@ -88,7 +88,7 @@
   int on_write(int fd);
   int on_timeout();
   // Calls this function when DNS query finished.
-  void on_result(int status, ares_addrinfo *result);
+  void on_result(int status, hostent *hostent);
   void reset_timeout();
 
   void start_rev(int fd);
openSUSE Build Service is sponsored by