#include <avahi-common/llist.h>
#include <avahi-common/malloc.h>
+#include <avahi-common/address.h>
#include <libdaemon/dfork.h>
#include <libdaemon/dsignal.h>
typedef struct DNSServerInfo DNSServerInfo;
struct DNSServerInfo {
- int interface;
- int protocol;
+ AvahiIfIndex interface;
+ AvahiProtocol protocol;
char *address;
AVAHI_LLIST_FIELDS(DNSServerInfo, servers);
};
avahi_free(i);
}
-static DNSServerInfo* get_server_info(int interface, int protocol, const char *address) {
+static DNSServerInfo* get_server_info(AvahiIfIndex interface, AvahiProtocol protocol, const char *address) {
DNSServerInfo *i;
assert(address);
return NULL;
}
-static DNSServerInfo* new_server_info(int interface, int protocol, const char *address) {
+static DNSServerInfo* new_server_info(AvahiIfIndex interface, AvahiProtocol protocol, const char *address) {
DNSServerInfo *i;
assert(address);
return ret;
}
-static char *concat_dns_servers(int interface) {
+static char *concat_dns_servers(AvahiIfIndex interface) {
DNSServerInfo *i;
char *r = NULL;
return r;
}
-static char *getifname(int interface, char *name, size_t len) {
+static char *getifname(AvahiIfIndex interface, char *name, size_t len) {
int fd = -1;
char *ret = NULL;
struct ifreq ifr;
}
memset(&ifr, 0, sizeof(ifr));
- ifr.ifr_ifindex = interface;
+ ifr.ifr_ifindex = (int) interface;
if (ioctl(fd, SIOCGIFNAME, &ifr) < 0) {
daemon_log(LOG_ERR, "SIOCGIFNAME: %s\n", strerror(errno));
assert(0);
}
-static void run_script(int new, int interface, int protocol, const char *address) {
+static void run_script(int new, AvahiIfIndex interface, AvahiProtocol protocol, const char *address) {
char *p;
int ret;
char ia[16], pa[16];
set_env(ENV_INTERFACE, name);
- snprintf(ia, sizeof(ia), "%i", interface);
- snprintf(pa, sizeof(pa), "%i", protocol);
+ snprintf(ia, sizeof(ia), "%i", (int) interface);
+ snprintf(pa, sizeof(pa), "%i", (int) protocol);
- if (daemon_exec("/", &ret, AVAHI_DNSCONF_SCRIPT, AVAHI_DNSCONF_SCRIPT, new ? "+" : "-", address, ia, pa, NULL) < 0)
+ if (daemon_exec("/", &ret, AVAHI_DNSCONF_SCRIPT, AVAHI_DNSCONF_SCRIPT, new ? "+" : "-", address, ia, pa, avahi_proto_to_string(protocol), NULL) < 0)
daemon_log(LOG_WARNING, "Failed to run script");
else if (ret != 0)
daemon_log(LOG_WARNING, "Script returned with non-zero exit code %i", ret);
daemon_log(LOG_INFO, "Successfully connected to Avahi daemon.");
state = BROWSING;
} else {
- int interface;
- int protocol;
- int port;
+ AvahiIfIndex interface;
+ AvahiProtocol protocol;
+ int i_interface, i_protocol, port;
char a[64];
assert(state == BROWSING);
return -1;
}
- if (sscanf(l+1, "%i %i %64s %i", &interface, &protocol, a, &port) != 4) {
+ if (sscanf(l+1, "%i %i %64s %i", &i_interface, &i_protocol, a, &port) != 4) {
daemon_log(LOG_ERR, "Failed to parse browsing line: %s", l);
return -1;
}
+ interface = (AvahiIfIndex) i_interface;
+ protocol = (AvahiProtocol) i_protocol;
+
if (*l == '>') {
if (port != 53)
daemon_log(LOG_WARNING, "DNS server with port address != 53 found, ignoring");
else {
- daemon_log(LOG_INFO, "New DNS Server %s (interface: %i.%u)", a, interface, protocol);
+ daemon_log(LOG_INFO, "New DNS Server %s (interface: %i.%s)", a, interface, avahi_proto_to_string(protocol));
new_server_info(interface, protocol, a);
run_script(1, interface, protocol, a);
}
if (port == 53)
if ((i = get_server_info(interface, protocol, a))) {
- daemon_log(LOG_INFO, "DNS Server %s removed (interface: %i.%u)", a, interface, protocol);
+ daemon_log(LOG_INFO, "DNS Server %s removed (interface: %i.%s)", a, interface, avahi_proto_to_string(protocol));
server_info_free(i);
run_script(0, interface, protocol, a);
}
static void free_dns_server_info_list(void) {
while (servers) {
- int interface = servers->interface;
- int protocol = servers->protocol;
+ AvahiIfIndex interface = servers->interface;
+ AvahiProtocol protocol = servers->protocol;
char *address = avahi_strdup(servers->address);
server_info_free(servers);