X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=service.c;h=db4694ebc7309991ac8e8fe5e8b8cf1a9cd65b06;hb=4297eef0b59183f79811b6cacf0e4ac0783e4baf;hp=71d987b2c5e67c104d41cf1dae584305a77a64a3;hpb=aee2d5582e56582ed0dc3096b364630b2ecfd56a;p=project%2Fmdnsd.git diff --git a/service.c b/service.c index 71d987b..db4694e 100644 --- a/service.c +++ b/service.c @@ -124,7 +124,7 @@ service_timeout(struct service *s) } void -service_reply_a(struct interface *iface, int type, int ttl) +service_reply_a(struct interface *iface, int ttl) { struct ifaddrs *ifap, *ifa; struct sockaddr_in *sa; @@ -136,11 +136,11 @@ service_reply_a(struct interface *iface, int type, int ttl) for (ifa = ifap; ifa; ifa = ifa->ifa_next) { if (strcmp(ifa->ifa_name, iface->name)) continue; - if (ifa->ifa_addr->sa_family==AF_INET) { + 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) { + 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)) @@ -188,11 +188,12 @@ service_reply(struct interface *iface, const char *match, int ttl) if (match) return; - service_reply_a(iface, TYPE_A, ttl); + if (ttl) + service_reply_a(iface, ttl); } void -service_announce_services(struct interface *iface, const char *service) +service_announce_services(struct interface *iface, const char *service, int ttl) { struct service *s; int tcp = 1; @@ -208,21 +209,23 @@ service_announce_services(struct interface *iface, const char *service) if (!strstr(s->service, "._udp") && !tcp) continue; s->t = 0; - dns_init_answer(); - service_add_ptr(s->service, announce_ttl); - if (tcp) - dns_send_answer(iface, sdtcp); - else - dns_send_answer(iface, sdudp); - service_reply(iface, s->service, announce_ttl); + if (ttl) { + dns_init_answer(); + service_add_ptr(s->service, ttl); + if (tcp) + dns_send_answer(iface, sdtcp); + else + dns_send_answer(iface, sdudp); + } + service_reply(iface, s->service, ttl); } } void -service_announce(struct interface *iface) +service_announce(struct interface *iface, int ttl) { - service_announce_services(iface, sdudp); - service_announce_services(iface, sdtcp); + service_announce_services(iface, sdudp, ttl); + service_announce_services(iface, sdtcp, ttl); } static void @@ -376,6 +379,8 @@ service_init_cb(struct ubus_request *req, int type, struct blob_attr *msg) void service_init(int announce) { + get_hostname(); + service_init_announce = announce; ubus_service_list(service_init_cb); }