#include <string.h>
#include <unistd.h>
#include <stdlib.h>
+#include <netinet/in.h>
#include <avahi-common/malloc.h>
#include <avahi-common/error.h>
#include "log.h"
#include "hashmap.h"
#include "wide-area.h"
+#include "addr-util.h"
+#include "rr-util.h"
-#define MAX_CACHE_ENTRIES 500
+#define CACHE_ENTRIES_MAX 500
typedef struct AvahiWideAreaCacheEntry AvahiWideAreaCacheEntry;
int cleanup_dead;
- AvahiAddress dns_servers[AVAHI_MAX_WIDE_AREA_SERVERS];
+ AvahiAddress dns_servers[AVAHI_WIDE_AREA_SERVERS_MAX];
unsigned n_dns_servers;
unsigned current_dns_server;
};
if (l->engine->fd_ipv4 < 0)
return -1;
- return avahi_send_dns_packet_ipv4(l->engine->fd_ipv4, AVAHI_IF_UNSPEC, p, &a->data.ipv4, AVAHI_DNS_PORT);
+ return avahi_send_dns_packet_ipv4(l->engine->fd_ipv4, AVAHI_IF_UNSPEC, p, NULL, &a->data.ipv4, AVAHI_DNS_PORT);
} else {
assert(a->proto == AVAHI_PROTO_INET6);
if (l->engine->fd_ipv6 < 0)
return -1;
- return avahi_send_dns_packet_ipv6(l->engine->fd_ipv6, AVAHI_IF_UNSPEC, p, &a->data.ipv6, AVAHI_DNS_PORT);
+ return avahi_send_dns_packet_ipv6(l->engine->fd_ipv6, AVAHI_IF_UNSPEC, p, NULL, &a->data.ipv6, AVAHI_DNS_PORT);
}
}
is_new = 1;
/* Enforce cache size */
- if (e->cache_n_entries >= MAX_CACHE_ENTRIES)
+ if (e->cache_n_entries >= CACHE_ENTRIES_MAX)
/* Eventually we should improve the caching algorithm here */
goto finish;
return table[error];
}
-static void handle_packet(AvahiWideAreaLookupEngine *e, AvahiDnsPacket *p, AvahiAddress *a) {
+static void handle_packet(AvahiWideAreaLookupEngine *e, AvahiDnsPacket *p) {
AvahiWideAreaLookup *l = NULL;
int i, r;
}
}
-static void socket_event(AvahiWatch *w, int fd, AvahiWatchEvent events, void *userdata) {
+static void socket_event(AVAHI_GCC_UNUSED AvahiWatch *w, int fd, AVAHI_GCC_UNUSED AvahiWatchEvent events, void *userdata) {
AvahiWideAreaLookupEngine *e = userdata;
- AvahiAddress a;
AvahiDnsPacket *p = NULL;
- if (fd == e->fd_ipv4) {
- struct sockaddr_in sa;
-
- if ((p = avahi_recv_dns_packet_ipv4(e->fd_ipv4, &sa, NULL, NULL, NULL)))
- avahi_address_from_sockaddr((struct sockaddr*) &sa, &a);
-
- } else if (fd == e->fd_ipv6) {
- struct sockaddr_in6 sa6;
-
- if ((p = avahi_recv_dns_packet_ipv6(e->fd_ipv6, &sa6, NULL, NULL, NULL)))
- avahi_address_from_sockaddr((struct sockaddr*) &sa6, &a);
-
+ if (fd == e->fd_ipv4)
+ p = avahi_recv_dns_packet_ipv4(e->fd_ipv4, NULL, NULL, NULL, NULL, NULL);
+ else {
+ assert(fd == e->fd_ipv6);
+ p = avahi_recv_dns_packet_ipv6(e->fd_ipv6, NULL, NULL, NULL, NULL, NULL);
}
if (p) {
- handle_packet(e, p, &a);
+ handle_packet(e, p);
avahi_dns_packet_free(p);
}
}
assert(e);
if (a) {
- for (e->n_dns_servers = 0; n > 0 && e->n_dns_servers < AVAHI_MAX_WIDE_AREA_SERVERS; a++, n--)
+ for (e->n_dns_servers = 0; n > 0 && e->n_dns_servers < AVAHI_WIDE_AREA_SERVERS_MAX; a++, n--)
if ((a->proto == AVAHI_PROTO_INET && e->fd_ipv4 >= 0) || (a->proto == AVAHI_PROTO_INET6 && e->fd_ipv6 >= 0))
e->dns_servers[e->n_dns_servers++] = *a;
} else {