+}
+
+void QueueGetHostByNameDone(void *Ctx,
+ int status,
+ int timeouts,
+ struct hostent *hostent)
+{
+ AsyncIO *IO = (AsyncIO *) Ctx;
+#ifdef DEBUG_CARES
+ EV_syslog(LOG_DEBUG, "C-ARES: %s\n", __FUNCTION__);
+#endif
+
+ IO->DNS.Query->DNSStatus = status;
+ IO->DNS.Query->VParsedDNSReply = hostent;
+ IO->DNS.Query->DNSReplyFree = (FreeDNSReply) ares_free_hostent;
+
+ ev_idle_init(&IO->unwind_stack,
+ IO_postdns_callback);
+ IO->unwind_stack.data = IO;
+ EV_DNS_LOGT_INIT(unwind_stack);
+ EV_DNS_LOGT_START(unwind_stack);
+ ev_idle_start(event_base, &IO->unwind_stack);
+ ev_timer_stop (event_base, &IO->DNS.timeout);
+}
+
+void QueueGetHostByName(AsyncIO *IO,
+ const char *Hostname,
+ DNSQueryParts *QueryParts,
+ IO_CallBack PostDNS)
+{
+#ifdef DEBUG_CARES
+ EV_syslog(LOG_DEBUG, "C-ARES: %s\n", __FUNCTION__);
+ IO->DNS.SourcePort = 0;
+#endif
+
+ IO->DNS.Query = QueryParts;
+ IO->DNS.Query->PostDNS = PostDNS;
+
+ InitC_ares_dns(IO);
+
+ ev_timer_init(&IO->DNS.timeout, DNStimeouttrigger_callback, 10, 1);
+ EV_DNS_LOGT_INIT(DNS.timeout);
+ IO->DNS.timeout.data = IO;
+ ares_gethostbyname(IO->DNS.Channel,
+ Hostname,
+ AF_INET6, /* it falls back to ipv4 in doubt... */
+ QueueGetHostByNameDone,
+ IO);
+ EV_DNS_LOGT_START(DNS.timeout);
+ ev_timer_start(event_base, &IO->DNS.timeout);
+
+}
+
+int QueueQuery(ns_type Type,
+ const char *name,
+ AsyncIO *IO,
+ DNSQueryParts *QueryParts,
+ IO_CallBack PostDNS)
+{
+ int length, family;
+ char address_b[sizeof(struct in6_addr)];
+
+#ifdef DEBUG_CARES
+ IO->DNS.SourcePort = 0;
+#endif
+
+ IO->DNS.Query = QueryParts;
+ IO->DNS.Query->PostDNS = PostDNS;
+ IO->DNS.Start = IO->Now;
+
+ InitC_ares_dns(IO);
+
+ ev_timer_init(&IO->DNS.timeout, DNStimeouttrigger_callback, 10, 1);
+ IO->DNS.timeout.data = IO;
+ EV_DNS_LOGT_INIT(DNS.timeout);