Add simple "Fall through" comment to the announce_timer function switch
[project/mdnsd.git] / dns.c
diff --git a/dns.c b/dns.c
index 3f6ecbe3988614105d402564acce04fe5acb08ee..63788f73ebdb708ea66ac2e83e920e152ca68aed 100644 (file)
--- a/dns.c
+++ b/dns.c
@@ -39,6 +39,7 @@
 #include "interface.h"
 
 static char name_buffer[MAX_NAME_LEN + 1];
+static char dns_buffer[MAX_NAME_LEN];
 static struct blob_buf ans_buf;
 
 const char*
@@ -66,7 +67,7 @@ dns_type_string(uint16_t type)
 }
 
 void
-dns_send_question(struct interface *iface, const char *question, int type, int unicast)
+dns_send_question(struct interface *iface, const char *question, int type, int multicast)
 {
        static struct dns_header h;
        static struct dns_question q;
@@ -76,7 +77,7 @@ dns_send_question(struct interface *iface, const char *question, int type, int u
                        .iov_len = sizeof(h),
                },
                {
-                       .iov_base = name_buffer,
+                       .iov_base = dns_buffer,
                },
                {
                        .iov_base = &q,
@@ -86,10 +87,10 @@ dns_send_question(struct interface *iface, const char *question, int type, int u
        int len;
 
        h.questions = cpu_to_be16(1);
-       q.class = cpu_to_be16(((unicast) ? (CLASS_UNICAST) : (0))  | 1);
+       q.class = cpu_to_be16((multicast ? 0 : CLASS_UNICAST) | 1);
        q.type = cpu_to_be16(type);
 
-       len = dn_comp(question, (void *) name_buffer, sizeof(name_buffer), NULL, NULL);
+       len = dn_comp(question, (void *) dns_buffer, sizeof(dns_buffer), NULL, NULL);
        if (len < 1)
                return;
 
@@ -299,6 +300,9 @@ parse_answer(struct interface *iface, uint8_t *buffer, int len, uint8_t **b, int
                return -1;
        }
 
+       if ((a->class & ~CLASS_FLUSH) != CLASS_IN)
+               return -1;
+
        rdata = *b;
        if (a->rdlength > *rlen) {
                fprintf(stderr, "dropping: bad question\n");
@@ -309,7 +313,7 @@ parse_answer(struct interface *iface, uint8_t *buffer, int len, uint8_t **b, int
        *b += a->rdlength;
 
        if (cache)
-               cache_answer(iface, buffer, len, name, a, rdata);
+               cache_answer(iface, buffer, len, name, a, rdata, a->class & CLASS_FLUSH);
 
        return 0;
 }