unsigned int last_status_change; /* time of the latest DNS resolution status change */
int query_id; /* DNS query ID dedicated for this resolution */
struct eb32_node qid; /* ebtree query id */
- int query_type; /* query type to send. By default DNS_RTYPE_ANY */
+ int query_type;
+ /* query type to send. By default DNS_RTYPE_A or DNS_RTYPE_AAAA depending on resolver_family_priority */
int status; /* status of the resolution being processed RSLV_STATUS_* */
int step; /* */
int try; /* current resolution try */
resolution->query_id = query_id;
resolution->qid.key = query_id;
resolution->step = RSLV_STEP_RUNNING;
- resolution->query_type = DNS_RTYPE_ANY;
+ resolution->resolver_family_priority = s->resolver_family_priority;
+ if (resolution->resolver_family_priority == AF_INET) {
+ resolution->query_type = DNS_RTYPE_A;
+ } else {
+ resolution->query_type = DNS_RTYPE_AAAA;
+ }
resolution->try = resolvers->resolve_retries;
resolution->try_cname = 0;
resolution->nb_responses = 0;
- resolution->resolver_family_priority = s->resolver_family_priority;
eb32_insert(&resolvers->query_ids, &resolution->qid);
dns_send_query(resolution);
resolution->qid.key = 0;
/* default values */
- resolution->query_type = DNS_RTYPE_ANY;
+ if (resolution->resolver_family_priority == AF_INET) {
+ resolution->query_type = DNS_RTYPE_A;
+ } else {
+ resolution->query_type = DNS_RTYPE_AAAA;
+ }
/* the second resolution in the queue becomes the first one */
LIST_DEL(&resolution->list);
{
struct server *s;
struct dns_resolvers *resolvers;
- int qtype_any, res_preferred_afinet, res_preferred_afinet6;
+ int res_preferred_afinet, res_preferred_afinet6;
/* shortcut to the server whose name is being resolved */
s = (struct server *)resolution->requester;
case DNS_RESP_TRUNCATED:
case DNS_RESP_ERROR:
case DNS_RESP_NO_EXPECTED_RECORD:
- qtype_any = resolution->query_type == DNS_RTYPE_ANY;
res_preferred_afinet = resolution->resolver_family_priority == AF_INET && resolution->query_type == DNS_RTYPE_A;
res_preferred_afinet6 = resolution->resolver_family_priority == AF_INET6 && resolution->query_type == DNS_RTYPE_AAAA;
- if ((qtype_any || res_preferred_afinet || res_preferred_afinet6)
+ if ((res_preferred_afinet || res_preferred_afinet6)
|| (resolution->try > 0)) {
/* let's change the query type */
- if (qtype_any) {
- /* fallback from ANY to resolution preference */
- if (resolution->resolver_family_priority == AF_INET6)
- resolution->query_type = DNS_RTYPE_AAAA;
- else
- resolution->query_type = DNS_RTYPE_A;
- }
- else if (res_preferred_afinet6) {
+ if (res_preferred_afinet6) {
/* fallback from AAAA to A */
resolution->query_type = DNS_RTYPE_A;
}
}
else {
resolution->try -= 1;
- resolution->query_type = DNS_RTYPE_ANY;
+ if (resolution->resolver_family_priority == AF_INET) {
+ resolution->query_type = DNS_RTYPE_A;
+ } else {
+ resolution->query_type = DNS_RTYPE_AAAA;
+ }
}
dns_send_query(resolution);