Fix/change comment format about port 5353
[project/mdnsd.git] / service.c
index 0b42aee..f45784b 100644 (file)
--- a/service.c
+++ b/service.c
 #include <arpa/nameser.h>
 #include <sys/socket.h>
 
-#include <ifaddrs.h>
 #include <resolv.h>
 #include <glob.h>
 #include <stdio.h>
 #include <time.h>
 
-#include <uci.h>
-#include <uci_blob.h>
-
 #include <libubus.h>
 #include <libubox/vlist.h>
 #include <libubox/uloop.h>
@@ -110,7 +106,7 @@ service_add_srv(struct service *s, int ttl)
 
 #define TOUT_LOOKUP    60
 
-static int
+static time_t
 service_timeout(struct service *s)
 {
        time_t t = monotonic_time();
@@ -118,38 +114,7 @@ service_timeout(struct service *s)
        if (t - s->t <= TOUT_LOOKUP)
                return 0;
 
-       s->t = t;
-
-       return 1;
-}
-
-void
-service_reply_a(struct interface *iface, int ttl)
-{
-       struct ifaddrs *ifap, *ifa;
-       struct sockaddr_in *sa;
-       struct sockaddr_in6 *sa6;
-
-       getifaddrs(&ifap);
-
-       dns_init_answer();
-       for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
-               if (strcmp(ifa->ifa_name, iface->name))
-                       continue;
-               if (ifa->ifa_addr->sa_family == AF_INET) {
-                       sa = (struct sockaddr_in *) ifa->ifa_addr;
-                       dns_add_answer(TYPE_A, (uint8_t *) &sa->sin_addr, 4, ttl);
-               }
-               if (ifa->ifa_addr->sa_family == AF_INET6) {
-                       uint8_t ll_prefix[] = {0xfe, 0x80 };
-                       sa6 = (struct sockaddr_in6 *) ifa->ifa_addr;
-                       if (!memcmp(&sa6->sin6_addr, &ll_prefix, 2))
-                               dns_add_answer(TYPE_AAAA, (uint8_t *) &sa6->sin6_addr, 16, ttl);
-               }
-       }
-       dns_send_answer(iface, mdns_hostname_local);
-
-       freeifaddrs(ifap);
+       return t;
 }
 
 static void
@@ -157,8 +122,10 @@ service_reply_single(struct interface *iface, struct service *s, const char *mat
 {
        const char *host = service_name(s->service);
        char *service = strstr(host, "._");
+       time_t t = service_timeout(s);
+
 
-       if (!force && (!s->active || !service || !service_timeout(s)))
+       if (!force && (!s->active || !service || !t))
                return;
 
        service++;
@@ -166,6 +133,8 @@ service_reply_single(struct interface *iface, struct service *s, const char *mat
        if (match && strcmp(match, s->service))
                return;
 
+       s->t = t;
+
        dns_init_answer();
        service_add_ptr(service_name(s->service), ttl);
        dns_send_answer(iface, service);
@@ -184,12 +153,6 @@ service_reply(struct interface *iface, const char *match, int ttl)
 
        vlist_for_each_element(&services, s, node)
                service_reply_single(iface, s, match, ttl, 0);
-
-       if (match)
-               return;
-
-       if (ttl)
-               service_reply_a(iface, ttl);
 }
 
 void