return;
}
- netresolve_backend_add_path(query, AF_INET, &inaddr_any, 0, 0, 0, 0, 0, 0);
- netresolve_backend_add_path(query, AF_INET6, &in6addr_any, 0, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, AF_INET, &inaddr_any, 0, 0, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, AF_INET6, &in6addr_any, 0, 0, 0, 0, 0, 0, 0);
netresolve_backend_finished(query);
}
int port = -1;
int priority = 0;
int weight = 0;
+ int ttl = 0;
if (srv) {
socktype = netresolve_backend_get_socktype(query);
priv->ptfd = netresolve_backend_add_timeout(query, partial_timeout, 0);
if (priv->ptfd == -1)
error("timer: %s", strerror(errno));
- netresolve_backend_apply_hostent(query, he, socktype, protocol, port, priority, weight);
+ netresolve_backend_apply_hostent(query, he, socktype, protocol, port, priority, weight, ttl);
break;
default:
error("ares: %s\n", ares_strerror(status));
if (!strncmp(addrprefix, line, addrprefixlen)) {
if (netresolve_backend_parse_address(line + addrprefixlen,
&address, &family, &ifindex))
- netresolve_backend_add_path(query, family, &address, ifindex, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, family, &address, ifindex, 0, 0, 0, 0, 0, 0);
} else if (!strncmp(pathprefix, line, pathprefixlen)) {
if (netresolve_backend_parse_path(line + pathprefixlen,
&address, &family, &ifindex, &socktype, &protocol, &port))
- netresolve_backend_add_path(query, family, &address, ifindex, socktype, protocol, port, 0, 0);
+ netresolve_backend_add_path(query, family, &address, ifindex, socktype, protocol, port, 0, 0, 0);
}
return false;
netresolve_backend_add_path(query,
ai->ai_family, &address, ifindex,
ai->ai_socktype, ai->ai_protocol, port,
- 0, 0);
+ 0, 0, 0);
}
}
for (item = list.items; item->name; item++) {
if (request_node && strcmp(request_node, item->name))
continue;
- netresolve_backend_add_path(query, item->family, &item->address, item->ifindex, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, item->family, &item->address, item->ifindex, 0, 0, 0, 0, 0, 0);
count++;
}
}
if (ipv4)
- netresolve_backend_add_path(query, AF_INET, &inaddr_loopback, 0, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, AF_INET, &inaddr_loopback, 0, 0, 0, 0, 0, 0, 0);
if (ipv6)
- netresolve_backend_add_path(query, AF_INET6, &in6addr_loopback, 0, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, AF_INET6, &in6addr_loopback, 0, 0, 0, 0, 0, 0, 0);
netresolve_backend_finished(query);
}
status = combine_statuses(status4, status6);
if (status == NSS_STATUS_SUCCESS) {
if (status4 == NSS_STATUS_SUCCESS)
- netresolve_backend_apply_hostent(query, &he4, 0, 0, 0, 0, 0);
+ netresolve_backend_apply_hostent(query, &he4, 0, 0, 0, 0, 0, 0);
if (status6 == NSS_STATUS_SUCCESS)
- netresolve_backend_apply_hostent(query, &he6, 0, 0, 0, 0, 0);
+ netresolve_backend_apply_hostent(query, &he6, 0, 0, 0, 0, 0, 0);
}
} else if (node && priv->gethostbyname_r) {
char buffer[SIZE];
&he, buffer, sizeof buffer, &errnop, &h_errnop));
if (status == NSS_STATUS_SUCCESS) {
- netresolve_backend_apply_hostent(query, &he, 0, 0, 0, 0, 0);
+ netresolve_backend_apply_hostent(query, &he, 0, 0, 0, 0, 0, 0);
}
}
return;
}
- netresolve_backend_add_path(query, family, &address, ifindex, 0, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, family, &address, ifindex, 0, 0, 0, 0, 0, 0);
netresolve_backend_finished(query);
}
int port = -1;
int priority = 0;
int weight = 0;
+ int ttl = 0;
switch (status) {
case 0:
char **data;
for (data = result->data; *data; data++)
- netresolve_backend_add_path(query, family, *data, 0, socktype, protocol, port, priority, weight);
+ netresolve_backend_add_path(query, family, *data, 0, socktype, protocol, port, priority, weight, ttl);
}
ub_resolve_free(result);
break;
return;
}
- netresolve_backend_add_path(query, AF_UNIX, node, 0, socktype, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, AF_UNIX, node, 0, socktype, 0, 0, 0, 0, 0);
netresolve_backend_finished(query);
}
int family;
const void *address;
int ifindex;
+ int priority;
+ int weight;
+ int32_t ttl;
} PathData;
static void
netresolve_backend_add_path(data->query,
data->family, data->address, data->ifindex,
socktype, protocol, port,
- 0, 0);
+ data->priority, data->weight, data->ttl);
}
static int
netresolve_backend_add_path(netresolve_query_t query,
int family, const void *address, int ifindex,
int socktype, int protocol, int portnum,
- int priority, int weight)
+ int priority, int weight, int32_t ttl)
{
struct netresolve_response *response = &query->response;
- struct netresolve_path path;
int i;
if (family == AF_UNIX && !socktype) {
- netresolve_backend_add_path(query, family, address, 0, SOCK_STREAM, 0, 0, 0, 0);
- netresolve_backend_add_path(query, family, address, 0, SOCK_DGRAM, 0, 0, 0, 0);
+ netresolve_backend_add_path(query, family, address, 0, SOCK_STREAM, 0, 0, priority, weight, ttl);
+ netresolve_backend_add_path(query, family, address, 0, SOCK_DGRAM, 0, 0, priority, weight, ttl);
return;
}
.family = family,
.address = address,
.ifindex = ifindex,
+ .priority = priority,
+ .weight = weight,
+ .ttl = ttl
};
netresolve_get_service_info(path_callback, &data, query->request.servname,
size_t length = family_to_length(family);
- memset(&path, 0, sizeof path);
- path.node.family = family;
+ struct netresolve_path path = {
+ .node = {
+ .family = family,
+ .address = { 0 },
+ .ifindex = ifindex
+ },
+ .service = {
+ .socktype = socktype,
+ .protocol = protocol,
+ .port = portnum
+ },
+ .priority = priority,
+ .weight = weight,
+ .ttl = ttl
+ };
+
if (length)
memcpy(path.node.address, address, length);
else
strncpy(path.node.address, address, sizeof path.node.address);
- path.node.ifindex = ifindex;
- path.service.socktype = socktype;
- path.service.protocol = protocol;
- path.service.port = portnum;
- path.priority = priority;
- path.weight = weight;
for (i = 0; i < response->pathcount; i++)
if (path_cmp(&path, &response->paths[i]) < 0)
netresolve_backend_apply_hostent(netresolve_query_t query,
const struct hostent *he,
int socktype, int protocol, int port,
- int priority, int weight)
+ int priority, int weight, int32_t ttl)
{
char **addr;
netresolve_backend_add_path(query,
he->h_addrtype, *addr, 0,
socktype, protocol, port,
- priority, weight);
+ priority, weight, ttl);
if (he->h_name)
netresolve_backend_set_canonical_name(query, he->h_name);
void netresolve_backend_add_path(netresolve_query_t query,
int family, const void *address, int ifindex,
int socktype, int protocol, int port,
- int priority, int weight);
+ int priority, int weight, int32_t ttl);
void netresolve_backend_set_canonical_name(netresolve_query_t query, const char *canonical_name);
/* Tools */
void netresolve_backend_apply_hostent(netresolve_query_t query,
const struct hostent *he,
int socktype, int protocol, int port,
- int priority, int weight);
+ int priority, int weight, int32_t ttl);
/* Backend function prototypes */
void start(netresolve_query_t query, char **settings);