]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: use switch-case statements for protocol details
authorDaniel Mack <daniel@zonque.org>
Sat, 11 Jul 2015 20:21:26 +0000 (16:21 -0400)
committerDaniel Mack <daniel@zonque.org>
Tue, 25 Aug 2015 12:25:56 +0000 (14:25 +0200)
With more protocols to come, switch repetitive if-else blocks with a
switch-case statements.

src/resolve/resolved-dns-packet.c
src/resolve/resolved-dns-packet.h
src/resolve/resolved-dns-scope.c
src/resolve/resolved-dns-transaction.c

index bebd1ee4a6e55f64d32ddd80c496d2b520769bdb..784d949ccea68ad0ed93dacc2da48559d294384c 100644 (file)
@@ -64,7 +64,7 @@ int dns_packet_new(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
 int dns_packet_new_query(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
         DnsPacket *p;
         DnsPacketHeader *h;
-        int r;
+        int r, rd;
 
         assert(ret);
 
@@ -74,26 +74,27 @@ int dns_packet_new_query(DnsPacket **ret, DnsProtocol protocol, size_t mtu) {
 
         h = DNS_PACKET_HEADER(p);
 
-        if (protocol == DNS_PROTOCOL_LLMNR)
-                h->flags = htobe16(DNS_PACKET_MAKE_FLAGS(0 /* qr */,
-                                                         0 /* opcode */,
-                                                         0 /* c */,
-                                                         0 /* tc */,
-                                                         0 /* t */,
-                                                         0 /* ra */,
-                                                         0 /* ad */,
-                                                         0 /* cd */,
-                                                         0 /* rcode */));
-        else
-                h->flags = htobe16(DNS_PACKET_MAKE_FLAGS(0 /* qr */,
-                                                         0 /* opcode */,
-                                                         0 /* aa */,
-                                                         0 /* tc */,
-                                                         1 /* rd (ask for recursion) */,
-                                                         0 /* ra */,
-                                                         0 /* ad */,
-                                                         0 /* cd */,
-                                                         0 /* rcode */));
+        switch (protocol) {
+        case DNS_PROTOCOL_LLMNR:
+                /* no recursion for link-local resolving protocols */
+                rd = 0;
+                break;
+
+        default:
+                /* ask for recursion */
+                rd = 1;
+                break;
+        }
+
+        h->flags = htobe16(DNS_PACKET_MAKE_FLAGS(0  /* qr */,
+                                                 0  /* opcode */,
+                                                 0  /* aa */,
+                                                 0  /* tc */,
+                                                 rd /* rd */,
+                                                 0  /* ra */,
+                                                 0  /* ad */,
+                                                 0  /* cd */,
+                                                 0  /* rcode */));
 
         *ret = p;
         return 0;
index e81f8a820202f7ef470cd44cfc58ac5f3c3534f8..8a72b898da8065eb3be9e334993b8659adf7f40f 100644 (file)
@@ -239,11 +239,16 @@ static inline uint64_t SD_RESOLVED_FLAGS_MAKE(DnsProtocol protocol, int family)
 
         /* Converts a protocol + family into a flags field as used in queries */
 
-        if (protocol == DNS_PROTOCOL_DNS)
+        switch (protocol) {
+        case DNS_PROTOCOL_DNS:
                 return SD_RESOLVED_DNS;
 
-        if (protocol == DNS_PROTOCOL_LLMNR)
+        case DNS_PROTOCOL_LLMNR:
                 return family == AF_INET6 ? SD_RESOLVED_LLMNR_IPV6 : SD_RESOLVED_LLMNR_IPV4;
 
+        default:
+                break;
+        }
+
         return 0;
 }
index 336269ca8a6227bcc460cc8707fff2845327b6f6..77034a0be869bb7581c93506dcd60b9f63534a89 100644 (file)
@@ -166,7 +166,8 @@ int dns_scope_emit(DnsScope *s, int fd, DnsPacket *p) {
         } else
                 mtu = manager_find_mtu(s->manager);
 
-        if (s->protocol == DNS_PROTOCOL_DNS) {
+        switch (s->protocol) {
+        case DNS_PROTOCOL_DNS:
                 if (DNS_PACKET_QDCOUNT(p) > 1)
                         return -EOPNOTSUPP;
 
@@ -180,8 +181,9 @@ int dns_scope_emit(DnsScope *s, int fd, DnsPacket *p) {
                 if (r < 0)
                         return r;
 
-        } else if (s->protocol == DNS_PROTOCOL_LLMNR) {
+                break;
 
+        case DNS_PROTOCOL_LLMNR:
                 if (DNS_PACKET_QDCOUNT(p) > 1)
                         return -EOPNOTSUPP;
 
@@ -205,8 +207,12 @@ int dns_scope_emit(DnsScope *s, int fd, DnsPacket *p) {
                 r = manager_send(s->manager, fd, ifindex, family, &addr, port, p);
                 if (r < 0)
                         return r;
-        } else
+
+                break;
+
+        default:
                 return -EAFNOSUPPORT;
+        }
 
         return 1;
 }
@@ -341,27 +347,25 @@ DnsScopeMatch dns_scope_good_domain(DnsScope *s, int ifindex, uint64_t flags, co
                 if (dns_name_endswith(domain, *i) > 0)
                         return DNS_SCOPE_YES;
 
-        if (s->protocol == DNS_PROTOCOL_DNS) {
+        switch (s->protocol) {
+        case DNS_PROTOCOL_DNS:
                 if (dns_name_endswith(domain, "254.169.in-addr.arpa") == 0 &&
                     dns_name_endswith(domain, "0.8.e.f.ip6.arpa") == 0 &&
                     dns_name_single_label(domain) == 0)
                         return DNS_SCOPE_MAYBE;
 
                 return DNS_SCOPE_NO;
-        }
 
-        if (s->protocol == DNS_PROTOCOL_MDNS) {
+        case DNS_PROTOCOL_MDNS:
                 if ((s->family == AF_INET && dns_name_endswith(domain, "in-addr.arpa") > 0) ||
                     (s->family == AF_INET6 && dns_name_endswith(domain, "ip6.arpa") > 0) ||
                     (dns_name_endswith(domain, "local") > 0 && /* only resolve names ending in .local via mDNS */
                      dns_name_equal(domain, "local") == 0 &&   /* but not the single-label "local" name itself */
                      manager_is_own_hostname(s->manager, domain) <= 0)) /* never resolve the local hostname via mDNS */
-                        return DNS_SCOPE_MAYBE;
 
                 return DNS_SCOPE_NO;
-        }
 
-        if (s->protocol == DNS_PROTOCOL_LLMNR) {
+        case DNS_PROTOCOL_LLMNR:
                 if ((s->family == AF_INET && dns_name_endswith(domain, "in-addr.arpa") > 0) ||
                     (s->family == AF_INET6 && dns_name_endswith(domain, "ip6.arpa") > 0) ||
                     (dns_name_single_label(domain) > 0 && /* only resolve single label names via LLMNR */
@@ -370,9 +374,10 @@ DnsScopeMatch dns_scope_good_domain(DnsScope *s, int ifindex, uint64_t flags, co
                         return DNS_SCOPE_MAYBE;
 
                 return DNS_SCOPE_NO;
-        }
 
-        assert_not_reached("Unknown scope protocol");
+        default:
+                assert_not_reached("Unknown scope protocol");
+        }
 }
 
 int dns_scope_good_key(DnsScope *s, DnsResourceKey *key) {
index af654cbc692b10f7025eafb0504266e765fde84f..faea0585d3636f2e465bdd1ad5fe8445ebc790d2 100644 (file)
@@ -260,10 +260,12 @@ static int dns_transaction_open_tcp(DnsTransaction *t) {
         if (t->stream)
                 return 0;
 
-        if (t->scope->protocol == DNS_PROTOCOL_DNS)
+        switch (t->scope->protocol) {
+        case DNS_PROTOCOL_DNS:
                 fd = dns_scope_tcp_socket(t->scope, AF_UNSPEC, NULL, 53, &server);
-        else if (t->scope->protocol == DNS_PROTOCOL_LLMNR) {
+                break;
 
+        case DNS_PROTOCOL_LLMNR:
                 /* When we already received a reply to this (but it was truncated), send to its sender address */
                 if (t->received)
                         fd = dns_scope_tcp_socket(t->scope, t->received->family, &t->received->sender, t->received->sender_port, NULL);
@@ -285,8 +287,12 @@ static int dns_transaction_open_tcp(DnsTransaction *t) {
 
                         fd = dns_scope_tcp_socket(t->scope, family, &address, LLMNR_PORT, NULL);
                 }
-        } else
+
+                break;
+
+        default:
                 return -EAFNOSUPPORT;
+        }
 
         if (fd < 0)
                 return fd;
@@ -342,7 +348,8 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
          * should hence not attempt to access the query or transaction
          * after calling this function. */
 
-        if (t->scope->protocol == DNS_PROTOCOL_LLMNR) {
+        switch (t->scope->protocol) {
+        case DNS_PROTOCOL_LLMNR:
                 assert(t->scope->link);
 
                 /* For LLMNR we will not accept any packets from other
@@ -361,6 +368,14 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
                         dns_transaction_tentative(t, p);
                         return;
                 }
+
+                break;
+
+        case DNS_PROTOCOL_DNS:
+                break;
+
+        default:
+                break;
         }
 
         if (t->received != p) {